로컬에서 Teleport Terraform 프로바이더 실행하기
이 가이드는 이미 Teleport에 로그인되어 있는 로컬 컴퓨터에서 Teleport Terraform 프로바이더를 실행하는 방법을 설명합니다. 이 가이드는 클라우드 VM, 온프레미스 서버, CI/CD 파이프라인과 같은 원격 환경에서 Teleport를 실행하는 방법은 다루지 않습니다.
이 가이드는 이미 Teleport에 로그인되어 있는 로컬 컴퓨터에서 Teleport Terraform 프로바이더를 실행하는 방법을 설명합니다.
이 가이드는 클라우드 VM, 온프레미스 서버, CI/CD 파이프라인과 같은 원격 환경에서 Teleport를 실행하는 방법은 다루지 않습니다. 해당 경우에는 전용 가이드를 참조하세요:
동작 방식#
이 설정은 사용자의 로컬 자격 증명(tsh login에서 가져온)을 사용하여 Teleport에 임시 봇을 생성하고, 봇으로 연결하여 단기간 자격 증명을 획득하며, 해당 자격 증명을 셸의 환경 변수에 내보냅니다. 이 동일한 터미널에서 실행되는 모든 Terraform 명령은 환경 변수에서 자격 증명을 읽고 임시 봇으로 Teleport에 연결할 수 있습니다.
사전 요구 사항#
- 실행 중인 Teleport 클러스터
- 로컬 tsh/tctl 클라이언트
- Bot 및 Token 리소스 생성을 허용하는 역할로 Teleport에 로컬 로그인되어 있어야 합니다.
이를 위해 기본
editor역할을 사용할 수 있습니다.
Teleport 클러스터에 연결할 수 있는지 확인하려면 tsh login으로 로그인한 후 현재 자격 증명으로 tctl 명령을 실행할 수 있는지 확인하세요.
예를 들어:
$ tsh login --proxy=teleport.example.com --user=email@example.com
$ tctl status
# Cluster (=teleport.url=)
# Version (=teleport.version=)
# CA pin (=presets.ca_pin=)
다음을 실행하여 버전 요구 사항(16.2 이상)을 충족하는지 확인하세요:
$ tsh status
Teleport v(=teleport.version=) go(=teleport.golang=)
Proxy version: (=teleport.version=)
Proxy:
1/2단계. 임시 봇 자격 증명 생성하기#
이 단계에서는 tctl과 로컬 자격 증명을 사용하여 Terraform 프로바이더용 임시 봇을 Teleport에 생성합니다. 봇은 1시간 동안 존재하며 TF 프로바이더가 지원하는 모든 리소스를 편집할 수 있는 기본 terraform-provider 역할이 부여됩니다.
그런 다음 tctl은 임시 봇에 대한 자격 증명을 획득하여 셸의 환경 변수에 내보냅니다.
클러스터에서 관리 작업용 MFA가 활성화되어 있으면 tctl이 MFA를 묻습니다.
다음 명령을 실행합니다. 셸에서 자격 증명을 로드하는 데 필요하므로 eval을 제거하지 마세요:
$ eval "$(tctl terraform env)"
🔑 Detecting if MFA is required
This is an admin-level action and requires MFA to complete
Tap any security key
Detected security key tap
⚙️ Creating temporary bot "tctl-terraform-env-82ab1a2e" and its token
🤖 Using the temporary bot to obtain certificates
🚀 Certificates obtained, you can now use Terraform in this terminal for 1h0m0s
2/2단계. Terraform 프로바이더 실행하기#
이 시점에서 1시간 동안 셸의 환경 변수에 유효한 자격 증명이 있습니다. 이 셸에서 Teleport Terraform 프로바이더를 실행할 수 있습니다.
eval "$(tctl terraform env)"를 실행한 셸만 봇 자격 증명을 가지고 있습니다.
이 셸을 닫거나 새 셸을 열면 첫 번째 단계를 다시 수행해야 합니다.
-
이 최소한의 Terraform 코드가 포함된
main.tf파일을 생성합니다:terraform { required_providers { teleport = { source = "terraform.releases.teleport.dev/gravitational/teleport" version = "~> (=teleport.major_version=).0" } } } provider "teleport" { addr = "" } # 테스트 역할을 생성해야 합니다. 리소스를 선언하지 않으면 Terraform이 # Teleport에 연결을 시도하지 않아 설정을 검증할 수 없습니다. resource "teleport_role" "test" { version = "v7" metadata = { name = "test" description = "Dummy role to validate Terraform Provider setup" labels = { test = "yes" } } spec = {} } -
그런 다음 Terraform 작업 디렉터리를 초기화하여 Teleport 프로바이더를 다운로드합니다:
$ terraform init Initializing the backend... Initializing provider plugins... - Finding terraform.releases.teleport.dev/gravitational/teleport versions matching ... -
마지막으로 Terraform 플랜을 실행합니다:
$ terraform plan Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols: + create Terraform will perform the following actions: # teleport_role.test will be created + resource "teleport_role" "test" { + id = (known after apply) + kind = (known after apply) + metadata = { + name = "test" + namespace = (known after apply) } + spec = {} + version = "v7" } Plan: 1 to add, 0 to change, 0 to destroy.
플랜이 성공하면 Terraform 프로바이더가 Teleport에 성공적으로 연결된 것입니다. 이제 Teleport Terraform 프로바이더로 로컬 개발을 시작할 수 있습니다.
eval $(tctl terraform env)를 다시 실행하여 매 시간마다 새 임시 자격 증명을 획득하는 것을 잊지 마세요.
다음 단계#
- 사용자 및 역할 IaC 가이드를 따라 Terraform 프로바이더를 사용하여 Teleport 사용자를 생성하고 역할을 부여하세요.
- Terraform 참조에서 Terraform이 지원하는 리소스 목록을 확인하세요.
- Teleport 클러스터를 구성하는 Terraform 코드가 완성되면, 로컬에서 실행하는 대신 CI 또는 배스천에서 실행하고 싶을 수 있습니다. 이를 위해 전용 가이드를 따르세요:
