Infograb logo
텔레포트 리소스

이 참조 가이드는 텔레포트를 사용하여 관리할 수 있는 동적 리소스를 나열합니다. 동적 리소스에 대한 자세한 내용은 동적 리소스 사용 가이드를 참조하세요.

tctl을 사용한 동적 리소스 적용 예시:

모든 커넥터 목록 보기:

tctl get connectors

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

tctl get saml/okta

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

tctl rm saml/okta

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

tctl rm oidc/gworkspace

"myteam"이라는 깃허브 커넥터 삭제:

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 명령어는 모든 커넥터를 보여주지만, 개별 커넥터 작업 시에는 반드시 올바른 kind(예: saml 또는 oidc)를 사용해야 합니다. tctl get connectors의 YAML 출력 상단에서 각 커넥터의 kind를 확인할 수 있습니다.

동적 리소스 목록

현재 tctl를 통해 노출된 리소스 목록은 다음과 같습니다:

리소스 종류설명
user내부 텔레포트 사용자 데이터베이스의 사용자 기록입니다.
role대화형 및 비대화형 사용자(봇)가 맡는 역할입니다.
connectorSAML, OIDC 및 GitHub에 대한 싱글 사인온(SSO) 인증 연결기입니다.
node등록된 SSH 노드입니다. 동일한 기록이 tctl nodes ls를 통해 표시됩니다.
windows_desktop등록된 윈도우 데스크톱입니다.
cluster신뢰할 수 있는 클러스터입니다. 클러스터를 연결하는 데 대한 자세한 내용은 여기를 참조하세요.
login_rule로그인 규칙입니다. 자세한 정보는 로그인 규칙 가이드를 참조하세요.
device텔레포트 신뢰할 수 있는 장치입니다. 자세한 정보는 장치 신뢰 가이드를 참조하세요.
ui_config프록시 서비스에서 제공하는 웹 UI의 구성입니다.
vnet_config클러스터의 VNet 옵션 구성입니다.
cluster_auth_preference클러스터의 인증 기본 설정 구성입니다.
database_object_import_rule데이터베이스 객체 가져오기 규칙입니다.

사용자

텔레포트는 대화형 로컬 사용자, 비대화형 로컬 사용자(봇) 및 리소스로 표현되는 싱글 사인온 사용자를 지원합니다.

kind: user
version: v2
metadata:
  name: joe
spec:
  # roles는 이 사용자에게 할당된 역할 목록입니다.
  roles:
  - admin
  # status는 텔레포트 시스템에서 사용자를 일시적으로 잠급니다.
  # 예를 들어 사용자가 미리 정의된 실패 로그인 시도 횟수를 초과할 때입니다.
  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 클러스터, 웹 서비스 및 애플리케이션, 윈도우 데스크톱에 대한 접근을 관리합니다.

kind: role
version: v7
metadata:
  name: example
  description: This is an example role.
