Infograb logo
가입 방법 및 토큰

이 가이드는 Teleport 조인 프로세스의 핵심 개념을 설명하고, 모든 지원되는 조인 방법을 참조하며, 보안 속성에 따라 분류합니다. 이 가이드는 각 조인 방법으로 인스턴스를 조인하는 방법을 단계별로 설명하지 않지만 가능한 경우 관련 How-To 가이드로 링크합니다.

사전 요구 사항

이 페이지를 읽기 전에 Teleport Core 개념에 익숙해야 합니다.

정의

가입

Teleport 클러스터에 가입하는 것은 새로운 Teleport 인스턴스와 이미 Teleport 클러스터의 일부인 모든 기존 인스턴스 간의 신뢰를 구축하는 행위입니다. 가입 프로세스가 끝나면, Auth 서비스는 가입하는 인스턴스를 위해 인증서를 서명합니다. 해당 인증서는 설정된 신뢰를 나타냅니다. 이를 통해 새로 가입한 인스턴스는 다른 Teleport 인스턴스와 상호 작용할 수 있습니다.

인스턴스가 인증서를 요청하려면 Auth 서비스에 자신의 신원을 증명해야 합니다. Teleport는 가입하는 인스턴스가 자신을 증명할 수 있는 여러 가지 방법을 제공합니다. 이를 조인 방법이라고 합니다.

가입 프로세스는 Teleport 서비스가 유효한 인증서가 없을 때만 발생합니다. 토큰이 인증서로 교환되면, 이후 연결 시도에서는 해당 인증서를 사용합니다. 대부분의 경우, 이는 첫 시작 시 발생합니다.

조인 방법

조인 방법은 Auth 서비스가 Teleport 클러스터에 가입을 요청하는 인스턴스가 합법적인지를 검증하는 방법입니다. 일부 조인 방법은 보편적이며, 다른 방법은 가입하는 인스턴스의 맥락에 따라 다릅니다. 예를 들어, 클라우드 제공업체 조인 방법(예: iam , gcp 또는 azure ) 또는 CI 제공업체(예: github , gitlab , circleci )는 더 유연하고 더 나은 보안 보장을 제공하지만, 가입하는 인스턴스가 특정 클라우드 제공업체에서 실행되어야 합니다.

다양한 조인 방법은 서로 다른 보안 보장을 제공할 수 있습니다. 예를 들어, 일부 조인 방법은 가입하는 인스턴스가 갱신 가능한 인증서를 요청할 수 있도록 허용하는 반면, 다른 방법은 인증서를 갱신하기 위해 인스턴스가 다시 조인해야 합니다.

조인 방법 및 그 매개변수는 토큰 리소스에서 지정됩니다.

토큰

토큰은 특정 맥락에서 어떤 조인 방법을 사용할 수 있는지 지정하는 Teleport 리소스입니다. 예를 들어, 토큰은 SSH 서비스가 AWS 계정 333333333333 에 있으며 teleport-instance-role 역할을 맡을 수 있는 경우 iam 조인 방법으로 가입할 수 있도록 허용합니다:

kind: token
version: v2
metadata:
  name: my-iam-token
spec:
  roles: [Node]
  join_method: iam
  allow:
    - aws_account: "333333333333"
      aws_arn: "arn:aws:sts::333333333333:assumed-role/teleport-instance-role/i-*"
Important

토큰 이름은 조인 방법에 따라 민감할 수도 있고 그렇지 않을 수도 있습니다. 비밀 기반 조인 방법은 토큰 이름이 비밀로 유지되어야 합니다. 이러한 경우 토큰 이름은 보호되어야 하며, 토큰 이름을 아는 것만으로도 인스턴스가 클러스터에 조인할 수 있습니다.

조인 방법 분류

비밀 기반 vs 위임된

비밀 기반 조인 방법

비밀 기반 조인 방법은 보편적입니다: Teleport 서비스는 실행되는 플랫폼/클라우드 제공업체에 관계없이 비밀 기반 조인 방법을 사용할 수 있습니다. 가입 인스턴스는 비밀을 전송하고 Auth 서비스는 그것이 알고 있는 것과 일치하는지 확인합니다. 이러한 가입 방법은 본질적으로 비밀 유출에 취약하며, 가능한 경우 위임된 조인 방법을 선호해야 합니다. 비밀 기반 조인 방법을 사용해야 하는 경우, 토큰이 유출되는 위험을 줄이기 위해 짧은 수명의 토큰(예: 1시간만 유효)을 사용하는 것이 좋습니다.

비밀 기반 조인 방법은 다음과 같습니다:

Warning

Teleport는 하위 호환성 유지를 위해 정적 토큰을 지원하지만, 사용을 피해야 합니다.

위임된 조인 방법

위임된 조인 방법은 조인 인스턴스와 제3자의 컨텍스트에 의존하여 신뢰를 구축합니다. 제3자는 클라우드 제공자, CI 플랫폼 또는 컨테이너 실행 환경일 수 있습니다. 이러한 방법은 모든 인스턴스에 사용할 수는 없지만(예: Raspberry Pi에서 SSH 에이전트를 조인하는 것은 불가능) 가능한 경우 선호되어야 합니다.

위임된 조인 방법은 더 세분화된 옵션을 제공할 수도 있습니다. 예를 들어, 클라우드 제공자 기반의 조인 방법은 인스턴스가 가용 영역, 서비스 계정 또는 클라우드 계정 ID에 따라 조인하도록 허용할 수 있습니다.

위임된 조인 방법은 다음과 같습니다:

갱신 가능 vs 갱신 불가능

사용하는 조인 방법에 따라 Auth 서비스는 갱신 가능하거나 갱신 불가능한 인증서를 발급할 수 있습니다.

인증서가 만료될 때 즈음에 갱신 가능한 인증서를 가진 인스턴스는 토큰을 다시 사용할 필요 없이 새 인증서를 요청할 수 있습니다. 일반적으로 비밀 기반 조인 방법은 비밀 토큰이 민감하고 일반적으로 단기간에 사용되기 때문에 갱신 가능한 인증서를 제공합니다. 단일 조인으로 인스턴스는 클러스터의 일부로 무한정 남아 있을 수 있습니다.

갱신 가능한 조인 방법은 다음과 같습니다:

갱신 불가능한 인증서를 가진 노드는 만료 전에 새 인증서를 받기 위해 다시 조인해야 합니다. 인스턴스는 다시 합법적임을 증명해야 합니다. 갱신 불가능한 조인 방법은 인스턴스 인증서를 훔친 공격자가 Teleport 클러스터에 대한 액세스를 유지할 수 없도록 보장합니다. 이러한 조인 방법은 더 안전하고 CI/CD 파이프라인이나 컨테이너화된 환경과 같은 임시 작업 부하에 더 적합하다고 볼 수 있습니다.

갱신 불가능한 조인 방법은 다음과 같습니다:

토큰 리소스 참조

토큰 리소스는 모든 조인 방법에 대해 다음과 같은 공통 필드를 가집니다:

# token.yaml
kind: token
version: v2
metadata:
  name: my-token-name
spec:
  # 시스템 역할은 조인하는 Teleport 인스턴스가 실행할 수 있는 서비스에 대해 설명합니다.
  # 이러한 역할은 인스턴스 인증서에 기록됩니다. 이를 변경하려면
  # (예: SSH 노드에 응용 프로그램 액세스를 추가하려면) 다음을 수행해야 합니다:
  # - 역할을 업데이트하기 위한 토큰 수정 (예: "App" 추가)
  # - Teleport 인스턴스 등록 해제
  # - 새 서비스 사용을 위해 구성 수정 (여기서는 "app_service.enabled")
  # - 인스턴스를 다시 조인하게 하기
  #
  # 필요한 최소 시스템 역할 세트를 사용해야 합니다.
  # 일반적인 역할은 다음과 같습니다:
  # - SSH 서비스의 경우 "Node"
  # - 프록시 서비스의 경우 "Proxy"
  # - Kubernetes 서비스의 경우 "Kube"
  # - 응용 프로그램 서비스의 경우 "App"
  # - 데이터베이스 서비스의 경우 "Db"
  # - Windows Desktop 서비스의 경우 "WindowsDesktop"
  # - 검색 서비스의 경우 "Discovery"
  # - MachineID의 경우 "Bot" (설정된 경우, "spec.bot_name"도 토큰에 설정해야 함)
  roles:
    - Node
    - App
  join_method: gcp
  # 토큰이 MachineID에 사용될 때만 봇 이름을 설정합니다.
  # 설정된 경우, 토큰은 "Bot" 역할도 가져야 합니다.
  bot_name: my-bot
  # SuggestedLabels는 이 토큰을 사용하여 클러스터에 등록할 때 리소스가 설정해야 하는 레이블 집합입니다.
  # 현재, 노드 조인 스크립트만 제안에 따라 구성을 생성합니다.
  suggested_labels:
    teams: ["sales-eng", "eng", "qa"]
    application: ["demo-product"]
  # SuggestedAgentMatcherLabels는 검색 에이전트가 리소스에 일치시키는 데 사용할 레이블 집합입니다.
  # 에이전트가 이 토큰을 사용할 때, 에이전트는 해당 레이블과 일치하는 리소스를 모니터링해야 합니다.
  # 데이터베이스의 경우, 이 레이블을 `db_service.resources.labels` 에 추가하는 것입니다.
  # 현재, 노드 조인 스크립트만 제안에 따라 구성을 생성합니다.
  suggested_agent_matcher_labels:
    teams: ["sales-eng"]

조인 방법

정적 토큰

Danger

이 조인 방법은 장기적으로 존재하는 토큰이 도난되어 재사용될 수 있으므로 본질적으로 덜 안전합니다. 이 방법에 의존하는 것은 Teleport 사용의 보안 이점을 상당히 줄입니다. 사용은 강하게 권장하지 않습니다. 대신 임시 토큰 을 사용해야 합니다.

정적 토큰은 Auth Service 구성(teleport.yaml )에서 정의된 토큰입니다. 토큰 이름은 비밀로 유지해야 하며, 이는 인스턴스를 Teleport 클러스터에 조인할 수 있게 합니다.

auth_service:
  enabled: yes
  # 클러스터에 새 인스턴스를 추가하기 위한 미리 정의된 토큰. 각 토큰은
  # 새 노드가 수용할 수 있는 역할을 지정합니다. 인스턴스를 추가하는 보다 안전한 방법은
  # `tctl nodes add --ttl` 명령을 사용하여 자동 만료되는
  # 토큰을 생성하는 것입니다.
  #
  # 충분히 무작위의 32바이트 이상의 길이의 토큰을 생성하기 위해 `pwgen` 과 같은 도구를 사용하는 것이 좋습니다.
  tokens:
    - "proxy,node:xxxxx"
    - "auth:yyyy"
    - "discovery,app,db:zzzzz"

임시 토큰

임시 토큰은 CLI 또는 Teleport API를 통해 동적으로 생성된 비밀 토큰입니다. 시간 제한이 있으며, 일반적으로 Teleport 클러스터에 인스턴스를 조인하기 직전에 생성됩니다.

CLI에 의해 생성될 수 있습니다(지정되지 않은 경우 강력한 랜덤 값이 선택되며 기본 TTL은 30분입니다):

tctl tokens add --type discovery,app --ttl 15m

또는 Teleport 리소스로 생성될 수 있습니다:

kind: token
version: v2
metadata:
  expires: "2023-11-24T21:45:40.104524Z"
  name: abcd123-insecure-do-not-use-this
spec:
  join_method: token
  roles:
    - Discovery
    - App

MachineID 봇이 임시 조인 토큰을 사용하는 경우, 토큰은 삭제됩니다.

AWS IAM 역할: iam

IAM 조인 방법은 IAM 자격 증명에 접근할 수 있는 모든 Teleport 프로세스에서 사용 가능하며, 예를 들어 IAM 역할이 첨부된 EC2 인스턴스에서 실행될 수 있습니다. 특정 권한이나 IAM 정책은 필요하지 않으며, 정책이 첨부되지 않은 IAM 역할만으로 충분합니다. Teleport Auth Service에서 IAM 자격 증명이 필요하지 않습니다.

AWS에서 실행되는 워크로드에 조인하는 데 권장되는 방법입니다.

# token.yaml
kind: token
version: v2
metadata:
  # 이 토큰의 이름은 비밀이 아닙니다. 인스턴스는 이 토큰을 사용하기 위해 
  # 귀하의 AWS 계정에서 실행되고 있음을 증명해야 합니다.
  name: iam-token
spec:
  # 필요한 최소 역할 집합을 사용하세요. (예: Node, App, Kube, DB, WindowsDesktop)
  roles: [Node]
  
  # 이 토큰에 허용된 조인 방법을 설정하세요.
  join_method: iam
  
  allow:
    # Teleport 프로세스가 조인할 수 있는 AWS 계정을 지정하세요.
    - aws_account: "111111111111"
    # 여러 개의 allow 규칙이 지원됩니다.
    - aws_account: "222222222222"
    # aws_arn은 선택 사항이며, Teleport 프로세스의 IAM 역할을 
    # 제한하는 데 사용됩니다.
    - aws_account: "333333333333"
      aws_arn: "arn:aws:sts::333333333333:assumed-role/teleport-node-role/i-*"

AWS EC2 신원 문서: ec2

EC2 조인 방법은 EC2 인스턴스에서 실행되는 모든 Teleport 프로세스에서 사용할 수 있습니다. 하나의 EC2 인스턴스에서 하나의 Teleport 프로세스만 EC2 조인 방법을 사용할 수 있습니다.

Teleport Auth Service에서는 ec2:DescribeInstances 권한이 있는 IAM 자격 증명이 필요합니다. 클러스터에 조인하는 Teleport 프로세스에서는 IAM 자격 증명이 필요하지 않습니다.

EC2 조인 방법은 Teleport Enterprise Cloud 및 Teleport Team에서 사용할 수 없습니다. Teleport Enterprise Cloud 및 Team 고객은 IAM 조인 방법 또는 임시 비밀 토큰을 사용할 수 있습니다.

# token.yaml
kind: token
version: v2
metadata:
  # 토큰 이름은 비밀이 아니며, 인스턴스는 이 토큰을 사용하기 위해
  # 귀하의 AWS 계정에서 실행 중임을 증명해야 합니다.
  name: ec2-token
