Infograb logo
Teleport 자원

이 참조 가이드는 Teleport로 관리할 수 있는 동적 자원 목록을 제공합니다. 동적 자원에 대한 자세한 내용은 동적 자원 사용하기 가이드를 참조하세요.

tctl 로 동적 자원을 적용하는 예시:

모든 커넥터 목록 보기:

tctl get connectors

"okta"라는 SAML 커넥터 덤프:

tctl get saml/okta

"okta"라는 SAML 커넥터 삭제:

tctl rm saml/okta

"gworkspace"라는 OIDC 커넥터 삭제:

tctl rm oidc/gworkspace

"myteam"라는 github 커넥터 삭제:

tctl rm github/myteam

"admin"이라는 로컬 사용자 삭제:

tctl rm users/admin

모든 장치 표시:

tctl get devices

특정 장치 가져오기:

tctl get devices/<asset-tag>

클러스터 인증 기본 설정 가져오기:

tctl get cluster_auth_preference
Note

tctl get connectors 가 모든 커넥터를 보여주지만, 개별 커넥터를 작업할 때는 saml 또는 oidc 와 같은 올바른 kind 를 사용해야 합니다. 각 커넥터의 kindtctl get connectors 의 YAML 출력 상단에서 확인할 수 있습니다.

동적 자원 목록

현재 tctl 을 통해 노출된 자원의 목록은 다음과 같습니다:

자원 종류설명
user내부 Teleport 사용자 DB의 사용자 레코드.
role인터랙티브 및 비인터랙티브 사용자에 의해 가정된 역할.
connectorSAML, OIDC 및 GitHub에 대한 단일 로그인 (SSO) 인증 커넥터.
node등록된 SSH 노드. 같은 기록은 tctl nodes ls 를 통해 표시됩니다.
windows_desktop등록된 Windows 데스크탑.
cluster신뢰된 클러스터. 클러스터 연결에 대한 자세한 내용은 여기에서 확인하십시오.
login_rule로그인 규칙, 자세한 내용은 로그인 규칙 가이드를 참조하세요.
deviceTeleport 신뢰 장치, 자세한 내용은 장치 신뢰 가이드를 참조하세요.
ui_configProxy 서비스에서 제공하는 웹 UI의 구성.
vnet_config클러스터의 VNet 옵션에 대한 구성.
cluster_auth_preference클러스터의 인증 기본 설정에 대한 구성.
database_object_import_rule데이터베이스 객체 가져오기 규칙.

사용자

Teleport는 리소스로 표현되는 인터랙티브 로컬 사용자, 비인터랙티브 로컬 사용자(봇) 및 단일 로그인 사용자를 지원합니다.

kind: user
version: v2
metadata:
  name: joe
spec:
  # roles는 이 사용자에게 할당된 역할의 목록입니다.
  roles:
    - admin
  # status는 예를 들어 사용자가 미리 정의된 로그인 실패 시도 횟수를 초과할 경우
  # Teleport 시스템에서 일시적으로 잠금 설정을 합니다.
  status:
    is_locked: false
    lock_expires: 0001-01-01T00:00:00Z
    locked_time: 0001-01-01T00:00:00Z
  # traits는 사용자 리소스에 할당된 키-값 쌍 목록입니다.
  # Traits는 역할 템플릿에서 변수로 사용될 수 있습니다.
  traits:
    logins:
      - joe
      - root
  # expires가 비어 있지 않으면 리소스의 자동 만료를 설정합니다.
  expires: 0001-01-01T00:00:00Z
  # created_by는 이 사용자 리소스의 작성자 신원을 추적하는 시스템 속성입니다.
  created_by:
    time: 0001-01-01T00:00:00Z
    user:
      name: builtin-Admin

역할

인터랙티브 및 비인터랙티브 사용자(봇)는 하나 이상의 역할을 가집니다.

역할은 데이터베이스, SSH 서버, Kubernetes 클러스터, 웹 서비스 및 애플리케이션과 Windows 데스크톱에 대한 접근을 관리합니다.

kind: 역할
version: v7
metadata:
  name: 예제
  description: 이것은 예제 역할입니다.