spec:
  # 옵션은 연결을 지정하며, 사용자가 여러 개의 비기본
  # 충돌 옵션을 가지고 있을 경우, teleport는 가장 제한적인 값을 선택합니다.
  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 검증 사이에 경과할 수 있는 최대 기간을 정의합니다.
    # 이 변수는 사용자가 주기적으로 자신의 신원을 확인하도록 유도하여
    # 장기적인 재인증 없이는 만료되는 세션을 방지하여 보안을 강화하는 데 사용됩니다.
    mfa_verification_interval: 1h
    # lock은 이 역할의 사용자에 대한 잠금 모드를 설정합니다.
    # 유효한 값은 'strict' 또는 'best_effort'입니다.
    lock: strict
    # 기업 전용 request_access 필드는 'optional', 'always' 또는 'reason'입니다. 항상 또는 reason으로 설정할 경우,
    # tsh 또는 웹 UI 클라이언트에 각각 Access Request를 항상 생성하도록 지시합니다. 'reason'로 설정할 경우,
    # 사용자는 Access Request를 생성하는 이유를 표시해야 합니다.
    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(Auth Service)에서 'off'로 설정된 경우 
      # 또는 클러스터의 session_recording_config 리소스가 'mode: off'로 설정된 경우
      # 데스크톱 세션은 결코 기록되지 않습니다.
      desktop: true
      # 선택 사항: 프로토콜별 모드가 설정되지 않은 경우 사용할 기본 세션 기록 모드입니다.
      default: best_effort|strict
      # 선택 사항: SSH 세션의 세션 기록 모드입니다(Телепорт 서버 접근).
      # 설정되지 않은 경우, 기본값에 설정된 값이 사용됩니다.
      ssh: best_effort|strict
    # 원격 데스크톱과의 클립보드 공유가 허용되는지를 지정합니다.
    # 기본값은 지정되지 않았을 경우 true입니다. 
    # 사용자의 역할 중 하나라도 클립보드를 비활성화하면 비활성화됩니다.
    desktop_clipboard: 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
    # 이 역할이 자동 데이터베이스 사용자 프로비저닝을 요구하는지를 제어합니다.
    # 옵션: 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']
      # 정규 표현식은 ^로 시작하고 $로 끝납니다.
      # Teleport는 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`를 실행할 수 있도록 허용합니다.
      "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-*'
      # 정규 표현식은 ^로 시작하고 $로 끝납니다.
      # Teleport는 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:
        # 리소스 종류. Teleport는 현재 지원하는 종류:
        # - * (모든 리소스)
        # - 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-]+$'
        # 사용자가 리소스에서 수행할 수 있는 동사입니다.
        # Teleport는 현재 지원하는 동사:
        # - * (모든 동사)
        # - 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-*'
      # 정규 표현식은 ^로 시작하고 $로 끝납니다.
      # Teleport는 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 콘솔에 
    # UI를 사용하거나 CLI를 사용하여 AWS API에 접근할 때 AWS 역할을 맡을 수 있도록 허용합니다.
    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'

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

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

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

      # 'search_as_roles'는 사용자가 접근할 수 있는 리소스를 검색하고 요청할 수 있게 허용합니다.
      # (기업 전용)
      search_as_roles: ['access']

      # 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 커넥터와 동일하게 작동하며,
      # 매핑되는 역할이 또한 매처일 수 있다는 추가 이점이 있습니다.
      #
      # 이 예시는 Teleport의 정규 표현식 지원을 활용하여,
      # 클레임에서 동적 매핑을 가능하게 합니다. 아래 매핑은 사용자가 
      # 'projects: product-(.*)'에 해당하는 클레임을 가질 경우,
      # '$1-admin'과 매칭되는 역할을 요청할 수 있게 합니다.
      # 예: 'projects: product-foo' 클레임은 사용자가 
      # 'foo-admin' 역할을 요청할 수 있게 합니다.
      claims_to_roles:
        - claim: 'projects'
          # 접두사가 'product-'인 모든 그룹 이름과 일치합니다.
          value: '^product-(.*)$'
          # 값 캡처에서 역할 이름을 생성합니다.
          roles: ['$1-admin']

      # Teleport는 보류 중인 Access Requests에 주석을 첨부할 수 있습니다. 
      # 이러한 주석은 리터럴이거나 변수 보간 표현일 수 있으며,
      # 효과적으로 선택된 클레임을 외부 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"
        # 사용자 요청 시 SVID에 포함될 IP SAN입니다.
        # 이 필드는 선택 사항이며 생략할 경우,
        # 사용자가 IP SAN이 포함된 SVID를 요청할 수 없습니다.
        ip_sans: ["10.0.0.100/32"]
        # 사용자 요청 시 SVID에 포함될 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           - Teleport 인스턴스
    # event              - 구조적 감사 로깅 이벤트
    #
    #
    # lock                  - 잠금 리소스.
    # network_restrictions  - SSH 세션에 대한 제한
    #
    # auth_server           - Auth 서비스 리소스
    # 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: {}

역할 버전