spec:
  # 필요한 최소 역할 집합을 사용하십시오 (예: Node, App, Kube, DB, WindowsDesktop)
  roles: [Node]

  # 이 토큰에 허용되는 조인 방법을 설정하십시오.
  join_method: ec2

  # aws_iid_ttl은 EC2 인스턴스가 시작된 후 클러스터에 조인할 수 있는
  # 시간의 양입니다. 도난된 EC2 인스턴스 ID 문서가 클러스터에 조인되는
  # 위험을 줄이기 위해 짧은 TTL을 사용하십시오.
  #
  # EC2 조인 방법을 사용하여 첫 번째 Teleport 프로세스를 시작할 때,
  # Teleport를 설정하고 구성할 수 있는 시간을 확보하기 위해
  # 일시적으로 더 높은 `aws_iid_ttl` 값을 구성해야 할 수 있습니다.
  # 이 기능은 Teleport가 EC2 AMI에 자동으로 시작되도록 구성된 경우에
  # 가장 잘 작동합니다.
  aws_iid_ttl: 5m

  allow:
  - aws_account: "111111111111" # 귀하의 AWS 계정 ID
    aws_regions: # 필요한 최소 AWS 리전 집합을 사용하십시오.
    - us-west-1
    - us-west-2

Azure 관리형 ID: azure

Azure 조인 방법은 Azure 가상 머신에서 실행 중인 모든 Teleport 프로세스에서 사용할 수 있습니다. 클러스터에 Proxy Service 뒤에 있는 레이어 7 로드 밸런서 또는 리버스 프록시를 통해 조인하는 것은 Teleport 13.0+에서 지원됩니다.

# token.yaml
kind: token
version: v2
metadata:
  # 이 토큰의 이름은 비밀이 아닙니다. 인스턴스는 이 토큰을 사용하기 위해
  # 귀하의 Azure 구독에서 실행 중임을 증명해야 합니다.
  name: azure-token
spec:
  # 요구되는 최소한의 역할만 사용하십시오.
  roles: [Node]
  join_method: azure
  azure:
    allow:
      # Teleport 프로세스가 조인할 수 있는 Azure 구독을 지정합니다.
      - subscription: 11111111-1111-1111-1111-111111111111
      # 여러 개의 허용 규칙을 지원합니다.
      - subscription: 22222222-2222-2222-2222-222222222222
      # resource_groups는 선택 사항이며 Teleport 프로세스의 
      # 조인하는 리소스 그룹을 제한할 수 있습니다.
      - subscription: 33333333-3333-3333-3333-333333333333
        resource_groups: ["group1", "group2"]

GCP 서비스 계정: gcp

GCP 조인 방법은 GCP VM에서 실행 중인 모든 Teleport 프로세스에서 사용할 수 있습니다. VM에는 서비스 계정 이 할당되어 있어야 합니다 (기본 서비스 계정 사용 가능). 클러스터에 조인하는 Teleport 프로세스에는 IAM 역할이 필요하지 않습니다.

# token.yaml
kind: token
version: v2
metadata:
  # 토큰 이름은 비밀이 아닙니다. 인스턴스는 이 토큰을 사용하기 위해
  # 귀하의 GCP 프로젝트에서 실행 중임을 증명해야 합니다.
  name: gcp-token
spec:
  # 필요한 최소한의 역할 집합을 사용하십시오 (예: Node, Proxy, App, Kube, DB, WindowsDesktop)
  roles: [Node]

  # 이 토큰에 허용되는 조인 방법 설정
  join_method: gcp

  gcp:
    allow:
      # VM이 조인할 수 있는 GCP 프로젝트 ID.
      - project_ids: ["example-project-id"]
        # (옵션) VM이 조인할 수 있는 위치. 지역과
        # 영역 모두 허용됩니다.
        locations: ["us-west1", "us-west2-a"]
        # (옵션) VM이 조인할 수 있는 서비스 계정의 이메일 주소.
        service_accounts: ["example@example.com"]

GitHub Actions: github

Teleport는 GitHub-hosted 및 self-hosted GitHub Actions 러너와 GitHub Enterprise Server에서 안전한 조인을 지원합니다. 이 조인 방법은 일반적으로 Machine ID 와 함께 사용되어 GitHub Actions 파이프라인에서 Teleport 보호 리소스에 접근합니다.

kind: token
version: v2
metadata:
  # name은 토큰을 식별합니다. 이 토큰을 사용하여 봇이나 노드를 조인하도록 구성할 때는
  # 해당 이름이 명시되어야 합니다.
  name: github-token
