Infograb logo
서버에서 Teleport Terraform 공급자 실행

이 가이드는 지속적인 Linux 또는 macOS 서버에서 Teleport용 Terraform 공급자를 설정하는 방법을 보여줍니다.

이 가이드는 Terraform 공급자를 로컬에서 실행하거나 CI/CD 및 단기 클라우드 VM과 같은 임시 환경에서 실행하는 방법을 다루지 않습니다. 이러한 경우에는 전용 가이드를 따라 주시기 바랍니다:

이 가이드는 서버에서 MachineID를 설정합니다. MachineID는 사용자가 아닌 머신과 서비스에 대한 신원을 제공하기 위한 Teleport의 기능입니다.

작동 방식

이 설정은 MachineID 데몬(tbot )이 Teleport 클러스터에 조인하고 Terraform 공급자를 위한 자격 증명을 얻고 갱신하는 데 의존합니다. 이 데몬은 디스크에 신원을 저장하고 일반적으로 30분마다 Terraform 자격 증명을 갱신합니다.

전제 조건

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

  • Teleport Terraform 공급자를 실행할 Linux 호스트.

  • Terraform과 tbot 이 실행될 호스트의 Linux 사용자. 이 가이드에서는 teleport를 사용합니다.

1/4단계. 서버에 tbot 설치

tbot 을 설치하고 Teleport 클러스터에 조인해야 합니다. 그렇게 하려면 Linux용 tbot 배포 가이드를 따라 3단계까지 진행하십시오.

2/4단계. RBAC 구성

이 시점에서 Terraform을 실행할 머신에 tbot 이 설치되고 구성되었습니다.

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 을 사용하세요.

tctl bots update 명령을 사용하여 역할을 봇에 추가하십시오. example 을 배포 가이드에서 생성한 봇의 이름으로 교체하십시오.

tctl bots update example --add-roles terraform-provider

3/4단계. tbot 출력 구성

이제 tbot 은 Terraform 공급자에 필요한 자격 증명을 생성할 출력을 구성해야 합니다. Terraform 공급자가 Teleport API에 접근하므로, 사용할 올바른 출력 유형은 identity 입니다.

이 가이드에서는 directory 대상을 사용합니다. 이는 이러한 자격 증명을 디스크의 지정된 디렉토리에 기록합니다. 이 디렉토리는 tbot 이 실행되는 Linux 사용자가 쓸 수 있어야 하며, Terraform이 실행되는 Linux 사용자가 읽을 수 있어야 합니다.

tbot 구성을 수정하여 identity 출력을 추가하십시오:

outputs:
  - type: identity
    destination:
      type: directory
      # 이 가이드에서는 /opt/machine-id가 대상 디렉토리로 사용됩니다.
      # 이를 맞춤 설정할 수 있습니다. 여러 출력이 동일한 대상을 공유할 수 없습니다.
      path: /opt/machine-id

tbot 을 백그라운드 서비스로 운영하는 경우, 이를 재시작하십시오. 한 번만 실행되는 모드에서 tbot 을 실행하는 경우(자격 증명을 생성하고 프로세스를 종료함), 나중에 Terraform 계획을 실행하기 전에 이를 실행해야 합니다.

이제 /opt/machine-id 아래에 identity 파일이 있어야 합니다. 이는 Terraform 공급자가 Teleport Auth 서버와 인증하는 데 필요한 개인 키와 서명된 인증서를 포함하고 있습니다.

4/4단계. Terraform 실행

새로운 Terraform 작업 디렉토리를 생성하는 것으로 시작하십시오:

mkdir ./my-terraform && cd ./my-terraform
terraform init

Machine ID에 의해 출력된 자격 증명을 사용하도록 Teleport Terraform 공급자를 구성하기 위해 identity_file_path 옵션을 사용합니다.

이 디렉토리에서 main.tf 를 생성합니다:

terraform {
  required_providers {
    teleport = {
      version = "17.0.0-dev"
      source  = "terraform.releases.teleport.dev/gravitational/teleport"
    }
  }
}

provider "teleport" {
  # Teleport Proxy 또는 Auth Server의 주소로 교체하십시오.
  addr               = "teleport.example.com:443"
  # 이전 단계에서 identity 출력에 구성된 디렉토리로 교체하십시오.
  identity_file_path = "/opt/machine-id/identity"
}

# 테스트 역할을 생성해야 합니다. 자원을 선언하지 않으면 Terraform은 Teleport에 연결하지 않으므로 설정을 검증할 수 없습니다.
resource "teleport_role" "terraform-test" {
  version = "v7"
  metadata = {
    name        = "terraform-test"
    description = "Terraform에 의해 생성된 예시 역할"
  }

  spec = {
    # 이 역할은 예시 역할로 아무 작업도 수행하지 않습니다.
    allow = {}
  }
}

teleport.example.com:443 을 Teleport Proxy 또는 Auth Server의 주소로 교체하십시오. /opt/machine-id 에서 목적지 디렉토리를 변경한 경우, 이것도 교체해야 합니다.

이제 Terraform을 실행하여 구성을 테스트합니다:

terraform init
terraform plan
terraform apply

Teleport 클러스터를 확인하고 역할이 생성되었는지 확인하십시오:

tctl get role/terraform-test

다음 단계

Teleport 원문 보기