Infograb logo
Teleport Terraform 공급자 설정

이 가이드는 Linux 및 macOS에서 Teleport의 Terraform 공급자를 설정하는 방법을 보여줍니다.

Terraform은 사용자보다 머신 및 서비스에 신원을 제공하는 Teleport의 기능인 Machine ID와 함께 사용하도록 설계되었습니다. 이 튜토리얼에서는 로컬 Machine ID 봇을 사용하여 이를 시도하는 방법을 보여줍니다.

Terraform을 통해 사용자 및 역할을 관리하는 방법에 대한 지침은 "IaC로 사용자 및 역할 관리" 가이드를 참조하세요.

코드를 사용하여 Teleport 동적 리소스를 관리하는 방법에 대한 지침은 Spacelift 및 Machine ID와 함께 Teleport Terraform 공급자 사용 가이드를 참조하세요.

전제 조건

  • 실행 중인 Teleport 클러스터 버전 이상. Teleport를 시작하려면, 가입하기 위해 무료 평가판에 등록하거나 데모 환경 설정하기를 참조하세요.

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

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

  • Terraform >= 1.0.0+

    terraform version

    Terraform v1.0.0

    기존 Teleport 리소스를 Terraform 리소스로 가져오기 위해서는 Terraform 버전 v1.5.0 이상이 필요합니다.

  • 당신의 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 명령어를 실행할 수도 있습니다.

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

Terraform은 클러스터의 리소스를 관리하기 위해 Teleport 클러스터 인증 기관에서 서명된 신원 파일이 필요합니다. 로컬 Teleport 봇을 사용하여 자격 증명을 준비하려면:

  1. 임시 파일을 보관하기 위해 teleport-terraform이라는 폴더를 만듭니다:

    mkdir -p teleport-terraform
    cd teleport-terraform
  2. Terraform은 클러스터 리소스를 관리할 수 있는 권한을 부여하는 Teleport 역할이 필요합니다. 봇은 이 역할을 가진 신원 문서를 생성합니다. 다음 내용을 terraform_role.yaml 파일에 붙여넣어 필요한 역할을 구성하세요:

    kind: role
    metadata:
      name: terraform
    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
            - installer
            verbs: ['list','create','read','update','delete']
    version: v7
    

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

  3. 다음 명령을 실행하여 terraform 역할을 생성합니다:

    tctl create terraform_role.yaml
    role 'terraform' has been created
  4. 로컬 Terraform 봇을 빠르고 반복적으로 생성 및 삭제할 수 있는 두 개의 스크립트를 만듭니다. 먼저 create_and_run_terraform_bot.sh라는 새 파일을 만들고, 편집기로 열어 다음 내용을 붙여넣습니다:

    #! /usr/bin/env bash
    
    TOKEN=$(tctl bots add terraform-test --roles=terraform --format=json | jq -r '.token_id')
    tbot start \
      --destination-dir=./terraform-identity \
      --token="$TOKEN" \
      --data-dir=./tbot-data \
      --join-method=token \
      --auth-server=tele.example.com:443
      # 클러스터의 Teleport 인증 서비스 또는 Teleport 프록시 서비스의 호스트 및 포트로 교체하세요.
    

    실행 시, 이는 JSON 출력에서 가져온 토큰으로 새 봇을 생성합니다. 해당 토큰은 시작 명령으로 파이프됩니다. 보안상의 이유로, 봇 가입 토큰은 봇을 추가하는 방법 이외에는 생성할 수 없으므로, 로컬 개발 작업을 위해서는 봇과 해당 토큰을 수동으로 관리해야 합니다.

    봇은 현재 작업 디렉토리에 tbot-data라는 폴더에 상태 데이터를 관리합니다.

  5. create_and_run_terraform_bot.sh를 편집하여 tele.example.com:443을 클러스터의 Teleport 프록시 서비스의 도메인 이름과 포트로 교체합니다.

  6. remove_terraform_bot.sh라는 다른 파일을 만들고 편집기로 열어 다음 내용을 붙여넣습니다:

    #! /usr/bin/env bash
    
    tctl bots rm terraform-test
    rm -rfv ./terraform-identity
    rm -rfv ./tbot-data
    

    이 스크립트는 나중에 실행 간에 봇을 정리하고 작업을 마쳤을 때 사용할 것입니다.

  7. 새 터미널 창에서 create_and_run_terraform_bot.sh 스크립트를 실행하여 새 봇을 생성하고 시작합니다:

    chmod +x create_and_run_terraform_bot.sh
    ./create_and_run_terraform_bot.sh

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

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

  1. provider.tf라는 새 파일을 만들고 편집기로 엽니다.

  2. Teleport Terraform 공급자를 사용하고 클러스터에 연결하기 위해 다음 내용을 provider.tf 파일에 붙여넣습니다:

    (!examples/resources/terraform/provider-cloud.tf!)
    
    (!examples/resources/terraform/provider-self-hosted.tf!)
    

