Infograb logo
장기 자격 증명으로 Teleport Terraform 프로바이더 실행

이 가이드는 Terraform 사용자를 생성하고 Teleport Auth 서비스가 장기 자격 증명을 서명하도록 하는 방법을 설명합니다. 그 후 Teleport Terraform Provider는 해당 자격 증명을 사용하여 Teleport와 상호 작용할 수 있습니다.

Warning

장기 자격 증명은 보안성이 낮으며 사용이 권장되지 않습니다. 이들은 Teleport에 대한 전체 관리 액세스를 보유하고 있으므로 자격 증명을 보호하고 주기적으로 교체해야 합니다. 가능한 경우 tbot , CI 또는 클라우드 환경에서 네이티브 MachineID 조인, 또는 로컬 사용을 위한 임시 봇 생성 을 사용하는 것을 선호해야 합니다.

사용 가능한 Terraform 프로바이더 설정 목록은 여기에서 확인하시기 바랍니다.

Important

장기 자격 증명은 관리 작업(MFA4A)용 MFA와 호환되지 않으며, 이는 Identity Provider(IdP)가 손상될 경우 Teleport를 보호하는 추가 보안 계층입니다.

전제 조건

  • 실행 중인 Teleport 클러스터 버전 17.0.0-dev 이상. Teleport를 시작하려면 가입하여 무료 평가판을 이용하거나 데모 환경 설정 방법을 확인하십시오.

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

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

  • Terraform >= 1.0.0+

    terraform version

    Terraform v1.0.0

  • 연결이 가능한지 확인하기 위해 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 명령어를 실행할 수도 있습니다.

1/3단계. Terraform을 위한 Teleport 자격 증명 생성

Terraform은 클러스터의 리소스를 관리하기 위해 Teleport 클러스터 인증 기관으로부터 서명된 신원 파일이 필요합니다. 이 작업을 위해 로컬 Teleport 사용자를 생성할 것입니다.

  1. 임시 파일을 보관할 teleport-terraform 이라는 폴더를 생성합니다:

    mkdir -p teleport-terraform
    cd teleport-terraform
  2. terraform.yaml 이라는 새 파일을 생성하고 편집기에서 엽니다.

  3. 로컬 Teleport 사용자 및 역할에 대한 설정을 구성하기 위해 terraform.yaml 파일에 다음 내용을 붙여넣습니다:

    kind: user
    metadata:
      name: terraform
    spec:
      roles: ["terraform-provider"]
    version: v2
    

    Starting with 16.2, Teleport comes with a built-in role for the Terraform provider: terraform-provider .

    이전 버전에서는 Terraform 역할을 직접 생성해야 합니다. 다음과 같은 role.yaml 매니페스트를 작성하세요:

    kind: role
    version: v7
    metadata:
      name: terraform-provider
    spec:
      allow:
        db_labels:
          '*': '*'
        app_labels:
          '*': '*'
        node_labels:
          '*': '*'
        rules:
          - resources:
            - app
            - cluster_auth_preference
            - cluster_networking_config
            - db
            - device
            - github
            - login_rule
            - oidc
            - okta_import_rule
            - role
            - saml
            - session_recording_config
            - token
            - trusted_cluster
            - user
            - access_list
            - node
            verbs: ['list','create','read','update','delete']
    

    역할을 생성하려면 tctl create -f ./role.yaml 을 사용하세요.

    이 설정은 Teleport 클러스터에서 리소스를 관리하는 데 필요한 권한을 가진 terraform 이라는 사용자 및 역할을 구성합니다.

  4. 다음 명령어를 실행하여 terraform 사용자 및 역할을 생성합니다:

    tctl create terraform.yaml

    terraform 사용자는 자격 증명을 받기 위해 로그인할 수 없으므로 다른 사용자가 terraform 계정을 대리하여 인증서를 요청해야 합니다.

  5. terraform-impersonator.yaml 이라는 새 파일을 생성하고 편집기에서 엽니다.

  6. 사용자가 Terraform 사용자를 대리할 수 있도록 역할을 구성하기 위해 terraform-impersonator.yaml 파일에 다음 내용을 붙여넣습니다:

    kind: role
    version: v7
    metadata:
      name: terraform-impersonator
    spec:
      allow:
        # 이 대리 역할은 이 역할에 할당된 모든 사용자가
        # "terraform"이라는 사용자에 대한 인증서를 생성할 수 있는 권한을 부여합니다.
        impersonate:
          users: ["terraform"]
          roles: ["terraform"]
    
  7. 다음 명령어를 실행하여 terraform-impersonator 역할을 생성합니다:

    tctl create terraform-impersonator.yaml
  8. terraform-impersonator 역할을 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?},terraform-impersonator"
    3. Teleport 클러스터에서 로그아웃한 후 다시 로그인하여 새로운 역할을 가집니다.

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

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

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

      예시는 다음과 같습니다:

        teams_to_roles:
          - organization: octocats
            team: admins
            roles:
              - access
      +       - terraform-impersonator
      
    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 섹션에 terraform-impersonator 을 추가합니다.

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

      예시는 다음과 같습니다:

        attributes_to_roles:
          - name: "groups"
            value: "my-group"
            roles:
              - access
      +       - terraform-impersonator
      
    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 섹션에 terraform-impersonator 을 추가합니다.

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

      예시는 다음과 같습니다:

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

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

  9. 다음 명령어를 실행하여 Terraform 사용자에 대한 서명된 신원 파일을 요청합니다:

    tctl auth sign --user=terraform --out=terraform-identity

    이 명령을 실행한 후, Terraform 사용자의 자격 증명이 포함된 terraform-identity 파일이 생성됩니다.

