인포레터에서 최신 DevOps 트렌드를 격주로 만나보세요!
Terraform를 통한 로그인 규칙 배포
이 안내서는 다음을 설명합니다:
- Teleport의 Terraform 제공자를 사용하여 Teleport 클러스터에 로그인 규칙을 배포하는 방법
- Terraform을 통해 배포된 로그인 규칙을 편집하는 방법
전제 조건
-
실행 중인 Teleport 클러스터. Teleport를 시작하려면 가입하여 무료 평가판을 이용해 보십시오.
-
tctl
관리자 도구 및tsh
클라이언트 도구.tctl
및tsh
다운로드에 대한 지침은 설치 를 방문하십시오.
-
연결이 가능한지 확인하기 위해
tsh login
으로 로그인한 다음, 현재 자격 증명을 사용하여tctl
명령어를 실행할 수 있는지 확인하십시오.예를 들어:
tsh login --proxy=teleport.example.com --user=email@example.comtctl status클러스터 teleport.example.com
버전 17.0.0-dev
CA 핀 sha256:abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678
클러스터에 연결할 수 있고
tctl status
명령어를 실행할 수 있다면, 현재 자격 증명을 사용하여 워크스테이션에서 후속tctl
명령어를 실행할 수 있습니다.
자신의 Teleport 클러스터를 호스팅하는 경우, Teleport Auth Service를 호스팅하는 컴퓨터에서 전체 권한으로tctl
명령어를 실행할 수도 있습니다. -
terraform version
Terraform v1.0.0
1/4단계. Terraform을 위한 Teleport 자격 증명 설정
편의를 위해 이 안내서는 Terraform 제공자가 tsh login
을 통해 얻은 현재 로그인한 사용자의 Teleport 자격 증명을 사용하도록 구성합니다.
Note
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.yamlrole 'loginrule-manager' has been created
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 클러스터에서 로그아웃한 후 다시 로그인하여 새로운 역할을 가집니다.
-
텍스트 편집기에서
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
구성 리소스를 가져옵니다: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
구성 리소스를 가져옵니다: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의 공개 주소로 업데이트해야 합니다.
(!examples/resources/terraform/terraform-login-rules.tf!)
3/4단계. 구성 적용
Terraform을 초기화하고 구성을 적용하십시오:
terraform initterraform apply
4/4단계. 모든 것이 잘 작동했는지 확인
새 로그인 규칙이 클러스터에 이제 사용 가능한지 다시 확인하십시오:
tctl get login_ruleskind: login_rulemetadata: description: Terraform test rule using 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 test rule using 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를 명령의 표준 입력으로 보낼 수 있으며, 변환된 후 최종 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 가이드 를 읽으십시오.
- 로그인 규칙 표현식 구문에 대해 자세히 알아보려면 로그인 규칙 참조 를 읽으십시오.