spec:
  # Machine ID 및 GitHub 조인의 경우, 역할은 항상 "Bot"이며
  # join_method는 항상 "github"가 됩니다.
  roles: [Bot]
  join_method: github

  # bot_name은 이 토큰이 사용될 때 접근을 허용할 봇의 이름을 명시합니다.
  bot_name: github-demo

  github:
    # enterprise_server_host는 GitHub Enterprise Server 인스턴스에서 GitHub Actions 워크플로우로부터
    # 조인할 수 있도록 합니다. 일반적인 상황에서는 github.com을 사용하는 경우 이 옵션은 생략해야 합니다.
    # GHES를 사용하는 경우, 이 값은 GHES 인스턴스의 호스트 이름으로 구성되어야 합니다.
    enterprise_server_host: ghes.example.com

    # enterprise_slug는 GitHub Enterprise 조직의 슬러그를 포함시켜
    # OIDC 토큰의 예상 발급자에 포함되도록 합니다. 이는 GHE의
    # include_enterprise_slug 옵션과의 호환성을 위한 것입니다.
    #
    # 이 기능이 활성화된 경우, 이 필드는 GitHub Enterprise 조직의 슬러그로 설정해야 합니다.
    # 이 기능이 비활성화된 경우, 이 필드는 비워 두어야 합니다.
    # `enterprise_server_host` 가 지정된 경우 이 필드는 지정될 수 없습니다.
    #
    # 사용자 정의 발급자 값에 대한 자세한 정보는
    # https://docs.github.com/en/enterprise-cloud@latest/actions/deployment/security-hardening-your-deployments/about-security-hardening-with-openid-connect#customizing-the-issuer-value-for-an-enterprise 를 참조하십시오.
    enterprise_slug: slug

    # allow는 어떤 GitHub Actions 워크플로우가 조인할 수 있을지를 위한 규칙 구성 배열입니다.
    # 모든 allow 항목 내에 구성된 옵션이 충족되어야 GitHub Actions 실행이 조인할 수 있습니다.
    # 여러 개의 allow 항목이 지정된 경우, 하나의 항목 내의 모든 옵션을 충족하는 실행은 조인할 수 있습니다.
    #
    # allow 항목에는 최소한 하나의 항목이 포함되어야 합니다:
    # - repository
    # - repository_owner
    # - sub
    allow:
      - # repository는 GitHub 리포지토리의 완전한 이름(예: 소유자를 포함한)입니다.
        repository: gravitational/teleport
        # repository_owner는 리포지토리가 속한 조직 또는 사용자의 이름입니다.
        repository_owner: gravitational
        # workflow는 GitHub Action 워크플로우 YAML 파일에 구성된 워크플로의 정확한 이름입니다.
        workflow: my-workflow
        # environment는 GitHub Actions 실행과 관련된 환경입니다.
        # GitHub Actions 실행에 환경이 구성되지 않은 경우, 이는 비어 있습니다.
        environment: production
        # actor는 GitHub Actions 실행을 유발한 GitHub 사용자 이름으로,
        # 커밋 또는 워크플로우를 직접 전송하여 발생할 수 있습니다.
        actor: octocat
        # ref는 액션 실행을 트리거한 git ref입니다.
        ref: ref/heads/main
        # ref_type은 액션 실행을 트리거한 git ref의 유형입니다.
        ref_type: branch
        # sub는 워크플로 실행의 다양한 속성을 연결한 문자열입니다.
        # GitHub는 이 문자열의 형식을 다음에서 설명합니다:
        # https://docs.github.com/en/actions/deployment/security-hardening-your-deployments/about-security-hardening-with-openid-connect#example-subject-claims
        sub: repo:gravitational/example-repo:environment:production

CircleCI: circleci

이 조인 방법은 일반적으로 Machine ID 와 함께 사용되어 Circle CI 파이프라인에서 Teleport 보호 리소스에 접근합니다.

kind: token
version: v2
metadata:
  name: example-bot
spec:
  roles: [Bot]
  join_method: circleci
  bot_name: example
  circleci:
    organization_id: $ORGANIZATION_ID
    # 허용은 Auth Server가 `tbot` 이 조인할 수 있는지를 결정하는 규칙을 지정합니다.
    allow:
      - # CircleCI 컨텍스트 ID. CircleCI MachineID 가이드를 참조하여
        # 컨텍스트를 생성하고 해당 ID를 복구하는 방법을 알아보십시오.
        context_id: 00000000-0000-0000-0000-000000000000
        # CircleCI projectID.
        project_id: 1234

GitLab: gitlab

Teleport는 클라우드 호스팅 및 self-hosted GitLab 인스턴스에서 안전한 조인을 지원합니다. 최소 지원 GitLab 버전은 15.7입니다.

이 조인 방법은 일반적으로 MachineID 와 함께 사용되어 GitLab CI 파이프라인에서 Teleport 보호 리소스에 접근합니다.

kind: token
version: v2
metadata:
  # name은 토큰을 식별합니다. 봇이나 노드를 이 토큰을 사용하여 조인하도록 구성할 때,
  # 이 이름을 지정해야 합니다.
  name: gitlab-demo
