이 가이드는 Linux 및 macOS에서 Teleport의 Terraform 공급자를 설정하는 방법을 보여줍니다.
Terraform은 사용자보다 머신 및 서비스에 신원을 제공하는 Teleport의 기능인 Machine ID와 함께 사용하도록 설계되었습니다. 이 튜토리얼에서는 로컬 Machine ID 봇을 사용하여 이를 시도하는 방법을 보여줍니다.
Terraform을 통해 사용자 및 역할을 관리하는 방법에 대한 지침은 "IaC로 사용자 및 역할 관리" 가이드를 참조하세요.
코드를 사용하여 Teleport 동적 리소스를 관리하는 방법에 대한 지침은 Spacelift 및 Machine ID와 함께 Teleport Terraform 공급자 사용 가이드를 참조하세요.
전제 조건
-
실행 중인 Teleport 클러스터 버전 이상. Teleport를 시작하려면, 가입하기 위해 무료 평가판에 등록하거나 데모 환경 설정하기를 참조하세요.
-
tctl
관리 도구와tsh
클라이언트 도구.tctl
과tsh
다운로드에 대한 지침은 설치를 방문하세요.
-
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.comtctl status클러스터 teleport.example.com
버전 16.2.0
CA 핀 sha256:abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678
클러스터에 연결하고
tctl status
명령어를 실행할 수 있다면, 현재 자격 증명을 사용하여 작업대에서 후속tctl
명령어를 실행할 수 있습니다.자신의 Teleport 클러스터를 호스팅하는 경우, Teleport 인증 서비스를 호스팅하는 컴퓨터에서 전체 권한으로
tctl
명령어를 실행할 수도 있습니다.
1단계/4. Terraform을 위한 Teleport 자격 증명 생성
Terraform은 클러스터의 리소스를 관리하기 위해 Teleport 클러스터 인증 기관에서 서명된 신원 파일이 필요합니다. 로컬 Teleport 봇을 사용하여 자격 증명을 준비하려면:
-
임시 파일을 보관하기 위해
teleport-terraform
이라는 폴더를 만듭니다:mkdir -p teleport-terraformcd teleport-terraform -
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
이라는 이름의 역할을 구성합니다. -
다음 명령을 실행하여
terraform
역할을 생성합니다:tctl create terraform_role.yamlrole 'terraform' has been created -
로컬 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
라는 폴더에 상태 데이터를 관리합니다. -
create_and_run_terraform_bot.sh
를 편집하여tele.example.com:443
을 클러스터의 Teleport 프록시 서비스의 도메인 이름과 포트로 교체합니다. -
remove_terraform_bot.sh
라는 다른 파일을 만들고 편집기로 열어 다음 내용을 붙여넣습니다:#! /usr/bin/env bash tctl bots rm terraform-test rm -rfv ./terraform-identity rm -rfv ./tbot-data
이 스크립트는 나중에 실행 간에 봇을 정리하고 작업을 마쳤을 때 사용할 것입니다.
-
새 터미널 창에서
create_and_run_terraform_bot.sh
스크립트를 실행하여 새 봇을 생성하고 시작합니다:chmod +x create_and_run_terraform_bot.sh./create_and_run_terraform_bot.sh
2단계/4. Terraform 구성 파일 준비
Terraform 구성 파일을 준비하려면:
-
provider.tf
라는 새 파일을 만들고 편집기로 엽니다. -
Teleport Terraform 공급자를 사용하고 클러스터에 연결하기 위해 다음 내용을
provider.tf
파일에 붙여넣습니다:(!examples/resources/terraform/provider-cloud.tf!)
(!examples/resources/terraform/provider-self-hosted.tf!)
3단계/4. 구성 검증
구성을 적용하려면:
-
teleport-terraform
폴더의 내용을 확인합니다:lsprovider.tf terraform-identity/ create_and_run_terraform_bot.sh remove_terraform_bot.sh terraform_role.yaml
-
Terraform 구성 파일이 포함된 작업 디렉토리를 초기화하려면 다음 명령을 실행합니다:
terraform init -
다음 명령을 실행하여 구성 파일에 정의된 Terraform 계획을 실행합니다:
terraform apply -
작업이 끝나면 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
블록 추가
-
작업소에서 루트 Teleport Terraform 모듈로 이동합니다.
-
Terraform 가져오기를 구성하기 위해 텍스트 편집기에서 파일을 엽니다. 구성 관리를 깔끔하게 하기 위해
imports.tf
라는 새 파일을 엽니다. -
imports.tf
에import
블록을 추가합니다.to
필드를 사용하여 Terraform에서 구성 생성을 원하는 리소스의 이름을 나타냅니다. 다음 예제는myrole
이라는 Teleport 역할을 가져옵니다:import { to = teleport_role.myrole }
리소스 ID 가져오기
-
리소스의 ID를 가져옵니다. 사용할 방법은 리소스 유형에 따라 다릅니다. 다음 규칙을 사용하여 수행합니다:
teleport_provision_token
리소스의 경우, ID는 리소스의metadata.id
입니다.리소스가 단일 인스턴스만 가질 수 있는 경우, 리소스 유형의 이름에서
teleport
접두사를 제거한 것을 사용합니다. 예를 들어:리소스 ID teleport_cluster_maintenance_config
cluster_maintenance_config
teleport_cluster_networking_config
cluster_networking_config
모든 기타 리소스의 경우, ID는 항상 리소스의
metadata.name
입니다.예를 들어,
teleport_role
리소스는 역할의metadata.name
필드를 ID로 사용합니다. 가능한 모든 역할 ID를 찾으려면 다음 명령을 실행합니다:tctl get roles --format json | jq '.[].metadata.name' -
import
블록에서id
필드에 앞서 가져온 리소스 ID를 할당합니다. 예를 들어,metadata.name
이myrole
인 Teleport 역할을 가져오려면 다음을 추가합니다:import { to = teleport_role.myrole + id = "myrole" }
구성 파일 생성하기
-
리소스 구성 생성
terraform plan -generate-config-out=imported-resources.tf -
결과 파일
imported-resources.tf
를 검토합니다. 새로운resource
블록이 올바르게 보이면, 해당 파일을 소스 제어에 체크인할 수 있습니다.
다음 단계
- Terraform 공급자를 사용하여 Teleport 사용자를 생성하고 그들에게 역할을 부여하려면 사용자 및 역할 IaC 가이드를 따르세요.
- 지원되는 전체 목록의 Terraform 공급자 리소스를 탐색하세요.
- 생산에서 Terraform과 함께 Machine ID를 사용하는 방법을 확인하세요.