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

이 가이드에서는 다음을 설명합니다:

  • Teleport의 Terraform Provider를 사용하여 Teleport 클러스터에 로그인 규칙을 배포하는 방법
  • Terraform을 통해 배포된 로그인 규칙을 수정하는 방법

전제 조건

  • 실행 중인 Teleport 클러스터. Teleport를 시작하려면 가입하기 무료 체험판을 이용해 보세요.

  • tctl 관리 도구 및 tsh 클라이언트 도구 버전 >= 16.2.0.

    tctltsh 다운로드 방법에 대한 지침은 설치를 방문하세요.

  • 당신의 Teleport 클러스터에 연결할 수 있는지 확인하려면, tsh login으로 로그인한 다음 현재 자격 증명을 사용하여 tctl 명령어를 실행할 수 있는지 확인하십시오.

    예를 들어:

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

    클러스터 teleport.example.com

    버전 16.2.0

    CA 핀 sha256:abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678

    클러스터에 연결하고 tctl status 명령어를 실행할 수 있다면, 현재 자격 증명을 사용하여 작업대에서 후속 tctl 명령어를 실행할 수 있습니다.

    자신의 Teleport 클러스터를 호스팅하는 경우, Teleport 인증 서비스를 호스팅하는 컴퓨터에서 전체 권한으로 tctl 명령어를 실행할 수도 있습니다.

  • Terraform >= 1.0.0+

    terraform version

    Terraform v1.0.0

1단계/4. Terraform에 대한 Teleport 자격 증명 설정

편의성을 위해 이 가이드에서는 현재 로그인된 사용자의 Teleport 자격 증명을 사용하도록 Terraform provider를 구성합니다. 이 자격 증명은 tsh login에서 얻은 것입니다.

Note

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.yaml
role 'loginrule-manager'가 생성되었습니다

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 클러스터에서 로그아웃한 후 새로운 역할을 asum 하기 위해 다시 로그인합니다.

  1. github 인증 커넥터를 가져옵니다:

    tctl get github/github --with-secrets > github.yaml

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

  2. github.yaml을 편집하고 teams_to_roles 섹션에 loginrule-manager을 추가합니다.

    이 역할에 매핑할 팀은 귀하의 조직에서 어떻게 역할 기반 접근 제어(RBAC)를 설계했느냐에 따라 달라집니다. 하지만 팀에는 귀하의 사용자 계정이 포함되어야 하며, 조직 내에서 가능한 한 작은 팀이어야 합니다.

    여기에 예시가 있습니다:

      teams_to_roles:
        - organization: octocats
          team: admins
          roles:
            - access
    +       - loginrule-manager
    
  3. 변경 사항을 적용합니다:

    tctl create -f github.yaml
  4. Teleport 클러스터에서 로그아웃한 후 새로운 역할을 assum 하기 위해 다시 로그인합니다.

  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 클러스터에서 로그아웃한 후 새로운 역할을 asum 하기 위해 다시 로그인합니다.

  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 클러스터에서 로그아웃한 후 새로운 역할을 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 init
terraform apply

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

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

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

다음 단계

Teleport 원문 보기