spec:
  # Bot 역할은 이 토큰이 봇 사용자에게 액세스 권한을 부여함을 나타내며,
  # 노드가 조인할 수 있도록 허용하지 않습니다.
  roles: [Bot]
  # GitLab 조인 방법은 항상 "gitlab"입니다.
  join_method: gitlab

  # bot_name은 이 토큰을 사용했을 때 액세스를 부여할 봇의 이름을 지정합니다.
  bot_name: gitlab-demo

  gitlab:
    # domain은 GitLab 인스턴스의 도메인이어야 합니다. GitLab의 클라우드 호스팅 서비스를 사용하는 경우,
    # 이 필드를 전혀 생략하십시오.
    domain: gitlab.example.com
    # allow는 어떤 GitLab CI 작업이 조인할 수 있는지에 대한 규칙 구성의 배열입니다.
    # 하나의 allow 항목 내에서 구성된 모든 옵션이 충족되어야 GitLab CI 실행이 조인할 수 있습니다.
    # 여러 allow 항목이 지정된 경우, 단일 항목 내의 모든 옵션을 충족하는 작업은 조인할 수 있습니다.
    #
    # allow 항목은 최소한 하나를 포함해야 합니다:
    # - project_path
    # - namespace_path
    # - sub
    # 이는 다른 GitLab 사용자의 프로젝트에서의 GitLab CI 실행이
    # 귀하의 Teleport 클러스터에 액세스하지 못하도록 보장합니다.
    allow:
      # project_path는 지정된 프로젝트 내에서 시작되는 작업으로 조인을 제한합니다.
      #
      # 이 필드는 glob 스타일 매칭을 지원합니다:
      # - '*'를 사용하여 0개 이상의 문자를 일치시킵니다.
      # - '?'를 사용하여 단일 문자를 일치시킵니다.
      - project_path: my-user/my-project
        # namespace_path는 지정된 네임스페이스 내의 프로젝트에 존재하는
        # 모든 실행으로 조인을 제한합니다. 네임스페이스는 사용자 이름
        # 또는 그룹의 이름이 될 수 있습니다.
        #
        # 이 필드는 glob 스타일 매칭을 지원합니다:
        # - '*'를 사용하여 0개 이상의 문자를 일치시킵니다.
        # - '?'를 사용하여 단일 문자를 일치시킵니다.
        namespace_path: my-user
        # pipeline_source는 특정 기준으로 트리거된 작업만 조인하도록 제한합니다.
        # 예: 웹 인터페이스를 통해 트리거됨.
        pipeline_source: web
        # environment는 지정된 환경과 연관된 작업으로 조인을 제한합니다.
        environment: production
        # ref_type은 특정 유형의 git 참조에 의해 트리거된 작업만 조인하도록 제한합니다.
        # `branch` 또는 `tag` 입니다.
        ref_type: branch
        # ref는 특정 git 참조에 의해 트리거된 작업으로 조인을 제한합니다.
        # 이를 `ref_type` 과 결합하여 특정 브랜치 또는 태그에 의해 트리거된
        # 허용 규칙을 생성할 수 있습니다.
        #
        # 이 필드는 glob 스타일 매칭을 지원합니다:
        # - '*'를 사용하여 0개 이상의 문자를 일치시킵니다.
        # - '?'를 사용하여 단일 문자를 일치시킵니다.
        ref: main
        # sub는 project_path, ref_type 및 ref를 연결한 단일 문자열입니다.
        # 이는 단일 문자열을 사용하여 조인을 제한할 수 있으며,
        # 특정 프로젝트 및 git 참조를 설명할 수 있습니다.
        #
        # 개별 필드를 사용하는 것이 좋습니다. sub 문자열을 잘못 형식화하기
        # 쉽기 때문입니다.
        #
        # 이 필드는 glob 스타일 매칭을 지원합니다:
        # - '*'를 사용하여 0개 이상의 문자를 일치시킵니다.
        # - '?'를 사용하여 단일 문자를 일치시킵니다.
        sub: project_path:my-user/my-project:ref_type:branch:ref:main
        # user_login은 특정 사용자 이름으로 트리거된 작업으로 조인을 제한합니다.
        user_login: octocat
        # user_email은 주어진 이메일로 트리거된 작업으로 조인을 제한합니다.
        user_email: octo.cat@example.com
        # ref_protected가 true로 설정되면 보호된 참조에 대해 실행되는 작업으로 조인을 제한합니다.
        # 생략할 경우, 참조의 보호 상태는 확인되지 않습니다.
        ref_protected: true
        # environment_protected가 true로 설정되면 보호된 참조에 대해 실행되는 작업으로 조인을 제한합니다.
        # 생략할 경우, 참조의 보호 상태는 확인되지 않습니다.
        environment_protected: true
        # ci_config_sha는 특정 CI 구성의 커밋을 사용하는 작업으로 조인을 제한합니다.
        ci_config_sha: ffffffffffffffffffffffffffffffffffffffff
        # ci_config_ref_uri는 특정 CI 구성 출처를 사용하는 작업으로 조인을 제한합니다.
        ci_config_ref_uri: gitlab.example.com/my-group/my-project//.gitlab-ci.yml@refs/heads/main
        # deployment_tier는 특정 deployment_tier로 배포하는 작업으로 조인을 제한합니다.
        deployment_tier: production
        # project_visibility는 특정 가시성 구성에 대해 실행되는 작업으로 조인을 제한합니다.
        project_visibility: public

Kubernetes: kubernetes

Kubernetes 조인 방법에는 두 가지 변형이 있습니다:

Kubernetes 클러스터 내

Kubernetes 클러스터 내 조인은 Auth Service와 동일한 Kubernetes 클러스터에서 실행 중인 모든 Teleport 프로세스에서 사용할 수 있습니다. Kubernetes ServiceAccount 토큰을 사용하여 pod 신원을 검증합니다. 이 방법은 일반적으로 Kubernetes 클러스터 내에서만 접근 가능한 Kubernetes TokenReview API에 의존합니다. 이 제한으로 인해 이 조인 방법은 Kubernetes에서 self-hosted Teleport 클러스터에만 사용할 수 있습니다.