spec:
  # 사용자에게 여러 개의 비기본 충돌 옵션이 있는 경우 연결 옵션을 지정합니다.
  # 텔레포트는 가장 허용되지 않는 값을 선택합니다.
  options:
    # max_session_ttl은 이 역할이 부여된 사용자에게 발급된 인증서의 TTL(존재 시간)을 정의합니다.
    max_session_ttl: 8h
    # forward_agent는 SSH 에이전트 전달이 허용되는지를 제어합니다.
    forward_agent: true
    # port_forwarding은 SSH에 대해 TCP 포트 포워딩이 허용되는지를 제어합니다.
    port_forwarding: true
    # ssh_file_copy는 파일 복사(SCP/SFTP)가 허용되는지를 제어합니다.
    # 기본값은 true입니다.
    ssh_file_copy: false
    # client_idle_timeout은 클러스터 노드에 대한 SSH 세션이
    # 클라이언트(유휴 클라이언트)로부터 활동이 없을 경우 강제로 종료되는지를 결정합니다.
    # 글로벌 클러스터 설정을 무시합니다. 예: '30m', '1h' 또는 '1h30m'
    client_idle_timeout: never
    # 인증서가 활성 세션 중에 만료될 경우 클라이언트를 강제로 연결 해제할지를 결정합니다.
    # 글로벌 클러스터 설정을 무시합니다.
    disconnect_expired_cert: no
    # max_sessions는 단일 연결을 통해 설정할 수 있는 세션 채널의 총 수입니다.
    # 10으로 설정하면 OpenSSH 기본 동작과 일치합니다.
    # (기업 전용)
    max_sessions: 10
    # 개선된 기록은 BPF 기반 세션 기록기에서 기록되는 이벤트를 정의합니다.
    enhanced_recording:
    - command
    - disk
    - network
    # permit_x11_forwarding은 사용자가 openssh 클라이언트와 서버를 통해 X11 포워딩을 사용할 수 있도록 허용합니다.
    permit_x11_forwarding: true
    # device_trust_mode는 이 역할의 할당된 사용자의 인증된 장치 접근을 강제합니다.
    device_trust_mode: optional|required|off
    # require_session_mfa는 이 역할의 모든 할당된 사용자에 대해 세션당 MFA를 요구합니다.
    require_session_mfa: true
    # mfa_verification_interval은 선택적으로 연속 MFA 검증 사이에 경과할 수 있는 최대 기간을 정의합니다.
    # 이 변수는 사용자가 주기적으로 자신의 신원을 검증하라는 프롬프트를 받을 수 있도록 하여,
    # tsx 프록시 * 파생물을 사용할 때 재인증 없이 오랜 세션을 방지하여 보안을 강화합니다.
    mfa_verification_interval: 1h
    # lock은 이 역할을 가진 사용자의 잠금 모드를 설정합니다.
    # 유효한 값은 'strict' 또는 'best_effort'입니다.
    lock: strict
    # 기업 전용 request_access 필드는 'optional', 'always' 또는 'reason'입니다. 항상 또는 이유로 설정하면, 
    # 이는 tsh 또는 웹 UI 클라이언트에 액세스 요청을 항상 생성하도록 지시합니다. 'reason'으로 설정하면
    # 사용자가 액세스 요청을 생성하는 이유를 제출해야 합니다.
    request_access: reason
    # 'request_prompt' 필드를 사용하여 사용자가 요청 이유 필드에 무엇을 제출해야 하는지를 알려줄 수 있습니다.
    request_prompt: 티켓 ID를 제공해 주세요
    # 기업 전용 max_connections 필드는 클러스터 내의 동시 세션 수를 제한합니다.
    # 이 설정은 Teleport 성능을 저하시키므로 클러스터 전반에 걸쳐 연결을 추적해야 합니다.
    max_connections: 2
    # 사용자당 동시 Kubernetes 세션 수 제한
    max_kubernetes_connections: 1
    # Teleport가 세션 기록 실패(예: 디스크 오류)에 어떻게 대처하는지를 정의합니다.
    # 값은 'best_effort' 또는 'strict'로 설정할 수 있습니다. 'strict'로 설정하면 세션이 즉시 종료됩니다.
    # 'best_effort'로 설정하면 세션이 종료되지 않고 기록이 비활성화됩니다. 구성은 서비스별로 수행됩니다.
    # (현재는 'ssh'만 지원됨).
    record_session:
      # 사용자의 데스크탑 세션을 기록할지 여부를 지정합니다.
      # 데스크탑 세션 기록은 하나 이상의 사용자의 역할이 기록을 활성화한 경우에만 가능합니다.
      # 지정하지 않으면 기본값은 true입니다.
      # auth_service.session_recording이 teleport.yaml(인증 서비스)에서 'off'로 설정되어 있거나,
      # 클러스터의 session_recording_config 리소스가 'mode: off'로 설정되어 있으면 데스크탑 세션은 절대 기록되지 않습니다.
      desktop: true
      # 선택 사항: 프로토콜 특정 모드가 설정되지 않을 경우 사용할 기본 세션 기록 모드입니다.
      default: best_effort|strict
      # 선택 사항: SSH 세션(텔레포트 서버 접근)에 대한 세션 기록 모드입니다. 설정되지 않은 경우 기본값이 사용됩니다.
      ssh: best_effort|strict
    # 클립보드 공유가 원격 데스크탑과 함께 허용되어야 하는지 여부를 지정합니다.
    # (지원되는 브라우저가 필요합니다). 지정하지 않으면 기본값은 true입니다.
    # 사용자의 역할 중 하나라도 클립보드를 비활성화했다면 비활성화됩니다.
    desktop_clipboard: true
    # 로컬 머신에서 원격 데스크탑으로 디렉터리 공유가 허용되어야 하는지 여부를 지정합니다.
    # (지원되는 브라우저가 필요합니다). 지정하지 않으면 기본값은 true입니다.
    # 사용자의 역할 중 하나라도 디렉터리 공유를 비활성화했다면 비활성화됩니다.
    desktop_directory_sharing: true
    # 기업 전용: 활성화되면 로그인에 사용된 소스 IP가 사용자 인증서에 포함되어,
    # 손상된 인증서가 다른 네트워크에서 사용되지 않도록 합니다. 기본값은 false입니다.
    pin_source_ip: true
    # 사용자 SSH 키에 포함될 이름 및 관련 값 목록을 지정합니다.
    # 키 타입은 'ssh'로만 가능하며 모드는 'extension'으로만 가능합니다.
    # 이름 및 값 필드는 임의의 문자열이 될 수 있으며, 값 필드는 변수 보간을 지원합니다.
    cert_extensions:
     - type: ssh
       mode: extension
       name: login@github.com
       value: '{{ external.github_login }}'
    # 이 역할이 SSH 사용자의 자동 프로비저닝을 지원하는지 여부를 제어합니다.
    # 옵션: keep (세션 종료 시 사용자 유지), insecure-drop (세션 종료 시 사용자 제거),
    #          off (호스트 사용자 생성 비활성화)
    create_host_user_mode: keep
    # 자동 프로비전된 SSH 사용자의 기본 셸을 설정합니다. 셸에 대한 절대 경로 또는 시스템 PATH를 통해
    # 도달할 수 있는 이름 모두 유효한 값입니다. create_host_user_mode가 off로 설정되지 않을 경우에만 적용됩니다.
    create_host_user_default_shell: bash
    # 이 역할이 자동 데이터베이스 사용자 프로비저닝을 요구해야 하는지 여부를 제어합니다.
    # 옵션: off (데이터베이스 사용자 자동 프로비저닝 비활성화), keep (세션 종료 시 사용자를 비활성화하여 역할 삭제 및 잠금),
    #       best_effort_drop (세션 종료 시 사용자를 삭제하려고 시도하며, 실패할 경우 비활성화됩니다).
    create_db_user_mode: keep
    # ID 공급자 접근을 위한 역할 별 옵션을 지정합니다.
    idp:
      # SAML ID 공급자 접근을 위한 역할 별 옵션을 지정합니다.
      saml:
        # 이 역할이 SAML ID 공급자에 대한 접근 권한이 있는지를 지정합니다.
        # 기본값은 true입니다.
        enabled: true

  # allow 섹션은 이 역할의 사용자가 허용되는 리소스/동사 조합 목록을 선언합니다.
  # 기본적으로 아무것도 허용되지 않습니다.
  allow:
    # logins 배열은 사용자가 사용할 수 있도록 허용된 OS/UNIX 로그인입니다.
    # 이 필드에서는 문자열과 템플릿 변수가 모두 지원됩니다.
    logins: [root, '{{internal.logins}}']

    # Windows 로그인은 사용자에게 데스크탑 세션에 대해 허용됩니다.
    windows_desktop_logins: [Administrator, '{{internal.logins}}']

    # node_labels: 이 역할을 가진 사용자는 아래와 일치하는 레이블을 가진 SSH 노드에 연결할 수 있습니다.
    node_labels:
      # 리터럴 문자열:
      'env': 'test'
      # 와일드카드('*')는 모든 노드를 의미합니다.
      '*': '*'
      # 대안 옵션 목록:
      'region': ['us-west-1', 'eu-central-1']
      # 정규 표현식은 ^로 시작하고 $로 끝납니다.
      # 텔레포트는 Go의 정규 표현식 구문을 사용합니다:
      # https://github.com/google/re2/wiki/Syntax
      # 위의 목록 예는 다음과 같이 표현할 수 있습니다:
      # 'region': '^us-west-1|eu-central-1$'
      'reg': '^us-west-1|eu-central-1$'

    # 생성된 사용자가 추가될 호스트 그룹 목록입니다. 존재하지 않는 그룹은 생성됩니다.
    # create_host_user_mode가 'off'가 아닐 경우에만 적용됩니다.
    host_groups: [ubuntu, nginx, other]

    # `/etc/sudoers.d` 에 생성된 임시 sudoers 파일에 포함될 항목 목록입니다.
    # 세션 종료 시 기록은 제거됩니다.
    host_sudoers: [
      # 이 줄은 로그인 사용자가 root 권한으로 `systemctl restart nginx.service` 를 실행할 수 있도록 허용합니다.
      # sudoers 항목은 로그인한 사용자 이름으로 접두사가 붙습니다.
      "ALL = (root) NOPASSWD: /usr/bin/systemctl restart nginx.service"
    ]

    # kubernetes_groups는 이 역할을 가진 사용자가 수임할 Kubernetes 그룹을 지정합니다.
    # 'external' 속성 집합을 통해 SAML/OIDC 특성을 참조할 수 있습니다.
    # 이를 통해 ID 관리자의 Kubernetes 그룹 멤버십을 지정할 수 있습니다:
    kubernetes_groups: ['system:masters', '{{external.trait_name}}']

    # kubernetes_users는 이 역할이 수임할 수 있는 kubernetes 사용자 목록입니다.
    kubernetes_users: ['IAM#{{external.foo}};']

    # kubernetes_labels: 이 역할을 가진 사용자는 아래와 일치하는 레이블을 가진 k8s 클러스터에 연결할 수 있습니다.
    kubernetes_labels:
      # 사용자는 프로덕션 환경에만 접근할 수 있습니다.
      'env': 'prod'
      # 사용자는 us-west의 모든 지역에 접근할 수 있습니다. 예: us-west-1, us-west-2
      'region': 'us-west-*'
      # 정규 표현식은 ^로 시작하고 $로 끝납니다.
      # 텔레포트는 Go의 정규 표현식 구문을 사용합니다:
      # https://github.com/google/re2/wiki/Syntax
      # 위의 목록 예는 다음과 같이 표현할 수 있습니다:
      # 'region': '^us-west-1|eu-central-1$'
      'cluster_name': '^us.*\.example\.com$'

    # kubernetes_resources는 이 역할을 가진 사용자가 접근할 수 있는 Kubernetes 리소스를 나타냅니다.
    kubernetes_resources:
        # 리소스 종류. 텔레포트는 현재 다음을 지원합니다:
        # - * (모든 리소스)
        # - pod
        # - secret
        # - configmap
        # - namespace
        # - service
        # - serviceaccount
        # - kube_node
        # - persistentvolume
        # - persistentvolumeclaim
        # - deployment
        # - replicaset
        # - statefulset
        # - daemonset
        # - clusterrole
        # - kube_role
        # - clusterrolebinding
        # - rolebinding
        # - cronjob
        # - job
        # - certificatesigningrequest
        # - ingress
      - kind: '*'
        # 리소스에 접근을 허용할 Kubernetes 네임스페이스의 이름입니다.
        # 와일드카드 '*'는 임의의 문자열 시퀀스를 의미합니다.
        # 값이 '^'로 시작하고 '$'로 끝나면 Kubernetes 서비스는 이를 정규 표현식으로 처리합니다.
        namespace: '*'
        # 접근을 허용할 리소스의 이름입니다.
        # 와일드카드 '*'는 임의의 문자열 시퀀스를 의미합니다.
        # 값이 '^'로 시작하고 '$'로 끝나면 Kubernetes 서비스는 이를 정규 표현식으로 처리합니다.
        name: '^nginx-[a-z0-9-]+$'
        # 사용자가 리소스에 대해 수행할 수 있는 동작입니다.
        # 텔레포트는 현재 다음을 지원합니다:
        # - * (모든 동작)
        # - get
        # - list
        # - watch
        # - create
        # - update
        # - patch
        # - delete
        # - deletecollection
        # - exec - 사용자가 pod 내에서 명령을 실행할 수 있도록 허용합니다.
        # - portforward - 사용자가 pod에서 포트를 포워딩할 수 있도록 허용합니다.
        verbs: ['*']

    # Functions는 변수를 변환합니다.
    db_users: ['{{email.local(external.email)}}']
    db_names: ['{{external.db_names}}']
    db_labels:
      'env': '{{regexp.replace(external.env, "^(staging)$", "$1")}}'

    # 부여할 데이터베이스 역할 목록입니다. 'db_permissions'와 상호 배타적입니다.
    db_roles: ['{{external.db_roles}}']

    # 모든 테이블에 대해 가능한 모든 Postgres 권한을 부여합니다.
    # 부여할 데이터베이스 권한 목록입니다. 'db_roles'와 상호 배타적입니다.
    db_permissions:
    - match:
        object_kind: table
      permissions:
	    - SELECT
	    - INSERT
	    - UPDATE
	    - DELETE
	    - TRUNCATE
	    - REFERENCES
	    - TRIGGER

    # app_labels: 이 역할을 가진 사용자는 아래와 일치하는 레이블을 가진 애플리케이션에 연결할 수 있습니다.
    app_labels:
      # 사용자는 프로덕션 환경에만 접근할 수 있습니다.
      'env': 'prod'
      # 사용자는 us-west의 모든 지역에 접근할 수 있습니다. 예: us-west-1, us-west-2
      'region': 'us-west-*'
      # 정규 표현식은 ^로 시작하고 $로 끝납니다.
      # 텔레포트는 Go의 정규 표현식 구문을 사용합니다:
      # https://github.com/google/re2/wiki/Syntax
      # 위의 목록 예는 다음과 같이 표현할 수 있습니다:
      # 'region': '^us-west-1|eu-central-1$'
      'cluster_name': '^us.*\.example\.com$'

    # group_labels: 이 역할을 가진 사용자는 기본 사용자 그룹에 대한 권한을 부여받습니다.
    # Okta 서비스와 같은 서비스는 이러한 권한을 사용하여 외부 서비스에 대한 접근을 허용할 수 있습니다.
    group_labels:
      # 사용자는 프로덕션 관련 그룹에 대한 그룹 소속을 부여받습니다.
      'env': 'prod'

    # cluster_labels: 이 역할을 가진 사용자는 아래와 일치하는 레이블을 가진 원격 클러스터에 연결할 수 있습니다.
    cluster_labels:
      'env': 'prod'

    # node_labels_expression은 node_labels와 동일한 목적을 가지지만,
    # 커스텀 로직을 구성하기 위해 조건부 표현식을 지원합니다.
    # 이 역할을 가진 사용자는 스테이징 환경에 있거나 사용자 자신의 팀 중 하나에 속하는 노드에 접근할 수 있습니다.
    node_labels_expression: |
      labels["env"] == "staging" ||
      contains(user.spec.traits["teams"] , labels["team"])

    # 아래와 같은 <kind>_labels_expression 필드는 <kind>_labels 필드의 동일한 목적을 가지지만,
    # 레이블 일치자 대신 조건부 표현식을 지원합니다.
    app_labels_expression: 'labels["env"] == "staging"'
    cluster_labels_expression: 'labels["env"] == "staging"'
    kubernetes_labels_expression: 'labels["env"] == "staging"'
    db_labels_expression: 'labels["env"] == "staging"'
    db_service_labels_expression: 'labels["env"] == "staging"'
    windows_desktop_labels_expression: 'labels["env"] == "staging"'
    group_labels_expression: 'labels["env"] == "staging"'

    # aws_role_arns는 이 역할을 가진 사용자가 AWS 콘솔에 접근할 때 AWS 역할을 수임할 수 있도록 허용합니다.
    # UI 또는 AWS API를 사용하여 CLI
    aws_role_arns:
      - 'arn:aws:iam::1234567890:role/ec2-read-only'
      - 'arn:aws:iam::1234567890:role/ec2-full-access'
      - 'arn:aws:iam::0987654321:role/example-role'

    # Identity Center 통합을 위한 AWS 계정 및 권한 세트 바인딩
    account_assignments:
    - # AWS identity center 계정 ID
      account: "<account_id>"
      # AWS에서의 권한 세트 이름
      name: AdministratorAccess
      # 권한 세트 ARN
      permission_set: arn:aws:sso:::permissionSet/ssoins-1234/ps-5678 # 권한 세트 ARN

    # impersonate를 사용하면 이 역할을 가진 사용자가 아래 표현과 일치하는 다른 사용자 및 역할의 이름으로 인증서를 발급할 수 있습니다.
    impersonate:
      users: ['*']
      roles: ['jenkins']
      # where는 선택적 조건부로, 사용자와 역할의 일치를 더욱 제한하는 조건입니다.
      where: >
        contains(user.spec.traits["group"], impersonate_role.metadata.labels["group"]) &&
        contains(user.spec.traits["group"], impersonate_user.metadata.labels["group"])

    # review_requests는 이 역할을 가진 사용자가 액세스 요청을 승인 또는 거부할 수 있도록 허용합니다. (기업 전용)
    review_requests:
      # 리뷰어는 여기에 나열된 역할에 대한 액세스 요청을 보고 승인 또는 거부할 수 있습니다.
      roles: ['dbadmin']
      # 리뷰어는 리소스 접근 요청을 검토할 때 preview_as_roles에 나열된 역할에 대해 접근 가능한 리소스에 대한 세부 정보를 미리 볼 수 있습니다.
      preview_as_roles: ['dbadmin']

    # request는 사용자가 아래 표현과 일치하는 역할을 요청할 수 있도록 허용합니다.
    request:
      # 'roles' 목록은 리터럴과 와일드카드 일치자를 혼합할 수 있습니다.
      roles: ['common', 'dev-*']

      # 'search_as_roles'는 사용자에게 나열된 역할에 의해 접근할 수 있는 리소스를 검색하고 요청할 수 있도록 허용합니다. (기업 전용)
      search_as_roles: ['access']

      # 'kubernetes_resources'는 사용자가 어떤 종류의 Kubernetes 리소스를 요청할 수 있는지를 제한합니다. 아래 예에서는 사용자가 오직 Kubernetes 네임스페이스만 요청할 수 있습니다.
      # 기본값(아무것도 정의되지 않을 경우)은 모든 Kubernetes 리소스나 전체 클러스터에 대한 접근 요청을 허용합니다.
      kubernetes_resources:
        - kind: "namespace"

      # thresholds는 승인자 및 거부자의 최소 수를 지정합니다.
      # 기본값은 모두 1입니다. (기업 전용)
      thresholds:
        # 최소 두 명의 적격 승인자와 최소 한 명의 거부자가 필요합니다.
        - approve: 2
          deny: 1

      # max_duration은 사용자가 역할에 대한 접근 요청을 할 수 있는 최대 기간을 지정합니다.
      # 기간은 초(s), 분(m), 시간(h) 또는 일(d)으로 지정할 수 있습니다. 예: 4d, 10h, 30m, 60s.
      # 최대 기간은 14일입니다.
      max_duration: 7d

      # 'claims_to_roles' 매핑은 OIDC 커넥터에서와 동일하게 작동하지만,
      # 매핑되는 역할도 일치자일 수 있는 추가 이점이 있습니다.
      #
      # 이 예제는 사용자의 클레임에서 동적 매핑을 허용하는 텔레포트의 정규 표현식 지원을 활용합니다.
      # 아래 매핑은 'projects: product-(.*)'와 일치하는 클레임을 가진 사용자가 '$1-admin'에 해당하는 역할을 요청할 수 있음을 나타냅니다.
      # 예: 'projects: product-foo' 클레임은 사용자가 'foo-admin' 역할을 요청할 수 있게 합니다.
      claims_to_roles:
        - claim: 'projects'
          # 선행 'product-'가 있는 모든 그룹 이름과 일치합니다.
          value: '^product-(.*)$'
          # 값 캡처에서 역할 이름을 생성합니다.
          roles: ['$1-admin']

      # 텔레포트는 보류 중인 액세스 요청에 주석을 첨부할 수 있습니다. 이러한
      # 주석은 리터럴일 수 있으며, 변수 보간 표현식이 될 수 있으며,
      # 효과적으로 외부 ID 공급자에서 플러그인 시스템으로 선택된 클레임을 전파하는 수단을 생성합니다.
      annotations:
        foo: ['bar']
        groups: ['{{external.groups}}']

    # Moderated Sessions 정책은 세션을 시작하는 데 필요한 요구 사항을 정의합니다.
    require_session_join:
      # 정책의 이름을 정의합니다. 이름은 로그 및 조직/분류의 식별자로만 사용됩니다.
      - name: 감사인 감독
        # 정책의 요구 사용자 수에 대한 필드를 정의하는 RBAC 조건을 지정합니다.
        filter: 'contains(user.spec.roles, 'auditor')'
        # 이 정책이 적용되는 세션 종류.
        kinds: ['k8s', 'ssh']
        # 정책에 대해 카운트되기 위해 참가자가 가져야 하는 참가자 모드의 목록입니다.
        modes: ['moderator']
        # 정책을 충족하기 위해 필터 표현식에 부합해야 하는 최소 사용자 수입니다.
        count: 1
        # 정책이 더 이상 충족되지 않을 경우, 모더레이터가 세션을 떠났을 때 취할 조치입니다.
        # 이는 'terminate' 또는 'pause'일 수 있습니다. 비어 있거나 알 수 없는 값은 'terminate'로 기본 설정됩니다.
        on_leave: 'terminate'

    # Moderated Sessions 정책은 세션에 참여할 수 있는 능력을 정의합니다.
    join_sessions:
      # 정책의 이름을 정의합니다. 이름은 로그 및 조직/분류를 위한 식별자로만 사용됩니다.
      - name: 감사인 감독
        # 이러한 역할을 가진 다른 사용자가 생성한 세션에 참여할 수 있습니다.
        roles : ['prod-access']
        # 이 정책이 적용되는 다양한 세션 종류.
        kinds: ['k8s', 'ssh']
        # 역할이 참가자로서 세션에 참여할 수 있는 방식의 목록입니다.
        modes: ['moderator', 'observer']

    # spiffe는 역할을 가진 사용자가 요청할 수 있는 SPIFFE ID 목록입니다.
    # 요청이 spiffe 목록 내의 한 블록과 일치하는 한, 인증서가 발급됩니다.
    spiffe:
        # 요청할 수 있는 SPIFFE ID의 경로입니다. 이 필드는
        # 각 블록에 대해 필수입니다. 앞에 슬래시가 있어야 하며
        # 후행 슬래시는 포함되어서는 안 됩니다.
      - path: "/svc/foo"
        # 사용자 요청에 SPIFFE ID와 함께 포함될 수 있는 IP SAN입니다.
        # 이 블록의 필드는 선택적이며 생략하면
        # 사용자가 IP SAN과 함께 SVID를 요청할 수 없습니다.
        ip_sans: ["10.0.0.100/32"]
        # 사용자 요청에 SPIFFE ID와 함께 포함될 수 있는 DNS SAN입니다.
        # 이 블록의 필드는 선택적이며 생략하면
        # 사용자가 DNS SAN과 함께 SVID를 요청할 수 없습니다.
        #
        # '*' 와일드카드 문자는 임의의 수의
        # 모든 문자를 나타내는 데 사용됩니다. 예를 들어, '*.example.com'은
        # 'foo.example.com'과 일치합니다.
        dns_sans: ["foo.svc.example.com"]

    # rules는 이 역할을 가진 사용자가 아래 조건과 일치하는 다른 리소스를 수정할 수 있도록 허용합니다.
    # 지원되는 리소스:
    # role               - 역할 리소스
    # user               - 사용자 리소스
    #
    # auth_connector     - 모든 인증 커넥터 리소스
    # oidc               - OIDC 커넥터 리소스
    # saml               - 커넥터 리소스
    # github             - GitHub 커넥터 리소스
    #
    # trusted_cluster    - 신뢰할 수 있는 클러스터 리소스
    # remote_cluster     - 원격 클러스터 리소스
    #
    # access_request     - 액세스 요청 리소스
    # access_plugin_data - 액세스 요청 플러그인 데이터를 수정할 수 있는 권한
    #
    # session            - 세션 재생 기록
    # session_tracker    - 활성 세션
    # ssh_session        - 활성 세션 페이지 보기를 허용합니다.
    # instance           - 텔레포트 인스턴스
    # event              - 구조화된 감사 로그 이벤트
    #
    #
    # lock                  - 잠금 리소스
    # network_restrictions  - SSH 세션에 대한 제한 사항
    #
    # auth_server           - 인증 서비스 리소스
    # proxy                 - 프록시 서비스 리소스
    # node                  - SSH 노드 리소스
    # app                   - 애플리케이션 리소스
    # db                    - 데이터베이스 리소스
    # kube_cluster          - Kubernetes 클러스터 리소스
    # token                 - 프로비전 토큰 리소스
    # cert_authority        - 인증 기관 리소스
    #
    # cluster_name              - 클러스터 이름을 포함하는 리소스입니다.
    # cluster_config            - 클러스터 수준 구성 보관 리소스
    # cluster_auth_preference   - 이 클러스터에 대한 인증 유형
    # session_recording_config  - 세션 기록 구성에 대한 리소스
    # cluster_audit_config      - 클러스터 감사 구성 보관 리소스
    # cluster_networking_config - 클러스터 네트워킹 구성 보관 리소스

    rules:
      - resources: [role]
        verbs: [list, create, read, update, delete]
      - resources: [auth_connector]
        verbs: [list, create, read, update, delete]
      - resources: [session]
        verbs: [list, read]
      - resources: [trusted_cluster]
        verbs: [list, create, read, update, delete]
      - resources: [event]
        verbs: [list, read]
      - resources: [user]
        verbs: [list, create, read, update, delete]
      - resources: [token]
        verbs: [list, create, read, update, delete]

  # deny 섹션은 'allow' 섹션과 동일한 형식을 사용합니다.
  # deny 규칙은 항상 allow 규칙을 무시합니다.
  deny: {}