텔레포트 역할 리소스의 버전 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 클러스터에 대한 전체 접근❌ 포드 내에서 실행 불가
✅ 다른 리소스(secrets 등)에 대한 접근 가능
dev 클러스터에 대한 전체 접근
kubernetes_groups: 
- "system:masters"
kubernetes_labels:
env: ["dev"]
kubernetes_resources:
- name: "*"
kind: pod
namespace: "foo"
foo 내 포드 실행 가능
✅ 모든 네임스페이스의 secrets 접근 가능.
❌ 다른 네임스페이스에서 실행 불가
foo 내 포드 실행 가능
✅ 모든 네임스페이스의 secrets 접근 가능.
❌ 다른 네임스페이스에서 실행 불가
foo 내 포드 실행 가능
❌ 모든 네임스페이스의 secrets에 접근 불가
❌ 다른 네임스페이스에서 실행 불가
kubernetes_groups: 
- "system:masters"
kubernetes_labels:
env: ["dev"]
kubernetes_resources:
- name: "*"
kind: pod
namespace: "foo"
- name: "*"
kind: secret
namespace: "foo"
⚠️ 지원되지 않음⚠️ 지원되지 않음foo 내 포드 실행 가능
foosecrets 접근 가능
❌ 다른 네임스페이스에서 실행 불가
❌ 다른 네임스페이스의 secrets 접근 불가
fooconfigmaps 접근 불가
kubernetes_groups: 
- "system:masters"
kubernetes_labels:
env: ["dev"]
kubernetes_resources:
- kind: "namespace"
name: "foo"
⚠️ 지원되지 않음⚠️ 지원되지 않음foo 네임스페이스 내 전체 접근 가능
❌ 다른 네임스페이스 접근 불가

윈도우 데스크톱

대부분의 경우, 텔레포트는 구성 파일의 정적 호스트 또는 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) Active Directory 도메인을 domain 필드에 지정하세요.
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은 클러스터 내에서 로그인 규칙의 고유 이름입니다.
  name: example

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

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

  # traits_expression은 단일 프레디케이트 표현식을 보유하는 문자열로, 이는 dict로 평가되어야 합니다.
  # 이것은 로그인 중 모든 사용자의 특성을 설정합니다.
  #
  # traits_map 또는 traits_expression 중 하나는 반드시 설정되어야 합니다.
  traits_expression: |
    external.put("logins", strings.lower(external.logins))

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

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

자세한 내용은 데이터베이스 접근 제어를 참조하세요.

kind: db_object_import_rule
metadata:
  name: my_custom_rule
spec:
  # Priority determines how important the rule is, with lower number indicating lower priority.
  # In case of conflicts, when the same label is applied by two rules,
  # the label applied by rule with higher priority wins.
  priority: 123
  # database_labels is a filter specifying which database resources are in scope of this rule.
  database_labels:
  - name: 'env'
    values:
    - 'test'
    - 'staging'
  - name: 'dept'
    values:
    - '*'
  # Each mapping, if matched, introduces a set of labels applied to database object.
  # Database objects without labels are not imported.
  mappings:
  - add_labels:
      # the following properties are supported; 'obj' stands for 'database object'.
      database: '{{obj.database}}'
      object_kind: '{{obj.object_kind}}'
      name: '{{obj.name}}'
      protocol: '{{obj.protocol}}'
      schema: '{{obj.schema}}'
      database_service_name: '{{obj.database_service_name}}'
      # you may use fixed strings or mix with templates
      fixed: const_value
      template: 'foo-{{obj.name}}'
    # match adds objects to be imported; it cannot be empty.
    match:
      # list of all table names
      table_names:
      - 'fixed_table_name'
      - 'partial_wildcard_*'
    # scope reduces scope of import; it may be empty.
    scope:
      database_names:
        - Widget*
      schema_names:
        - public
        - secret
  # Additional mappings can be added here.
  - add_labels:
      confidential: true
    match:
      table_names:
      - '*'
    scope:
      schema_names:
        - secret
version: v1

장치

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

kind: device
version: v1
metadata:
  # name은 클러스터에서 장치에 대한 고유한 무작위 식별자입니다.
  name: 5ff09619-527c-4a17-973f-cd9cd5c93990