이 방법은 pod가 Terminated 상태에 들어가는 즉시 토큰이 무효화되므로 사용 가능한 경우 선호해야 합니다.

# token.yaml
kind: token
version: v2
metadata:
  # 토큰 이름은 비밀이 아니며 Kubernetes 조인 방법은
  # 조인 토큰 이름이 아닌 Kubernetes 서명에 의존하여 신뢰를 설정합니다.
  name: kubernetes-token
  # 긴 만료 시간을 설정합니다. 토큰의 기본값은 30분입니다.
  expires: "2050-01-01T00:00:00Z"
spec:
  # 필요한 최소 시스템 역할 집합을 사용합니다.
  roles: [App]

  # 이 토큰에 대해 허용된 조인 방법을 설정합니다.
  join_method: kubernetes
  
  kubernetes:
    # 유형이 지정되지 않으면 기본적으로 in_cluster로 설정됩니다.
    type: in_cluster
    allow:
      # 서비스 계정 이름은 "namespace:serviceaccountname" 형식을 따릅니다.
      - service_account: "teleport-agent:teleport-app-service"

Kubernetes JWKS

Kubernetes JWKS 조인은 Kubernetes에서 실행되는 모든 Teleport 프로세스에서 사용할 수 있습니다. Auth 서비스는 Kubernetes에서 실행될 필요가 없으므로 이 방법은 Teleport Cloud를 포함한 모든 Teleport 클러스터와 함께 사용할 수 있습니다. 이 조인 방법은 공개 Kubernetes 서명 키를 내보내고 이를 사용하여 Kubernetes SA 토큰 서명 유효성을 검사하는 방식으로 작동합니다. 서명 유효성 검사는 Kubernetes에 대한 액세스 없이 Auth 서비스에 의해 수행될 수 있습니다.

Kubernetes JWKS 조인 방법은 Teleport 14+에서 사용 가능하여 제공됩니다.

kind: token
version: v2
metadata:
  name: example
spec:
  roles: [App]
  join_method: kubernetes
  kubernetes:
    # static_jwks는 Auth 서버가 `tbot` 이 제시한 JWT를
    # 정적으로 구성된 JWKS의 공개 키를 사용하여 검증하도록 구성합니다.
    type: static_jwks
    static_jwks:
      jwks: |
        # 여기 kubernetes JWKS를 배치하십시오. (`kubectl get --raw /openid/v1/jwks` )
        {"keys":[--snip--]}
    # allow는 Auth 서버가 노드가 조인할 수 있는지 여부를 결정하는 규칙을 지정합니다.
    allow:
      - service_account: "namespace:serviceaccount"
Warning

Kubernetes CA를 회전한 후, 새 Kubernetes 서명 키를 포함하도록 Kubernetes JWKS 토큰을 업데이트해야 합니다 (spec.kubernetes.static_jwks.jwks 필드를 업데이트).

Trusted Platform Module: tpm

tpm 조인 방법은 Bots 및 Agents가 공유 비밀을 사용하지 않고 Teleport Auth Service에 안전하게 인증하는 방식입니다. 공유 비밀을 사용하는 대신에 호스트의 Trusted Platform Module (TPM) 고유 식별자와 공개 키 암호화를 사용하여 호스트를 인증합니다.

기계에 사용할 수 있는 다른 형태의 신원이 없는 환경, 예를 들어 온프레미스에서는, 이는 조인하는 가장 안전한 방법입니다. token 조인 방법에 필요로 하는 공유 비밀 배포를 피할 수 있습니다.

Trusted Platform Module (TPM)은 호스트에 설치된 안전한 물리적 암호 프로세서입니다. TPM은 암호화 자료를 저장하고 여러 가지 암호화 작업을 수행할 수 있으며, 암호화 자료를 운영 체제에 노출하지 않습니다. 각 TPM은 Endorsement Key (EK) 라고 알려진 고유한 키 쌍이 내장되어 있습니다. 이 키는 호스트 운영 체제를 재설치하더라도 변경되지 않습니다.

일부 TPM은 이 키 쌍에 대해 제조업체의 CA에 의해 서명된 X.509 인증서를 포함하기도 합니다. 이는 EK 인증서 (EKCert)라고 합니다. 이 인증서는 TPM이 제조업체의 CA를 신뢰하는 제3자에게 TPM이 진짜이며 TPM 사양을 준수한다는 것을 증명하는 데 사용할 수 있습니다.

tpm 조인 방법을 사용할 때, 먼저 TPM의 공개 키를 쿼리한 다음 이 공개 키를 명시적으로 허용하는 조인 토큰을 생성해야 합니다. 감지된 TPM에 대한 정보를 나열하려면 teleport tpm identify 명령을 실행합니다.

호스트가 많을 경우 Ansible과 같은 자동화 도구를 사용하여 전체 면에서 TPM을 쿼리하고 조인 토큰을 생성하는 것이 좋습니다.

Warning

tpm 조인 방법은 현재 FIPS 140-2와 호환되지 않습니다.