역할 버전

Teleport 역할 리소스의 5, 6 및 7 버전은 Kubernetes 리소스에 접근할 때 서로 다른 동작을 보입니다.

Kubernetes 접근 권한을 부여하지 않는 역할은 세 가지 버전에서 동등합니다.

역할 v5 및 v6는 포드에 대한 작업(예: 실행)을 제한할 수만 있습니다.
역할 v7은 모든 일반 리소스 종류를 제한하는 것을 지원합니다(전체 목록은 kubernetes_resource 문서 참조).

kubernetes_resource 가 설정되어 있지 않을 때:

  • 역할 v5 및 v7은 기본적으로 모든 접근을 허용합니다.
  • 역할 v6은 기본적으로 포드 실행을 차단하며, 이는 사용자의 경험을 개선하기 위해 역할 v7에서 되돌려졌습니다.
허용 규칙역할 v5역할 v6역할 v7
kubernetes_groups: 
- "system:masters"
kubernetes_labels: {}
kubernetes_resources: []
❌ 접근 없음❌ 접근 없음❌ 접근 없음
kubernetes_groups: 
- "system:masters"
kubernetes_labels:
env: ["dev"]
kubernetes_resources: []
dev 클러스터에 대한 전체 접근❌ 포드에서 exec 할 수 없음
✅ 기타 리소스(예: secrets )에는 접근 가능
dev 클러스터에 대한 전체 접근
kubernetes_groups: 
- "system:masters"
kubernetes_labels:
env: ["dev"]
kubernetes_resources:
- name: "*"
kind: pod
namespace: "foo"
foo 에서 포드에 exec 가능
✅ 모든 네임스페이스의 secrets 에 접근 가능.
❌ 다른 네임스페이스에서 exec 할 수 없음
foo 에서 포드에 exec 가능
✅ 모든 네임스페이스의 secrets 에 접근 가능.
❌ 다른 네임스페이스에서 exec 할 수 없음
foo 에서 포드에 exec 가능
❌ 모든 네임스페이스의 secrets 에 접근 불가
❌ 다른 네임스페이스에서 exec 할 수 없음
kubernetes_groups: 
- "system:masters"
kubernetes_labels:
env: ["dev"]
kubernetes_resources:
- name: "*"
kind: pod
namespace: "foo"
- name: "*"
kind: secret
namespace: "foo"
⚠️ 지원되지 않음⚠️ 지원되지 않음foo 에서 포드에 exec 가능
foosecrets 에 접근 가능
❌ 다른 네임스페이스에서 exec 할 수 없음
❌ 다른 네임스페이스의 secrets 에 접근 불가
fooconfigmaps 에 접근 불가
kubernetes_groups: 
- "system:masters"
kubernetes_labels:
env: ["dev"]
kubernetes_resources:
- kind: "namespace"
name: "foo"
⚠️ 지원되지 않음⚠️ 지원되지 않음foo 네임스페이스에 대한 전체 접근
❌ 다른 네임스페이스 접근 불가

