Infograb logo
Terraform를 통한 로그인 규칙 배포

이 안내서는 다음을 설명합니다:

  • Teleport의 Terraform 제공자를 사용하여 Teleport 클러스터에 로그인 규칙을 배포하는 방법
  • Terraform을 통해 배포된 로그인 규칙을 편집하는 방법

전제 조건

  • 실행 중인 Teleport 클러스터. Teleport를 시작하려면 가입하여 무료 평가판을 이용해 보십시오.

  • tctl 관리자 도구 및 tsh 클라이언트 도구.

    tctltsh 다운로드에 대한 지침은 설치 를 방문하십시오.

  • 연결이 가능한지 확인하기 위해 tsh login 으로 로그인한 다음, 현재 자격 증명을 사용하여 tctl 명령어를 실행할 수 있는지 확인하십시오.

    예를 들어:

    tsh login --proxy=teleport.example.com --user=email@example.com
    tctl status

    클러스터 teleport.example.com

    버전 17.0.0-dev

    CA 핀 sha256:abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678

    클러스터에 연결할 수 있고 tctl status 명령어를 실행할 수 있다면, 현재 자격 증명을 사용하여 워크스테이션에서 후속 tctl 명령어를 실행할 수 있습니다.
    자신의 Teleport 클러스터를 호스팅하는 경우, Teleport Auth Service를 호스팅하는 컴퓨터에서 전체 권한으로 tctl 명령어를 실행할 수도 있습니다.

  • Terraform >= 1.0.0+

    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.yaml
role 'loginrule-manager' has been created

loginrule-manager 역할을 Teleport 사용자에게 할당하려면, 인증 제공자에 맞는 적절한 명령어를 실행하십시오:

  1. 로컬 사용자의 역할을 쉼표로 구분된 목록으로 가져옵니다:

    ROLES=$(tsh status -f json | jq -r '.active.roles | join(",")')
  2. 새로운 역할을 추가하기 위해 로컬 사용자를 수정합니다:

    tctl users update $(tsh status -f json | jq -r '.active.username') \ --set-roles "${ROLES?},loginrule-manager"
  3. Teleport 클러스터에서 로그아웃한 후 다시 로그인하여 새로운 역할을 가집니다.

  1. 텍스트 편집기에서 github 인증 커넥터를 엽니다:

    tctl edit github/github
  2. github 커넥터를 수정하여 teams_to_roles 섹션에 loginrule-manager 을 추가합니다.

    이 역할에 매핑해야 하는 팀은 조직의 역할 기반 액세스 제어(RBAC) 설계에 따라 다릅니다. 그러나 팀은 귀하의 사용자 계정을 포함해야 하며, 조직 내에서 가장 작은 팀이어야 합니다.

    예시는 다음과 같습니다:

      teams_to_roles:
        - organization: octocats
          team: admins
          roles:
            - access
    +       - loginrule-manager
    
  3. 파일을 편집하고 저장하여 변경 사항을 적용합니다.

  4. Teleport 클러스터에서 로그아웃한 후 다시 로그인하여 새로운 역할을 가집니다.

  1. saml 구성 리소스를 가져옵니다:

    tctl get --with-secrets saml/mysaml > saml.yaml

    --with-secrets 플래그는 spec.signing_key_pair.private_key 의 값을 saml.yaml 파일에 추가합니다. 이 키는 민감한 값을 포함하므로, 리소스를 업데이트한 후 즉시 saml.yaml 파일을 삭제해야 합니다.

  2. saml.yaml 을 수정하여 attributes_to_roles 섹션에 loginrule-manager 을 추가합니다.

    이 역할에 매핑해야 하는 속성은 조직의 역할 기반 액세스 제어(RBAC) 설계에 따라 다릅니다. 그러나 그룹은 귀하의 사용자 계정을 포함해야 하며, 조직 내에서 가장 작은 그룹이어야 합니다.

    예시는 다음과 같습니다:

      attributes_to_roles:
        - name: "groups"
          value: "my-group"
          roles:
            - access
    +       - loginrule-manager
    
  3. 변경 사항을 적용합니다:

    tctl create -f saml.yaml
  4. Teleport 클러스터에서 로그아웃한 후 다시 로그인하여 새로운 역할을 가집니다.

  1. oidc 구성 리소스를 가져옵니다:

    tctl get oidc/myoidc --with-secrets > oidc.yaml

    --with-secrets 플래그는 spec.signing_key_pair.private_key 의 값을 oidc.yaml 파일에 추가합니다. 이 키는 민감한 값을 포함하므로, 리소스를 업데이트한 후 즉시 oidc.yaml 파일을 삭제해야 합니다.

  2. oidc.yaml 을 수정하여 claims_to_roles 섹션에 loginrule-manager 을 추가합니다.

    이 역할에 매핑해야 하는 클레임은 조직의 역할 기반 액세스 제어(RBAC) 설계에 따라 다릅니다. 그러나 그룹은 귀하의 사용자 계정을 포함해야 하며, 조직 내에서 가장 작은 그룹이어야 합니다.

    예시는 다음과 같습니다:

      claims_to_roles:
        - name: "groups"
          value: "my-group"
          roles:
            - access
    +       - loginrule-manager
    
  3. 변경 사항을 적용합니다:

    tctl create -f oidc.yaml
  4. 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 init
terraform apply

4/4단계. 모든 것이 잘 작동했는지 확인

새 로그인 규칙이 클러스터에 이제 사용 가능한지 다시 확인하십시오:

tctl get login_rules
kind: 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-cluster
groups:- admins- ops- app-admins- db-adminslogins:- alice- user- root

다음 단계

  • Terraform 제공자를 구성하는 방법에 대해 자세히 알아보려면 Terraform 가이드 를 읽으십시오.
  • 로그인 규칙 표현식 구문에 대해 자세히 알아보려면 로그인 규칙 참조 를 읽으십시오.
Teleport 원문 보기