3단계/4. 구성 검증

구성을 적용하려면:

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

    ls

    provider.tf terraform-identity/ create_and_run_terraform_bot.sh remove_terraform_bot.sh terraform_role.yaml

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

    terraform init
  3. 다음 명령을 실행하여 구성 파일에 정의된 Terraform 계획을 실행합니다:

    terraform apply
  4. 작업이 끝나면 Ctrl-C를 눌러 Terraform 봇을 중지한 후, remove_terraform_bot.sh 스크립트를 실행하여 봇을 제거하고 terraform-identity 폴더를 정리합니다:

    chmod +x remove_terraform_bot.sh
    ./remove_terraform_bot.sh

    봇을 다시 시작해야 할 경우, 필요한 만큼 두 개의 봇 스크립트를 실행할 수 있습니다.

4단계/4. [선택 사항] 기존 리소스 가져오기

이 섹션에서는 기존의 동적 Teleport 리소스를 Terraform 리소스로 가져오는 방법을 보여줍니다.

tctl이나 Kubernetes Operator와 같은 다른 클라이언트 도구를 사용하여 이미 Teleport 리소스를 생성했고 Terraform 구성을 사용하여 모든 Teleport 리소스를 관리하려면 다음 단계를 따라 .tf 파일을 생성하여 기존 Teleport 리소스를 나타내는 resource 블록을 포함합니다.

모든 Teleport 리소스를 한 곳에 정의하여 클러스터 구성과 기대치를 일치시킬 수 있도록 합니다.

import 블록 추가

  1. 작업소에서 루트 Teleport Terraform 모듈로 이동합니다.

  2. Terraform 가져오기를 구성하기 위해 텍스트 편집기에서 파일을 엽니다. 구성 관리를 깔끔하게 하기 위해 imports.tf라는 새 파일을 엽니다.

  3. imports.tfimport 블록을 추가합니다. to 필드를 사용하여 Terraform에서 구성 생성을 원하는 리소스의 이름을 나타냅니다. 다음 예제는 myrole이라는 Teleport 역할을 가져옵니다:

    import {
      to = teleport_role.myrole
    }
    

리소스 ID 가져오기

  1. 리소스의 ID를 가져옵니다. 사용할 방법은 리소스 유형에 따라 다릅니다. 다음 규칙을 사용하여 수행합니다:

    teleport_provision_token 리소스의 경우, ID는 리소스의 metadata.id입니다.

    리소스가 단일 인스턴스만 가질 수 있는 경우, 리소스 유형의 이름에서 teleport 접두사를 제거한 것을 사용합니다. 예를 들어:

    리소스ID
    teleport_cluster_maintenance_configcluster_maintenance_config
    teleport_cluster_networking_configcluster_networking_config

    모든 기타 리소스의 경우, ID는 항상 리소스의 metadata.name입니다.

    예를 들어, teleport_role 리소스는 역할의 metadata.name 필드를 ID로 사용합니다. 가능한 모든 역할 ID를 찾으려면 다음 명령을 실행합니다:

    tctl get roles --format json | jq '.[].metadata.name'
  2. import 블록에서 id 필드에 앞서 가져온 리소스 ID를 할당합니다. 예를 들어, metadata.namemyrole인 Teleport 역할을 가져오려면 다음을 추가합니다:

      import {
        to = teleport_role.myrole
    +   id = "myrole"
      }
    

구성 파일 생성하기

  1. 리소스 구성 생성

    terraform plan -generate-config-out=imported-resources.tf
  2. 결과 파일 imported-resources.tf를 검토합니다. 새로운 resource 블록이 올바르게 보이면, 해당 파일을 소스 제어에 체크인할 수 있습니다.

다음 단계

Teleport 원문 보기