Windows 데스크톱

대부분의 경우, Teleport는 구성 파일의 정적 호스트 또는 LDAP 기반 검색을 통해 자동으로 windows_desktop 리소스를 등록합니다.

그러나 tctl 을 사용하여 windows_desktop 리소스를 수동으로 관리할 수도 있습니다. 이는 Active Directory 도메인에 가입되지 않은 호스트의 인벤토리를 관리하는 데 유용할 수 있습니다.

이러한 방식으로 데스크톱을 등록할 때 유의해야 할 몇 가지 중요한 사항이 있습니다:

  1. 데스크톱의 addr 은 호스트 이름 또는 IP 주소일 수 있으며, RDP 포트(일반적으로 3389)를 포함해야 합니다.
  2. 데스크톱의 host_id 는 호스트에 원격 데스크톱 연결을 프록시할 수 있는 windows_desktop_service 의 이름으로 설정해야 합니다. 그러한 서비스가 여러 개 있는 경우, 다른 host_id 값을 가진 여러 windows_desktop 리소스를 생성할 수 있습니다.
  3. 로컬 Windows 사용자로 데스크톱에 로그인할 의도가 있는 경우 non_ad: true 를 설정해야 합니다. Active Directory 사용자로 로그인할 의도가 있는 경우 non_ad 를 설정하지 않거나 false로 남겨 두고, domain 필드에 Active Directory 도메인을 지정해야 합니다.