2/3단계. Terraform 구성 파일 준비

Terraform 구성 파일을 준비하려면:

  1. main.tf 라는 새 파일을 만들고 편집기에서 엽니다.

  2. 다음 내용을 main.tf 파일에 붙여넣어 Terraform을 사용하여 예제 사용자 및 역할을 정의합니다:

    terraform { required_providers { teleport = { source = "terraform.releases.teleport.dev/gravitational/teleport" version = "~> 17.0" } }}
    provider "teleport" { addr = 'teleport.example.com:443' identity_file_path = "terraform-identity"}

    테스트 역할을 만들어야 합니다. 리소스를 선언하지 않으면 Terraform은 Teleport에 연결하려고 시도하지 않으며

    설정을 검증할 수 없습니다.

    resource "teleport_role" "test" { version = "v7" metadata = { name = "test" description = "Terraform Provider 설정을 검증하기 위한 더미 역할" labels = { test = "yes" } }
    spec = {}}

3/3단계. 구성 적용

구성을 적용하려면:

  1. teleport-terraform 폴더의 내용을 확인합니다:

    ls

    main.tf terraform-identity terraform-impersonator.yaml terraform.yaml

  2. 다음 명령을 실행하여 Terraform 구성 파일이 포함된 작업 디렉토리를 초기화합니다:

    terraform init
    백엔드 초기화 중...
    공급자 플러그인 초기화 중...- terraform.releases.teleport.dev/gravitational/teleport 버전 검색 중 ...
  3. 다음 명령을 실행하여 구성 파일에 정의된 Terraform 계획을 실행합니다:

    terraform apply
    Terraform은 선택된 공급자를 사용하여 다음 실행 계획을 생성했습니다. 리소스 작업은 다음 기호로 표시됩니다:+ create
    Terraform은 다음 작업을 수행합니다:

    teleport_role.test가 생성됩니다

    + resource "teleport_role" "test" { + id = (적용 후 알 수 있음) + kind = (적용 후 알 수 있음) + metadata = { + name = "test" + namespace = (적용 후 알 수 있음) } + spec = {} + version = "v7" }
    계획: 1 추가, 0 변경, 0 제거.

다음 단계

Teleport 원문 보기