Terraform을 통해 로그인 규칙 배포
Teleport v18.9이 가이드에서는 다음 방법을 설명합니다: 로그인 규칙(Login Rules)은 Auth Service 백엔드에 저장된 리소스로 Teleport Auth Service에 등록됩니다. 실행 중인 Teleport Enterprise 클러스터.
이 가이드에서는 다음 방법을 설명합니다:
- Teleport의 Terraform Provider를 사용하여 Teleport 클러스터에 로그인 규칙(Login Rules) 배포
- Terraform을 통해 배포된 로그인 규칙 편집
작동 방식#
로그인 규칙(Login Rules)은 Auth Service 백엔드에 저장된 리소스로 Teleport Auth Service에 등록됩니다. Teleport Auth Service는 로그인 규칙을 포함한 백엔드 리소스를 생성, 삭제 또는 수정할 수 있는 gRPC API를 노출합니다. Teleport Terraform Provider는 Teleport Auth Service에 인증하고 gRPC API와 상호작용하여 에이전트 없는 SSH 서비스를 관리할 수 있습니다.
사전 요구사항#
-
실행 중인 Teleport Enterprise 클러스터. Teleport를 시작하려면 무료 체험판에 가입하거나 데모 환경을 구성하세요.
-
tctlandtshclients.Installing `tctl` and `tsh` clients
-
Teleport 클러스터의 버전을 확인합니다.
tctlandtshclients는 Teleport 클러스터 버전보다 최대 한 개의 메이저 버전까지만 뒤처질 수 있습니다. Proxy Service의/v1/webapi/find로 GET 요청을 보내고 JSON 쿼리 도구를 사용하여 클러스터 버전을 확인합니다.teleport.example.com:443를 Teleport Proxy Service의 웹 주소로 바꿉니다:$ TELEPORT_DOMAIN=teleport.example.com:443 $ TELEPORT_VERSION="$(curl -s https://$TELEPORT_DOMAIN/v1/webapi/find | jq -r '.server_version')" -
사용 중인 플랫폼에 대한 지침에 따라
tctlandtshclients를 설치합니다:
-
Mac
`tctl` and `tsh` clients가 포함된, 서명된 Teleport macOS .pkg 설치 프로그램을 다운로드합니다:
```code
$ curl -O https://cdn.teleport.dev/teleport-${TELEPORT_VERSION?}.pkg
```
Finder에서 `pkg` 파일을 더블 클릭하여 설치를 시작합니다.
Homebrew를 사용하여 Teleport를 설치하는 것은 지원되지 않습니다. Homebrew의
Teleport 패키지는 Teleport에서 유지 관리하지 않으므로 신뢰성이나 보안을
보장할 수 없습니다.
Windows - Powershell
```code
$ curl.exe -O https://cdn.teleport.dev/teleport-v${TELEPORT_VERSION?}-windows-amd64-bin.zip
# Unzip the archive and move the `tctl` and `tsh` clients to your %PATH%
# NOTE: Do not place the `tctl` and `tsh` clients in the System32 directory, as this can cause issues when using WinSCP.
# Use %SystemRoot% (C:\Windows) or %USERPROFILE% (C:\Users\<username>) instead.
```
Linux
Linux 설치판의 모든 Teleport 바이너리에는 `tctl` and `tsh` clients가 포함되어 있습니다. RPM/DEB
패키지 및 i386/ARM/ARM64용 다운로드를 포함한 더 많은 옵션은
[설치 페이지](../installation/installation.mdx)를 참조하세요.
```code
$ curl -O https://cdn.teleport.dev/teleport-v${TELEPORT_VERSION?}-linux-amd64-bin.tar.gz
$ tar -xzf teleport-v${TELEPORT_VERSION?}-linux-amd64-bin.tar.gz
$ cd teleport
$ sudo ./install
# Teleport binaries have been copied to /usr/local/bin
```
Teleport cluster에 연결할 수 있는지 확인하려면 tsh login으로 로그인한 다음,
현재 자격 증명으로 tctl 명령을 실행할 수 있는지 확인합니다.
예를 들어, teleport.example.com에 cluster 내 Teleport Proxy Service의
도메인 이름을, email@example.com에 Teleport 사용자 이름을 지정하여
다음 명령을 실행합니다:
$ tsh login --proxy=teleport.example.com --user=email@example.com
$ tctl status
# Cluster (=teleport.url=)
# Version (=teleport.version=)
# CA pin (=presets.ca_pin=)
cluster에 연결하여 tctl status 명령을 실행할 수 있다면, 현재 자격 증명을 사용하여
워크스테이션에서 이후의 tctl 명령을 실행할 수 있습니다.
자체 Teleport cluster를 호스팅하는 경우, 전체 권한을 얻기 위해 Teleport Auth Service를
호스팅하는 컴퓨터에서 tctl 명령을 실행할 수도 있습니다.
-
Terraform >=
[terraform.version]+$ terraform version # Terraform v(=terraform.version=)
1단계/4단계: Terraform용 Teleport 자격 증명 설정#
간단히 하기 위해, 이 가이드에서는 tsh login을 통해 얻은 현재 로그인된 사용자의 Teleport 자격 증명을 사용하도록 Terraform 공급자를 구성합니다.
참고: Terraform 공급자 가이드에는 전용
terraform사용자 및 역할 구성에 관한 지침이 포함되어 있으며, 이는 비대화형 환경에서 Terraform을 실행할 때 더 좋은 옵션입니다.이미 Teleport 클러스터에서 다른 리소스를 관리하기 위해 Terraform을 사용하고 있다면
terraform사용자 및 역할을 이미 설정하고 관련 자격 증명을 구성했을 것입니다. 최신 버전의 가이드에서login_rule리소스에 대해list,read,create,update,delete동사가 있는terraform역할을 사용하고 있는지 확인하세요.
먼저 login_rule 리소스를 읽고 수정할 권한이 있는 사용자로 Teleport에 로그인되어 있는지 확인합니다. 사전 설정된 editor 역할은 이미 이 권한을 가지고 있지만, 더 맞춤화된 구성을 사용하는 경우에는 다음 내용으로 loginrule-manager.yaml이라는 역할을 생성합니다:
kind: role
metadata:
name: loginrule-manager
spec:
allow:
rules:
- resources: [login_rule]
verbs: [list, read, create, update, delete]
version: v7
tctl로 역할을 생성합니다:
$ tctl create loginrule-manager.yaml
role 'loginrule-manager' has been created
인증 공급자에 맞는 적절한 명령을 실행하여 loginrule-manager 역할을
your Teleport user에게 할당하십시오:
Local User
-
로컬 사용자의 역할을 쉼표로 구분된 목록으로 가져옵니다:
$ ROLES=$(tsh status -f json | jq -r '.active.roles | join(",")') -
로컬 사용자를 편집하여 새 역할을 추가합니다:
$ tctl users update $(tsh status -f json | jq -r '.active.username') \ --set-roles "${ROLES?},loginrule-manager" -
Teleport 클러스터에서 로그아웃한 다음 다시 로그인하여 새 역할을 적용합니다.
GitHub
-
텍스트 편집기에서
github인증 커넥터를 엽니다:$ tctl edit github/github -
github커넥터를 편집하여teams_to_roles섹션에loginrule-manager을 추가합니다.이 역할에 매핑해야 할 팀은 조직의 역할 기반 액세스 제어(RBAC)를 어떻게 설계했는지에 따라 달라집니다. 다만, 해당 팀은 여러분의 사용자 계정을 포함해야 하며 조직 내에서 가능한 한 가장 작은 팀이어야 합니다.
다음은 예시입니다:
teams_to_roles: - organization: octocats team: admins roles: - access + - loginrule-manager -
편집기에서 파일을 저장하고 닫아 변경 사항을 적용합니다.
-
Teleport 클러스터에서 로그아웃한 다음 다시 로그인하여 새 역할을 적용합니다.
SAML
-
saml구성 리소스를 가져옵니다:$ tctl get --with-secrets saml/mysaml > saml.yaml--with-secrets플래그는spec.signing_key_pair.private_key값을saml.yaml파일에 추가한다는 점에 유의하십시오. 이 키에는 민감한 값이 포함되어 있으므로, 리소스를 업데이트한 직후 saml.yaml 파일을 삭제해야 합니다. -
saml.yaml을 편집하여attributes_to_roles섹션에loginrule-manager을 추가합니다.이 역할에 매핑해야 할 속성은 조직의 역할 기반 액세스 제어(RBAC)를 어떻게 설계했는지에 따라 달라집니다. 다만, 해당 그룹은 여러분의 사용자 계정을 포함해야 하며 조직 내에서 가능한 한 가장 작은 그룹이어야 합니다.
다음은 예시입니다:
attributes_to_roles: - name: "groups" value: "my-group" roles: - access + - loginrule-manager -
변경 사항을 적용합니다:
$ tctl create -f saml.yaml -
Teleport 클러스터에서 로그아웃한 다음 다시 로그인하여 새 역할을 적용합니다.
OIDC
-
oidc구성 리소스를 가져옵니다:$ tctl get oidc/myoidc --with-secrets > oidc.yaml--with-secrets플래그는spec.signing_key_pair.private_key값을oidc.yaml파일에 추가한다는 점에 유의하십시오. 이 키에는 민감한 값이 포함되어 있으므로, 리소스를 업데이트한 직후 oidc.yaml 파일을 삭제해야 합니다. -
oidc.yaml을 편집하여claims_to_roles섹션에loginrule-manager을 추가합니다.이 역할에 매핑해야 할 클레임은 조직의 역할 기반 액세스 제어(RBAC)를 어떻게 설계했는지에 따라 달라집니다. 다만, 해당 그룹은 여러분의 사용자 계정을 포함해야 하며 조직 내에서 가능한 한 가장 작은 그룹이어야 합니다.
다음은 예시입니다:
claims_to_roles: - name: "groups" value: "my-group" roles: - access + - loginrule-manager -
변경 사항을 적용합니다:
$ tctl create -f oidc.yaml -
Teleport 클러스터에서 로그아웃한 다음 다시 로그인하여 새 역할을 적용합니다.
2단계/4단계: Terraform 구성 생성#
다음 내용을 main.tf라는 파일에 붙여넣어 Terraform 공급자를 구성하고 두 개의 예시 로그인 규칙을 생성합니다. addr = "teleport.example.com:443" 필드를 Teleport Proxy의 공개 주소로 업데이트해야 합니다.
<div class="admonition note"><div class="admonition-title">Note</div><p>이 섹션의 내용은 원문 문서를 참조하세요. (<code>terraform-login-rules.tf</code>)</p></div>
3단계/4단계: 구성 적용#
Terraform을 초기화하고 구성을 적용합니다:
$ terraform init
$ terraform apply
4단계/4단계: 정상 작동 확인#
클러스터에서 새 로그인 규칙을 사용할 수 있는지 다시 확인합니다:
$ tctl get login_rules
kind: login_rule
metadata:
description: Terraform test rule using traits_expression
id: 1680190764978381000
labels:
example: "yes"
name: terraform-test-expression-rule
spec:
priority: 1
traits_expression: |
external.put("groups",
choose(
option(external.groups.contains("admins"),
external.groups.add("app-admins", "db-admins")),
option(external.groups.contains("ops"),
external.groups.add("k8s-admins")),
option(true, external.groups)))
version: v1
---
kind: login_rule
metadata:
description: Terraform test rule using traits_map
id: 1680193055097268000
labels:
example: "yes"
name: terraform-test-map-rule
spec:
priority: 0
traits_map:
groups:
- external.groups
logins:
- strings.lower(external.username)
- external.logins
version: v1
방금 설치한 로그인 규칙을 tctl login_rule test 명령으로 테스트합니다. --load-from-cluster 플래그는 클러스터에 현재 설치된 모든 로그인 규칙을 로드하도록 명령에 지시합니다. 명령의 표준 입력에 예시 트레잇을 보내면 로그인 규칙에 의해 변환된 최종 트레잇을 출력합니다.
$ echo '{"groups": ["admins", "ops"], "username": ["Alice"], "logins": ["user", "root"]}' | \
tctl login_rule test --load-from-cluster
groups:
- admins
- ops
- app-admins
- db-admins
logins:
- alice
- user
- root
다음 단계#
- Terraform 공급자 구성에 대해 자세히 알아보려면 Terraform 가이드를 읽으세요.
- 로그인 규칙 표현식 구문에 대해 알아보려면 로그인 규칙 참조를 읽으세요.