kind: windows_desktop
metadata:
  name: desktop-without-ad
  labels:
    foo: bar
    baz: quux
spec:
  host_id: 307e091b-7f6b-42e0-b78d-3362ad10b55d
  addr: 192.168.1.153:3389
  domain: ""
  non_ad: true

  # 선택 사항 - 모든 세션이 동일한 화면 크기를 사용하도록 보장합니다,
  # 브라우저 창의 크기와 상관없이.
  # 브라우저 창의 크기를 사용하려면 비워 두십시오.
  screen_size:
    width: 1024
    height: 768
version: v3

로그인 규칙

로그인 규칙에는 로그인 시 SSO 사용자 특성을 변환하는 로직이 포함되어 있습니다.

kind: login_rule
version: v1
metadata:
  # name은 클러스터에서 Login Rule의 고유한 이름입니다.
  name: example

  # expires는 선택 사항이며 배포된 로그인 규칙에 대해서는 일반적으로 설정하지 않아야 하지만,
  # 새로운 로그인 규칙을 테스트할 때는 잠재적으로 클러스터에서 잠길 수 있는 것을 방지하기 위해 
  # 가까운 미래에 만료 시간을 설정하는 것이 유용할 수 있습니다.
  # expires: "2023-01-31T00:00:00-00:00"