spec:
  # asset_tag는 사용자가 제어하는 장치에 대한 식별자입니다. 이는 일반적으로 장치 일련 번호입니다.
  asset_tag: HD6M74XNCK

  # collected_data는 장치에서 최근 수집된 데이터의 목록입니다.
  # 각 목록 항목은 이벤트 및 장치 메타데이터를 포함하는 객체입니다.
  collected_data:
    # collect_time은 데이터가 수집된 시점의 장치 기록 타임스탬프입니다.
  - collect_time: "2023-02-22T21:04:26.312862Z"

    # os_type은 장치의 운영 체제 유형입니다.
    os_type: macos

    # record_time은 데이터가 수신된 시점의 Teleport 기록 타임스탬프입니다.
    record_time: "2023-02-22T21:04:26.396471Z"

    # serial_number는 장치의 일련 번호이며, 일반적으로 asset_tag와 일치합니다.
    serial_number: HD6M74XNCK

  # create_time은 장치가 생성되어 Teleport에 등록된 시점의 타임스탬프입니다.
  create_time: "2023-02-22T21:04:20.87721Z"

  # update_time은 장치가 마지막으로 업데이트된 시점의 타임스탬프입니다.
  update_time: "2023-02-22T21:04:26.396471Z"

  # os_type은 장치의 운영 체제 유형입니다.
  # 이는 "linux", "windows" 또는 "macos" 중 하나여야 합니다.
  os_type: macos

  # credential은 장치가 Teleport에 인증하기 위해 사용하는 장치 자격 증명입니다.
  credential:
    # id는 자격 증명의 고유 식별자입니다.
    id: ebe41e2b-5dbb-40a0-82fb-cded7d3373dd

    # public_key_der는 진위를 검증하는 데 사용되는 비대칭 키 쌍의 base64 인코딩된 DER 형식의 공개 키 부분입니다.
    public_key_der: MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEhO73Q5+DWIg9nXFc/Nv38cI9iog9nnlwDmdtZXBtRNc6P0WajDG3cWn3NWttkHTKDSxywOOmupliKA8q1VxvfQ==
  
  # enroll_status는 장치의 현재 등록 상태입니다.
  # 이는 "enrolled", "not_enrolled" 또는 "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: 클러스터_유지보수_구성
spec:
  agent_upgrades:
    # 유지보수 창 시작 시간 (UTC).
    # 유지보수 창은 1시간 지속됩니다.
    utc_start_hour: 2
    # 유지보수가 허용되는 요일
    # 가능한 값은:
    # - 짧은 이름: Sun, Mon, Tue, Wed, Thu, Fri, Sat
    # - 긴 이름: Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday
    weekdays:
      - 월요일
      - 수요일
      - 금요일

클러스터 인증 기본 설정

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

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

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

  # webauthn은 서버 측 Web 인증 지원에 대한 설정입니다.
  webauthn:
    # rp_id는 Relying Party의 ID입니다.
    # 텔레포트 설치의 도메인 이름으로 설정해야 합니다.
    #
    # 중요: 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을 필요로 합니다.
  # webauthn이 구성된 경우 기본값은 true입니다.
  allow_headless: false

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

  # 비밀번호 없는 인증이 허용될지 설정합니다.
  # 작동하려면 Webauthn이 필요합니다.
  allow_passwordless: false

  # 클러스터의 하루 메시지를 설정합니다.
  message_of_the_day: ""

  # idp는 텔레포트 내에서 IdPs에 접근하는 것과 관련된 옵션 집합입니다. 텔레포트 엔터프라이즈가 필요합니다.
  idp:
    # 텔레포트 SAML IdP에 대한 접근을 활성화합니다.
    saml:
      # 텔레포트 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: 
version: v1
metadata:
  # 이름은 클러스터에서 봇의 고유 식별자입니다.
  name: 로봇
spec:
  # 역할은 봇이 자격 증명을 생성할 수 있는 역할 목록입니다.
  roles:
  - 편집자
  # 특성은 봇 사용자에게 적용되는 특성을 제어합니다. 이러한 특성은 
  # 역할 템플릿 시스템에 제공되며, 새로운 역할을 생성하지 않고
  # 특정 봇에 특정 리소스에 대한 액세스를 부여하는 데 사용할 수 있습니다.
  traits:
  - name: 로그인
    values:
    - 루트
Teleport 원문 보기