Teleport Terraform 프로바이더 참조
Teleport v18.9Teleport Terraform 프로바이더를 사용하면 Terraform 사용자가 Terraform에서 Teleport를 구성할 수 있습니다. 이 섹션은 Teleport Terraform 프로바이더 참조 문서입니다. Terraform 프로바이더를 시작하려면 먼저 설치 가이드부터 진행해야 합니다.
Teleport Terraform 프로바이더를 사용하면 Terraform 사용자가 Terraform에서 Teleport를 구성할 수 있습니다.
이 섹션은 Teleport Terraform 프로바이더 참조 문서입니다. 지원되는 모든 리소스와 해당 필드를 나열합니다.
Terraform 프로바이더를 시작하려면 먼저 설치 가이드부터 진행해야 합니다. 동작하는 프로바이더를 확보한 후에는 "IaC로 사용자와 역할 관리하기" 가이드를 따르는 것을 권장합니다.
이 프로바이더는 Teleport 리소스를 Terraform 데이터 소스와 Terraform 리소스 양쪽으로 노출합니다. 데이터 소스는 Terraform이 Teleport로부터 정보를 가져오는 데 사용되며, 리소스는 Teleport에 리소스를 생성하는 데 사용됩니다.
사용 예시#
terraform {
required_providers {
teleport = {
source = "terraform.releases.teleport.dev/gravitational/teleport"
version = "~> (=teleport.major_version=).0"
}
}
}
provider "teleport" {
# Update addr to point to Teleport Auth/Proxy
# addr = "auth.example.com:3025"
addr = "proxy.example.com:443"
identity_file_path = "terraform-identity/identity"
}
terraform {
required_providers {
teleport = {
source = "terraform.releases.teleport.dev/gravitational/teleport"
version = "~> (=cloud.major_version=).0"
}
}
}
provider "teleport" {
# Update addr to point to your Teleport Enterprise (managed) tenant URL's host:port
addr = "mytenant.teleport.sh:443"
identity_file_path = "terraform-identity/identity"
}
연결 방법#
이 섹션에서는 Terraform 프로바이더에 자격 증명을 전달하는 다양한 방법을 설명합니다. 어떤 방법이 사용 사례에 적합한지는 Teleport Terraform 프로바이더 설정 페이지에서 확인할 수 있습니다.
아이덴티티 파일 사용#
이 연결 방법에서는 아이덴티티 파일을 제공해야 합니다. 이 파일을 사용하면 Terraform이 프록시 서비스(포트 443 또는 3080)와 Auth 서비스(포트 3025) 양쪽 모두를 통해 연결할 수 있습니다. 이는 Terraform 프로바이더에 자격 증명을 전달하는 데 권장되는 방법입니다.
아이덴티티 파일은 다음과 같은 여러 방법으로 얻을 수 있습니다.
tctl로 로컬에서 아이덴티티 파일 얻기#
16.2 버전부터는 tctl과 로컬 자격 증명을 사용하여 임시 봇을 생성하고 그 아이덴티티를
셸의 환경 변수에 로드할 수 있습니다.
$ 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
자세한 내용은 "Terraform 프로바이더를 로컬에서 실행하기" 가이드에서 확인할 수 있습니다.
tbot으로 아이덴티티 파일 얻기#
tbot은 Machine & Workload Identity를 사용하여
단기 자격 증명을 얻고 자동으로 갱신합니다. 이러한 자격 증명은 유출되기 어려우며, 어떤 역할에 누가 접근할 수 있는지 더
정밀하게 제어할 수 있습니다(예: prod 환경을 대상으로 하는 GitHub Actions 파이프라인만 인증서를 얻도록 허용할 수 있습니다).
Terraform 프로바이더
가이드를 따라 tbot을 설정하고
Terraform이 그 아이덴티티를 사용하도록 할 수 있습니다.
tctl auth sign으로 아이덴티티 파일 얻기#
다음 명령으로 아이덴티티 파일을 얻을 수 있습니다.
$ tctl auth sign --user terraform --format file -o identity.pem
이 인증 방법에는 다음과 같은 제약이 있습니다.
- 이러한 자격 증명은 높은 권한을 가지며 장기간 유효합니다. 보호하고 주기적으로 교체해야 합니다.
- 이 인증 방법은 MFA가
webauthn으로 설정된 Teleport 클러스터에서는 작동하지 않습니다. 이러한 클러스터에서 Teleport는 장기 인증서를 거부하며 관리 작업에 대한 추가 MFA 챌린지를 요구합니다.
토큰 사용(네이티브 Machine & Workload Identity)#
16.2 버전부터 Teleport Terraform 프로바이더는 (tbot 없이) Machine & Workload Identity를 네이티브로 사용하여 Teleport
클러스터에 조인할 수 있습니다. Terraform 프로바이더는 자신의 런타임(AWS, GCP, Kubernetes, CI/CD 시스템)을 활용하여
Teleport에 자신의 아이덴티티를 증명합니다.
프로바이더 구성에서 join_method와 join_token을 모두 설정하여 위임 조인
방법을 사용할 수 있습니다.
이 설정에 대한 자세한 내용은 "CI 또는 클라우드에서 Teleport Terraform 프로바이더 실행하기" 가이드에서 설명합니다.
키, 인증서, CA 인증서 사용#
이 연결 방법에서는 TLS 키, TLS 인증서, Teleport Auth 서비스 TLS CA 인증서를 제공해야 합니다. 이는 다음 명령으로 얻을 수 있습니다.
$ tctl auth sign --user terraform --format=tls -o terraform.pem
이 인증 방법에는 다음과 같은 제약이 있습니다.
- 프로바이더는 Auth에 직접(포트 3025)만 연결할 수 있습니다. 대부분의 클러스터에서는 프록시만 공개적으로 노출되어 있습니다.
- 이러한 자격 증명은 높은 권한을 가지며 장기간 유효합니다. 보호하고 주기적으로 교체해야 합니다.
- 이 인증 방법은 MFA가
webauthn으로 설정된 Teleport 클러스터에서는 작동하지 않습니다. 이러한 클러스터에서 Teleport는 장기 인증서를 거부하며 관리 작업에 대한 추가 MFA 챌린지를 요구합니다.
스키마#
선택 항목#
addr(String) Teleport 주소의 host:port입니다. Teleport 프록시 서비스 주소(포트 443 또는 3080) 또는 Teleport Auth 서비스 주소(포트 3025)일 수 있습니다. 환경 변수TF_TELEPORT_ADDR로도 설정할 수 있습니다.audience_tag(String)terraform방법으로 네이티브 Machine ID 조인을 수행할 때 사용되는 선택적 audience 태그의 이름입니다. 환경 변수TF_TELEPORT_JOIN_AUDIENCE_TAG로도 설정할 수 있습니다.cert_base64(String) Base64로 인코딩된 TLS 인증(auth) 인증서입니다. 환경 변수TF_TELEPORT_CERT_BASE64로도 설정할 수 있습니다.cert_path(String) Teleport 인증(auth) 인증서 파일의 경로입니다. 환경 변수TF_TELEPORT_CERT로도 설정할 수 있습니다.dial_timeout_duration(String) 서버에 연결을 시도할 때의 타임아웃을 설정하는 DialTimeout입니다. 환경 변수TF_TELEPORT_DIAL_TIMEOUT_DURATION으로도 설정할 수 있습니다.gitlab_id_token_env_var(String)gitlab조인 방법에 대해 GitLab이 발급한 ID 토큰을 가져오는 데 사용되는 환경 변수입니다. 설정하지 않으면 기본값은TBOT_GITLAB_JWT입니다. 환경 변수TF_TELEPORT_GITLAB_ID_TOKEN_ENV_VAR로도 설정할 수 있습니다.identity_file(String, Sensitive) Teleport 아이덴티티 파일 내용입니다. 환경 변수TF_TELEPORT_IDENTITY_FILE로도 설정할 수 있습니다.identity_file_base64(String, Sensitive) Base64로 인코딩된 Teleport 아이덴티티 파일 내용입니다. 환경 변수TF_TELEPORT_IDENTITY_FILE_BASE64로도 설정할 수 있습니다.identity_file_path(String) Teleport 아이덴티티 파일 경로입니다. 환경 변수TF_TELEPORT_IDENTITY_FILE_PATH로도 설정할 수 있습니다.insecure(Boolean) Teleport 클러스터에 조인할 때 프록시 인증서 검증을 건너뜁니다. 프로덕션 사용에는 권장되지 않습니다. 환경 변수TF_TELEPORT_INSECURE로도 설정할 수 있습니다.join_method(String) 네이티브 Terraform MachineID 지원을 활성화합니다. 설정하면 Terraform은 MachineID를 사용하여 Teleport 클러스터에 안전하게 조인하고 자격 증명을 얻습니다. 가능한 값은 조인 방법 참조를 확인하세요. 위임 조인 방법을 사용해야 합니다. 환경 변수TF_TELEPORT_JOIN_METHOD로도 설정할 수 있습니다.join_token(String) 네이티브 MachineID 조인에 사용되는 토큰의 이름입니다. 이 값은 위임 조인 방법에서는 민감하지 않습니다. 환경 변수TF_TELEPORT_JOIN_TOKEN으로도 설정할 수 있습니다.key_base64(String, Sensitive) Base64로 인코딩된 TLS 인증(auth) 키입니다. 환경 변수TF_TELEPORT_KEY_BASE64로도 설정할 수 있습니다.key_path(String) Teleport 인증(auth) 키 파일의 경로입니다. 환경 변수TF_TELEPORT_KEY로도 설정할 수 있습니다.profile_dir(String) Teleport 프로필 경로입니다. 환경 변수TF_TELEPORT_PROFILE_PATH로도 설정할 수 있습니다.profile_name(String) Teleport 프로필 이름입니다. 환경 변수TF_TELEPORT_PROFILE_NAME으로도 설정할 수 있습니다.retry_base_duration(String) API가 'not found'를 반환할 때의 재시도 알고리즘: 재시도 간 기본 지속 시간입니다 (https://pkg.go.dev/time#ParseDuration). 환경 변수TF_TELEPORT_RETRY_BASE_DURATION으로도 설정할 수 있습니다.retry_cap_duration(String) API가 'not found'를 반환할 때의 재시도 알고리즘: 재시도 간 최대 지속 시간입니다 (https://pkg.go.dev/time#ParseDuration). 환경 변수TF_TELEPORT_RETRY_CAP_DURATION으로도 설정할 수 있습니다.retry_max_tries(String) API가 'not found'를 반환할 때의 재시도 알고리즘: 최대 재시도 횟수입니다. 환경 변수TF_TELEPORT_RETRY_MAX_TRIES로도 설정할 수 있습니다.root_ca_base64(String) Base64로 인코딩된 Root CA입니다. 환경 변수TF_TELEPORT_CA_BASE64로도 설정할 수 있습니다.root_ca_path(String) Teleport Root CA의 경로입니다. 환경 변수TF_TELEPORT_ROOT_CA로도 설정할 수 있습니다.