spec:
  # priority는 클러스터 내에서 여러 로그인 규칙의 평가 순서를 정하는 데 사용될 수 있습니다.
  #
  # 숫자가 낮은 우선 순위를 가진 로그인 규칙이 먼저 적용되고,
  # 그 다음으로 증가하는 순서의 우선 순위를 가진 규칙이 적용됩니다. 동점일 경우,
  # 같은 우선 순위를 가진 로그인 규칙은 이름의 사전적 정렬에 의해 정렬됩니다.
  #
  # 기본 값은 0이며 지원되는 범위는 -2147483648에서 2147483647까지 입니다.
  # (포함).
  priority: 0

  # 설정된 경우, traits_map은 클러스터에 로그인하는 모든 사용자의 특성을 결정합니다.
  #
  # 이것은 키가 최종 특성 키가 되는 정적 문자열이어야 하며, 값은 각 문자열 집합으로 평가되어야 하는
  # 조건 표현식 목록입니다. 최종 특성은 해당 특성 키의 모든 조건 표현식으로부터 얻어진 문자열 집합의 합집합으로 설정됩니다.
  #
  # traits_map은 원하는 특성의 전체 세트를 포함해야 합니다. 여기에서 찾을 수 없는 외부 특성은 사용자의 인증서에 포함되지 않습니다.
  #
  # traits_map 또는 traits_expression 중 하나만 설정되어야 합니다.
  traits_map:
    groups:
      - external.groups
    logins:
      - strings.lower(external.username)

  # traits_expression은 단일 조건 표현식을 포함하는 문자열로, 
  # 사전을 평가해야 합니다. 로그인 중 모든 사용자의 특성을 설정합니다.
  #
  # traits_map 또는 traits_expression 중 하나만 설정되어야 합니다.
  traits_expression: |
    external.put("logins", strings.lower(external.logins))