kind: token
version: v2
metadata:
  # name은 토큰을 식별합니다. 이 토큰을 사용하여 봇이나 노드를 조인하도록 구성할 때
  # 이 이름이 지정되어야 합니다.
  name: tpm-token
spec:
  # 머신 ID 및 TPM 조인의 경우 역할은 항상 "Bot"이며
  # join_method는 항상 "tpm"입니다.
  roles: [Bot]
  join_method: tpm

  # bot_name은 이 토큰이 사용될 때 액세스를 부여할 봇의 이름을 지정합니다.
  bot_name: tpm-demo

  # tpm은 이 토큰에 대한 TPM 조인 메서드-specific 설정을 지정합니다.
  tpm:
    # ekcert_allowed_cas는 TPM EKCerts를 검증하는 데 사용될 CA 인증서 목록입니다.
    # 이들은 PEM으로 포장되어야 합니다.
    #
    # 지정할 경우, TPM은 지정된 CA 중 하나가 서명한 EKCert를 제출해야 합니다. 
    # EKCert를 제출하지 않는 TPM은 조인할 수 없습니다.
    #
    # 지정하지 않을 경우, TPM은 EKCert 또는 EKPubHash로 조인할 수 있습니다.
    ekcert_allowed_cas:
      - |
        -----BEGIN CERTIFICATE-----
        ... CA 인증서 데이터 ...
        -----END CERTIFICATE-----
    # allow는 규칙 목록이며, 제출된 TPM은 이 토큰을 사용하여 조인할 수 있도록
    # 하나의 allow 규칙과 일치해야 합니다.
    allow:
        # description은 규칙의 사람이 읽을 수 있는 설명입니다. 이는 TPM이 
        # 조인할 수 있는지 여부와는 관련이 없지만, 특정 호스트와 규칙을 연결하는 데
        # 사용할 수 있습니다(예: TPM이 위치한 서버의 자산 태그).
      - description: "example-build-server-100"
        # ek_public_hash는 PKIX 형식으로 마샬링된 EKPub의 SHA256 해시로,
        # 16진수로 인코딩됩니다. 이 값은 TPM이 EKCert를 제출했을 때도 체크되며,
        # EKCert의 공개 키가 이 체크를 위해 사용됩니다.
        ek_public_hash: "d4b4example6fabfc568d74f2example6c35a05337d7af9a6example6c891aa6"
        # ek_certificate_serial은 EKCert의 시리얼 번호로,
        # 16진수로 컬론으로 구분된 조각입니다. 이 값은 TPM에 EKCert가
        # 구성되어 있지 않은 경우 체크되지 않습니다.
        ek_certificate_serial: "01:23:45:67:89:ex:am:pl:e0:23:45:67:89:ab:cd:ef"

Terraform Cloud: terraform_cloud

이 조인 방법은 Terraform Cloud 워크로드 ID를 사용하여 인증하는 데 사용됩니다. 일반적으로 HCP Terraform 또는 자체 호스팅된 Terraform Enterprise에서 Teleport Terraform 공급자에 의해 사용됩니다. 다른 플랫폼에서 Terraform 실행에 조인하는 데는 사용할 수 없으며, 대신 전용 조인 방법을 사용해야 합니다.

Enterprise

자체 호스팅 Terraform Enterprise에 대한 지원은 Teleport Enterprise가 필요합니다.

kind: token
version: v2
metadata:
  name: terraform
spec:
  roles: [Bot]
  join_method: terraform

  # 이것은 `tctl bots add` 명령어로 생성되었거나
  # `bot` 리소스를 생성하여 일치해야 합니다.
  bot_name: terraform

  terraform:
    # 예상되는 audience를 수동으로 재정의합니다. 설정되지 않은 경우, 기본값은
    # Teleport 클러스터 이름입니다. 이 값을 재정의하는 것은 권장되지 않습니다.
    audience: ""

    # Terraform Enterprise 인스턴스의 호스트 이름을 지정합니다. 이 값을 재정의하여
    # Terraform Enterprise를 사용하려면 Teleport Enterprise가 필요합니다.
    # 설정되지 않은 경우, 공개 `app.terraform.io` 인스턴스를 참조합니다.
    hostname: ""

    allow:
      # 최소한 `organization_name` 또는 `organization_id` 중 하나는 설정되어야 합니다.
      # 값은 대소문자 및 공백에 민감합니다.
      - organization_name: OrgName
        organization_id: org-foo

        # 최소한 `project_name` , `project_id` , `workspace_name` 또는
        # `workspace_id` 중 하나도 설정되어야 합니다.
        project_name: ProjectName
        project_id: prj-bar

        # `workspace_name` 또는 `workspace_id` 가 설정되지 않은 경우,
        # 지정된 프로젝트 내의 모든 워크스페이스가 참여할 수 있습니다.
        workspace_name: WorkspaceName
        workspace_id: ws-baz

        # 설정된 경우, 특정 실행 단계에서 실행 중인 요구 사항이 있습니다. 예를 들어,
        # 특정 실행은 계획에만 사용될 수 있습니다. 유효한 값: 빈 값, `plan` 또는 `apply` .
        run_phase: ""
Teleport 원문 보기