이 가이드에서는 다음을 설명합니다:
- Teleport의 Terraform Provider를 사용하여 Teleport 클러스터에 로그인 규칙을 배포하는 방법
- Terraform을 통해 배포된 로그인 규칙을 수정하는 방법
전제 조건
-
실행 중인 Teleport 클러스터. Teleport를 시작하려면 가입하기 무료 체험판을 이용해 보세요.
-
tctl
관리 도구 및tsh
클라이언트 도구 버전 >= 16.2.0.tctl
및tsh
다운로드 방법에 대한 지침은 설치를 방문하세요.
-
당신의 Teleport 클러스터에 연결할 수 있는지 확인하려면,
tsh login
으로 로그인한 다음 현재 자격 증명을 사용하여tctl
명령어를 실행할 수 있는지 확인하십시오.예를 들어:
tsh login --proxy=teleport.example.com --user=email@example.comtctl status클러스터 teleport.example.com
버전 16.2.0
CA 핀 sha256:abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678
클러스터에 연결하고
tctl status
명령어를 실행할 수 있다면, 현재 자격 증명을 사용하여 작업대에서 후속tctl
명령어를 실행할 수 있습니다.자신의 Teleport 클러스터를 호스팅하는 경우, Teleport 인증 서비스를 호스팅하는 컴퓨터에서 전체 권한으로
tctl
명령어를 실행할 수도 있습니다. -
terraform version
Terraform v1.0.0
1단계/4. Terraform에 대한 Teleport 자격 증명 설정
편의성을 위해 이 가이드에서는 현재 로그인된 사용자의 Teleport 자격 증명을 사용하도록 Terraform provider를 구성합니다. 이 자격 증명은 tsh login
에서 얻은 것입니다.
Terraform provider 가이드에는
비대화형 환경에서 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.yamlrole 'loginrule-manager'가 생성되었습니다
loginrule-manager
역할을 Teleport 사용자에게 할당하려면 인증 제공자에 맞는 적절한 명령어를 실행하세요:
-
로컬 사용자의 역할을 콤마로 구분된 목록으로 가져옵니다:
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 클러스터에서 로그아웃한 후 새로운 역할을 asum 하기 위해 다시 로그인합니다.
-
github
인증 커넥터를 가져옵니다:tctl get github/github --with-secrets > github.yaml--with-secrets
플래그는spec.signing_key_pair.private_key
의 값을github.yaml
파일에 추가합니다. 이 키는 민감한 값을 포함하고 있기 때문에, 리소스를 업데이트한 후 즉시github.yaml
파일을 제거해야 합니다. -
github.yaml
을 편집하고teams_to_roles
섹션에loginrule-manager
을 추가합니다.이 역할에 매핑할 팀은 귀하의 조직에서 어떻게 역할 기반 접근 제어(RBAC)를 설계했느냐에 따라 달라집니다. 하지만 팀에는 귀하의 사용자 계정이 포함되어야 하며, 조직 내에서 가능한 한 작은 팀이어야 합니다.
여기에 예시가 있습니다:
teams_to_roles: - organization: octocats team: admins roles: - access + - loginrule-manager
-
변경 사항을 적용합니다:
tctl create -f github.yaml -
Teleport 클러스터에서 로그아웃한 후 새로운 역할을 assum 하기 위해 다시 로그인합니다.
-
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 클러스터에서 로그아웃한 후 새로운 역할을 asum 하기 위해 다시 로그인합니다.
-
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 클러스터에서 로그아웃한 후 새로운 역할을 asum 하기 위해 다시 로그인합니다.
2단계/4. Terraform 구성 생성
다음 내용을 main.tf
라는 파일에 붙여넣어 Terraform provider를 구성하고 두 개의 예제 로그인 규칙을 생성하세요.
addr = "teleport.example.com:443"
필드를 Teleport Proxy의 공개 주소로 업데이트하는 것을 잊지 마세요.
(!examples/resources/terraform/terraform-login-rules.tf!)
3단계/4. 구성 적용
Terraform을 초기화하고 구성을 적용하세요:
terraform initterraform apply
4단계/4. 모든 것이 잘 작동했는지 확인
새로운 로그인 규칙이 클러스터에 이제 사용 가능한지 다시 확인하세요:
tctl get login_ruleskind: login_rulemetadata: description: Terraform 테스트 규칙 traits_expression 사용 id: 1680190764978381000 labels: example: "yes" name: terraform-test-expression-rulespec: 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_rulemetadata: description: Terraform 테스트 규칙 traits_map 사용 id: 1680193055097268000 labels: example: "yes" name: terraform-test-map-rulespec: priority: 0 traits_map: groups: - external.groups logins: - strings.lower(external.username) - external.loginsversion: v1
방금 설치한 로그인 규칙을 tctl login_rule test
명령어로 테스트하세요.
--load-from-cluster
플래그는 현재 클러스터에 설치된 모든 로그인 규칙을 로드하도록 명령에 지시합니다.
예제 traits를 명령의 표준 입력으로 보낼 수 있으며, Login Rules에 의해 변환된 최종 traits를 출력합니다.
echo '{"groups": ["admins", "ops"], "username": ["Alice"], "logins": ["user", "root"]}' | \ tctl login_rule test --load-from-clustergroups:- admins- ops- app-admins- db-adminslogins:- alice- user- root
다음 단계
- Terraform 가이드를 읽어 Terraform Provider 구성에 대해 더 알아보세요.
- 로그인 규칙 참조를 읽어 로그인 규칙 표현식 구문에 대해 자세히 알아보세요.