데이터베이스 객체 가져오기 규칙

데이터베이스 객체 가져오기 규칙은 Teleport로 가져온 데이터베이스 객체에 적용될 레이블을 정의합니다.

자세한 내용은 데이터베이스 액세스 제어를 참조하십시오.

kind: db_object_import_rule
metadata:
  name: my_custom_rule
spec:
  # 우선 순위는 규칙의 중요도를 결정하며, 숫자가 낮을수록 우선 순위가 낮음을 나타냅니다.
  # 충돌의 경우, 두 규칙이 동일한 레이블을 적용할 때,
  # 더 높은 우선 순위를 가진 규칙에서 적용된 레이블이 승리합니다.
  priority: 123
  # database_labels는 이 규칙의 범위에 있는 데이터베이스 자원을 지정하는 필터입니다.
  database_labels:
  - name: 'env'
    values:
    - 'test'
    - 'staging'
  - name: 'dept'
    values:
    - '*'
  # 매핑의 각각은 일치할 경우 데이터베이스 객체에 적용되는 레이블 세트를 소개합니다.
  # 레이블이 없는 데이터베이스 객체는 가져오지 않습니다.
  mappings:
  - add_labels:
      # 다음 속성이 지원됩니다; 'obj'는 '데이터베이스 객체'를 나타냅니다.
      database: '{{obj.database}}'
      object_kind: '{{obj.object_kind}}'
      name: '{{obj.name}}'
      protocol: '{{obj.protocol}}'
      schema: '{{obj.schema}}'
      database_service_name: '{{obj.database_service_name}}'
      # 고정 문자열을 사용하거나 템플릿과 혼합할 수 있습니다.
      fixed: const_value
      template: 'foo-{{obj.name}}'
    # match는 가져올 객체를 추가합니다; 비어 있을 수 없습니다.
    match:
      # 모든 테이블 이름의 목록
      table_names:
      - 'fixed_table_name'
      - 'partial_wildcard_*'
    # scope는 가져오기의 범위를 줄입니다; 비어 있을 수 있습니다.
    scope:
      database_names:
        - Widget*
      schema_names:
        - public
        - secret
  # 추가 매핑은 여기에서 추가할 수 있습니다.
  - add_labels:
      confidential: true
    match:
      table_names:
      - '*'
    scope:
      schema_names:
        - secret
version: v1

장치

장치는 신뢰할 수 있는 장치를 식별하는 정보를 포함합니다.

kind: device
version: v1
metadata:
  # name is a unique random identifier for the device in the cluster.
  name: 5ff09619-527c-4a17-973f-cd9cd5c93990
spec:
  # asset_tag is a user controlled identifier for the device. This is usually a device serial number.
  asset_tag: HD6M74XNCK

  # collected_data is a list of data recently collected from the device.
  # Each list item is an object containing event and device metadata..
  collected_data:
    # collect_time is the device-recorded timestamp of when the data was collected.
  - collect_time: "2023-02-22T21:04:26.312862Z"

    # os_type is the operating system type of the device.
    os_type: macos

    # record_time is the Teleport-recorded timestamp of when the data was received.
    record_time: "2023-02-22T21:04:26.396471Z"

    # serial_number is the serial number of the device, usually matching the asset tag.
    serial_number: HD6M74XNCK

  # create_time is a timestamp of when the device was created and enrolled with Teleport.
  create_time: "2023-02-22T21:04:20.87721Z"

  # update_time is a timestamp of when the device was last updated.
  update_time: "2023-02-22T21:04:26.396471Z"

  # os_type is the operating system type of the device.
  # This must be one of "linux", "windows", or "macos".
  os_type: macos

  # credential is the device credential used by the device to authenticate with Teleport.
  credential:
    # id is the unique identifier of the credential.
    id: ebe41e2b-5dbb-40a0-82fb-cded7d3373dd

    # public_key_der is the base64-encoded DER-formatted public part of the asymmetric keypair used to verify authenticity.
    public_key_der: MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEhO73Q5+DWIg9nXFc/Nv38cI9iog9nnlwDmdtZXBtRNc6P0WajDG3cWn3NWttkHTKDSxywOOmupliKA8q1VxvfQ==
  
  # enroll_status is the current enrollment status of the device.
  # This must be one of "enrolled", "not_enrolled", or "unspecified".
  enroll_status: enrolled

UI 구성

프록시 서비스에 의해 제공되는 웹 UI에 대한 전역 구성 옵션입니다. 이 리소스는 기본으로 설정되지 않으며, 따라서 이 리소스가 설정되기 전에 tctl get ui 를 사용하면 오류가 발생합니다.

kind: ui_config
version: v1
metadata:
  name: ui-config
spec:
  # 터미널에서 스크롤백의 양입니다. 스크롤백은 초기 
  # 뷰포트를 넘어서 스크롤할 때 유지되는 행의 수입니다. 
  # 세션 기록 보기에는 적용되지 않습니다.
  scrollback_lines: 1000

  # 웹 UI 리소스 페이지에 어떤 리소스를 보여줄 것인지에 대한 설정입니다. 사용자가 
  # 접근할 수 있는 리소스와 사용자가 접근을 요청할 수 있는 리소스입니다. 기본적으로 두 유형이 
  # 포함됩니다. 사용자가 접근할 수 있는 리소스만 보려면 
  # 이 값을 "accessible_only"로 설정하십시오.
  show_resources: 'requestable'

VNet 구성

이 클러스터의 리소스에 대한 연결을 설정할 때 VNet이 사용해야 하는 클러스터별 옵션입니다.

자세한 내용은 VNet를 참조하십시오.

kind: vnet_config
version: v1
metadata:
  name: vnet-config
spec:
  # 리소스에 IP 주소를 할당할 때 사용할 범위입니다.
  # 최종 사용자 장치에 배포된 다른 소프트웨어와 충돌할 경우 변경할 수 있습니다.
  # 기본값은 "100.64.0.0/10"입니다.
  ipv4_cidr_range: "100.64.0.0/10"
  # VNet이 DNS 쿼리를 캡처해야 하는 추가 DNS 영역입니다.
  # TCP 앱이 custom public_addr를 사용하는 경우 설정합니다.
  # 상기 링크된 가이드에 따라 도메인에 DNS TXT 레코드를 설정해야 합니다.
  # 기본값은 비어 있습니다.
  custom_dns_zones:
    - suffix: company.test

클러스터 유지 관리 구성

자동 업데이트에 등록된 에이전트에 대한 전역 구성 옵션입니다.

kind: cluster_maintenance_config
spec:
  agent_upgrades:
    # 유지 관리 창의 시작 시간 (UTC).
    # 유지 관리 창은 1시간 동안 지속됩니다.
    utc_start_hour: 2
    # 유지 관리가 허용되는 주간
    # 가능한 값은:
    # - 짧은 이름: Sun, Mon, Tue, Wed, Thu, Fri, Sat
    # - 긴 이름: Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday
    weekdays:
      - Mon
      - Wed
      - Fri

클러스터 인증 기본 설정

인증을 위한 전역 클러스터 구성 옵션입니다.

metadata:
  name: cluster-auth-preference
spec:
  # 사용할 두 번째 요소의 유형을 설정합니다.
  # 가능한 값: "on", "otp" 및 "webauthn"
  # "on" 이 설정되면 모든 MFA 프로토콜이 지원됩니다.
  second_factor: "otp"

  # OIDC 또는 SAML 커넥터의 이름. 이 설정이 없으면 백엔드의 첫 번째 커넥터가 사용됩니다.
  connector_name: ""

  # webauthn 는 서버 측 웹 인증 지원에 대한 설정입니다.
  webauthn:
    # rp_id 는 신뢰하는 당사자의 ID입니다.
    # Teleport 설치의 도메인 이름으로 설정해야 합니다.
    #
    # 중요: rp_id는 클러스터 수명 동안 절대 변경되어서는 안 됩니다.
    # 이는 WebAuthn 장치의 등록 데이터에 기록되기 때문입니다. 만약
    # rp_id 가 변경되면 모든 기존 WebAuthn 키 등록이 무효가 되고
    # WebAuthn을 두 번째 요소로 사용하는 모든 사용자는
    # 다시 등록해야 합니다.
    rp_id: teleport.example.com
    # PEM 형식의 장치 인증 CA 허용 목록입니다.
    # 존재할 경우, 여기에서 지정된 인증서와 일치하는
    # 장치만 등록할 수 있습니다 (기존 등록은
    # 변경되지 않습니다).
    # `attestation_denied_cas` 와 함께 제공되면, 둘 다
    # 조건이 참이어야 등록이 허용됩니다 (장치
    # 반드시 허용된 CA와 일치해야 하고, 거부된 CA와는
    # 일치하지 않아야 합니다).
    # 기본적으로 모든 장치가 허용됩니다.
    attestation_allowed_cas: []
    # PEM 형식의 장치 인증 CA 거부 목록입니다.
    # 존재할 경우, 여기에서 지정된 인증서와 일치하지 않는
    # 장치만 등록할 수 있습니다 (기존 등록은
    # 변경되지 않습니다).
    attestation_denied_cas: []

  # 사용자 로그인 세션에 대해 세션별 MFA 또는 PIV 하드웨어 키 제한을 수행합니다.
  # 가능한 값: true, false, "hardware_key", "hardware_key_touch".
  # 기본값은 false입니다.
  require_session_mfa: false

  # 만료된 클라이언트 인증서로 연결된 연결을 끊을지 여부를 설정합니다.
  disconnect_expired_cert: false

  # 헤드리스 인증이 허용될지 여부를 설정합니다.
  # 헤드리스 인증은 WebAuthn을 요구합니다.
  # 웹 인증이 구성되면 기본값은 true입니다.
  allow_headless: false

  # 로컬 인증이 다른 어떤 인증 유형과 함께 활성화될지 여부를 설정합니다.
  allow_local_auth: true

  # 비밀번호 없는 인증이 허용될지 여부를 설정합니다.
  # Webauthn 이 작업에 필요합니다.
  allow_passwordless: false

  # 클러스터에 대한 오늘의 메시지를 설정합니다.
  message_of_the_day: ""

  # idp는 Teleport 내에서 IdP에 액세스하는 것과 관련된 옵션 세트입니다. Teleport Enterprise가 필요합니다.
  idp:
    # Teleport SAML IdP와 관련된 옵션입니다.
    saml:
      # Teleport SAML IdP에 대한 액세스를 활성화합니다.
      enabled: true

  # locking_mode는 클러스터 전체의 기본 잠금 모드입니다.
  # 가능한 값: "strict" 또는 "best_effort"
  locking_mode: best_effort

  # default_session_ttl은 이 클러스터에서 사용자에게 발급된 인증서의 기본 TTL(유효 시간)을 정의합니다.
  default_session_ttl: "12h"

  # 이 클러스터에서 사용할 인증 유형입니다.
  # 가능한 값: "local", "oidc", "saml" 및 "github"
  type: local

version: v2

봇 리소스는 머신 ID 봇 식별자 및 해당 접근 권한을 정의합니다.

자세한 내용은 머신 ID 구성 참조에서 확인하십시오.

kind: bot
version: v1
metadata:
  # name은 클러스터에서 봇을 식별하기 위한 고유 식별자입니다.
  name: robot
spec:
  # roles는 봇이 자격 증명을 생성할 수 있는 역할 목록입니다.
  roles:
  - editor
  # traits는 Bot 사용자에게 적용되는 특성을 제어합니다. 이러한 것은
  # 역할 템플릿 시스템에 제공되며, 새로운 역할을 생성하지 않고도 특정 Bot에
  # 특정 리소스에 대한 접근을 부여하는 데 사용할 수 있습니다.
  traits:
  - name: logins
    values:
    - root
Teleport 원문 보기