InfoGrab Docs

서버 액세스 제어

요약

Teleport의 역할 기반 접근 제어(RBAC) 시스템을 사용하여 Teleport에 연결된 Linux 서버에 대한 인증 권한을 세분화하여 설정할 수 있습니다. 정책의 예시로는, 서버 관리자는 모든 것에 접근할 수 있고, QA 팀과 엔지니어는 스테이징 서버에 대한 전체 접근 권한을 가지며, 엔지니어는 긴급 상황 시 프로덕션 서버에 대한 임시 접근 권한을 얻을 수 있다 와 같은 정책이 있습니다.

Teleport의 역할 기반 접근 제어(RBAC) 시스템을 사용하여 Teleport에 연결된 Linux 서버에 대한 인증 권한을 세분화하여 설정할 수 있습니다.

정책의 예시로는, 서버 관리자는 모든 것에 접근할 수 있고, QA 팀과 엔지니어는 스테이징 서버에 대한 전체 접근 권한을 가지며, 엔지니어는 긴급 상황 시 프로덕션 서버에 대한 임시 접근 권한을 얻을 수 있다 와 같은 정책이 있습니다.

Teleport 역할에 대한 일반적인 설명과 예시는 액세스 제어 가이드를 참조하세요. 이 섹션은 Teleport에 연결된 서버에 대한 RBAC 구성에 초점을 맞춥니다.

역할 구성#

Teleport의 "role" 리소스는 서버 액세스를 제한하기 위한 다음과 같은 수단을 제공합니다:

kind: role
version: v5
metadata:
  name: developer
spec:
  allow:
    # logins 배열은 사용자가 사용할 수 있는 OS/UNIX 로그인을 정의합니다.
    # 이 필드에서는 문자열과 템플릿 변수 모두 지원됩니다
    logins: [ubuntu, debian, '{{internal.logins}}']

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

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

    # 사용자를 sudoers 그룹에 할당합니다
    host_sudoers:
    - 'ALL=(ALL) NOPASSWD: ALL'

    # root 사용자에 대한 접근 거부
  deny:
    logins:
    - root
거부 규칙

거부 규칙은 탐욕적으로 매칭됩니다. 위의 예시에서 "root" 서버 사용자 계정을 사용하려는 서버 세션은 거부됩니다.

템플릿 변수#

Teleport에서 다른 리소스에 접근하기 위한 역할 필드와 유사하게, 서버 관련 필드도 템플릿 변수를 지원합니다.

{{external.xyz}} 형식의 변수는 외부 SSO 공급자의 값으로 대체됩니다. OIDC 로그인의 경우 {{external.xyz}}는 "xyz" 클레임을 참조하고, SAML 로그인의 경우 {{external.xyz}}는 "xyz" 어설션을 참조합니다.

예를 들어, 사용자의 Okta environmentsallowedlogins 어설션에서 허용된 서버 환경 유형과 허용된 로그인을 할당하려는 경우 역할이 다음과 같이 보일 수 있습니다:

spec:
  allow:
    node_labels:
    - env:  '{{external.environments}}'
    logins:
    - '{{external.allowedlogins}}'

{{internal.logins}} 변수는 로컬 사용자에게 적용되며 Teleport 신뢰할 수 있는 클러스터(trusted clusters)와 함께 작동합니다. 신뢰할 수 있는 클러스터를 통해 루트 Teleport 클러스터에서 다른 Teleport 클러스터에 연결된 리소스로 연결할 수 있습니다. 리프 클러스터로 식별되는 해당 Teleport 클러스터는 루트 Teleport 클러스터를 신뢰함으로써 연결을 허용합니다.

예를 들어, 루트 클러스터의 사용자가 다음과 같은 역할을 가지고 있다고 가정합니다. 로컬 사용자로서 jeff라는 logins 트레이트를 가질 수 있으므로 jeffubuntu 두 가지 로그인을 갖습니다.

spec:
  allow:
    logins: ['{{internal.logins}}', ubuntu]

리프 클러스터의 역할은 사용자의 허용된 서버 계정과 이름을 사용하도록 설정할 수 있습니다. {{internal.logins}} 템플릿 변수를 사용하면 리프 클러스터는 루트 클러스터에서 허용된 동일한 로그인을 포함합니다.

spec:
  allow:
    logins: ["{{internal.logins}}"]

Teleport 역할에서 변수 확장이 작동하는 방식에 대한 자세한 내용은 액세스 제어 레퍼런스를 참조하세요.

서버 역할 옵션#

위에서 설명한 allowdeny 섹션은 허용된 서버와 로그인을 제어하는 데 사용됩니다. 역할 옵션은 지정된 역할을 가진 사용자가 사용할 수 있는 Teleport 기능을 제공합니다. 이러한 옵션은 서버 액세스에 적용됩니다.

spec:
  allow:
    #....
  options:
    # 자동으로 프로비저닝된 SSH 사용자의 기본 셸을 설정합니다. 셸의 절대 경로 또는
    # 시스템 PATH를 통해 접근 가능한 이름 모두 유효한 값입니다. create_host_user_mode가
    # off로 설정되지 않은 경우에만 적용됩니다.
    create_host_user_default_shell: bash
    # 이 역할이 사용자 자동 프로비저닝을 지원하는지 여부를 제어합니다.
    # 옵션: keep (세션 종료 시 사용자 유지), insecure-drop (세션 종료 시 사용자 제거),
    #       off (호스트 사용자 생성 비활성화)
    create_host_user_mode: keep
    # forward_agent는 SSH 에이전트 포워딩 허용 여부를 제어합니다
    forward_agent: true
    # ssh_port_forwarding은 SSH를 통해 허용되는 TCP 포트 포워딩 모드를 제어합니다. 이는
    # 원격 및 로컬 포트 포워딩 모드를 구분하지 않았던 더 이상 사용되지 않는 port_forwarding
    # 필드를 대체합니다. 레거시 port_forwarding 필드를 활성화하여 포워딩을 허용하는 기존
    # 역할이 있는 경우 ssh_port_forwarding에 구성된 포워딩 제어가 무시됩니다.
    ssh_port_forwarding:
      # 원격 포트 포워딩 동작을 구성합니다
      remote:
        enabled: true
      # 로컬 포트 포워딩 동작을 구성합니다
      local:
        enabled: 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: false
    # max_sessions는 단일 연결을 통해 설정할 수 있는 세션 채널의 총 수입니다.
    # 10으로 설정하면 OpenSSH 기본 동작과 일치합니다.
    max_sessions: 10
    # BPF 기반 세션 레코더가 기록하는 이벤트를 정의합니다.
    enhanced_recording:
    - command
    - disk
    - network
    # permit_x11_forwarding은 사용자가 프록시를 통해 openssh 클라이언트 및
    # 서버에서 X11 포워딩을 사용할 수 있도록 허용합니다
    permit_x11_forwarding: true
    # Enterprise 전용 max_connections 필드는 클러스터 내 동시 세션 수에 제한을 설정합니다.
    # 이 설정은 클러스터 전체에서 연결을 추적해야 하므로 Teleport 성능을 저하시킵니다.
    max_connections: 2
    # 디스크 가득 참 오류와 같은 세션 녹화 실패를 Teleport가 처리하는 방법을 정의합니다.
    # 값은 `best_effort` 또는 `strict`로 설정할 수 있습니다. `strict`로 설정하면
    # 세션이 즉시 종료됩니다. `best_effort`로 설정하면 세션이 종료되지 않고 녹화가
    # 비활성화됩니다. 구성은 서비스별로 수행됩니다(현재는 `ssh`만 지원).
    record_session:
      # 선택 사항: 프로토콜별 모드가 설정되지 않은 경우 사용할 기본 세션 녹화 모드.
      default: best_effort|strict
      # 선택 사항: SSH 세션에 대한 세션 녹화 모드.
      # 설정하지 않으면 default에 설정된 값이 사용됩니다.
      ssh: best_effort|strict
    # 새 세션을 시작하려면 추가 MFA 탭이 필요합니다.
    # 선택 사항: 기본값은 false입니다.
    require_session_mfa: true
    # Enterprise 전용: 활성화하면 로그인에 사용된 소스 IP가 사용자 인증서에 포함되어
    # 손상된 인증서가 다른 네트워크에서 사용되는 것을 방지합니다.
    # 기본값은 false입니다.
    pin_source_ip: true
    # 사용자 SSH 키에 포함될 이름 및 관련 값 목록을 지정합니다.
    # 키 유형은 "ssh"만 가능하고 모드는 "extension"만 가능합니다.
    # name 및 value 필드는 임의의 문자열이 될 수 있으며 value 필드는
    # 변수 보간을 지원합니다.
    cert_extensions:
     - type: ssh
       mode: extension
       name: login@github.com
       value: "{{ external.github_login }}"

서버 액세스 제어

원문 보기
요약

Teleport의 역할 기반 접근 제어(RBAC) 시스템을 사용하여 Teleport에 연결된 Linux 서버에 대한 인증 권한을 세분화하여 설정할 수 있습니다. 정책의 예시로는, 서버 관리자는 모든 것에 접근할 수 있고, QA 팀과 엔지니어는 스테이징 서버에 대한 전체 접근 권한을 가지며, 엔지니어는 긴급 상황 시 프로덕션 서버에 대한 임시 접근 권한을 얻을 수 있다 와 같은 정책이 있습니다.

Teleport의 역할 기반 접근 제어(RBAC) 시스템을 사용하여 Teleport에 연결된 Linux 서버에 대한 인증 권한을 세분화하여 설정할 수 있습니다.

정책의 예시로는, 서버 관리자는 모든 것에 접근할 수 있고, QA 팀과 엔지니어는 스테이징 서버에 대한 전체 접근 권한을 가지며, 엔지니어는 긴급 상황 시 프로덕션 서버에 대한 임시 접근 권한을 얻을 수 있다 와 같은 정책이 있습니다.

Teleport 역할에 대한 일반적인 설명과 예시는 액세스 제어 가이드를 참조하세요. 이 섹션은 Teleport에 연결된 서버에 대한 RBAC 구성에 초점을 맞춥니다.

역할 구성#

Teleport의 "role" 리소스는 서버 액세스를 제한하기 위한 다음과 같은 수단을 제공합니다:

kind: role
version: v5
metadata:
  name: developer
spec:
  allow:
    # logins 배열은 사용자가 사용할 수 있는 OS/UNIX 로그인을 정의합니다.
    # 이 필드에서는 문자열과 템플릿 변수 모두 지원됩니다
    logins: [ubuntu, debian, '{{internal.logins}}']

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

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

    # 사용자를 sudoers 그룹에 할당합니다
    host_sudoers:
    - 'ALL=(ALL) NOPASSWD: ALL'

    # root 사용자에 대한 접근 거부
  deny:
    logins:
    - root
거부 규칙

거부 규칙은 탐욕적으로 매칭됩니다. 위의 예시에서 "root" 서버 사용자 계정을 사용하려는 서버 세션은 거부됩니다.

템플릿 변수#

Teleport에서 다른 리소스에 접근하기 위한 역할 필드와 유사하게, 서버 관련 필드도 템플릿 변수를 지원합니다.

{{external.xyz}} 형식의 변수는 외부 SSO 공급자의 값으로 대체됩니다. OIDC 로그인의 경우 {{external.xyz}}는 "xyz" 클레임을 참조하고, SAML 로그인의 경우 {{external.xyz}}는 "xyz" 어설션을 참조합니다.

예를 들어, 사용자의 Okta environmentsallowedlogins 어설션에서 허용된 서버 환경 유형과 허용된 로그인을 할당하려는 경우 역할이 다음과 같이 보일 수 있습니다:

spec:
  allow:
    node_labels:
    - env:  '{{external.environments}}'
    logins:
    - '{{external.allowedlogins}}'

{{internal.logins}} 변수는 로컬 사용자에게 적용되며 Teleport 신뢰할 수 있는 클러스터(trusted clusters)와 함께 작동합니다. 신뢰할 수 있는 클러스터를 통해 루트 Teleport 클러스터에서 다른 Teleport 클러스터에 연결된 리소스로 연결할 수 있습니다. 리프 클러스터로 식별되는 해당 Teleport 클러스터는 루트 Teleport 클러스터를 신뢰함으로써 연결을 허용합니다.

예를 들어, 루트 클러스터의 사용자가 다음과 같은 역할을 가지고 있다고 가정합니다. 로컬 사용자로서 jeff라는 logins 트레이트를 가질 수 있으므로 jeffubuntu 두 가지 로그인을 갖습니다.

spec:
  allow:
    logins: ['{{internal.logins}}', ubuntu]

리프 클러스터의 역할은 사용자의 허용된 서버 계정과 이름을 사용하도록 설정할 수 있습니다. {{internal.logins}} 템플릿 변수를 사용하면 리프 클러스터는 루트 클러스터에서 허용된 동일한 로그인을 포함합니다.

spec:
  allow:
    logins: ["{{internal.logins}}"]

Teleport 역할에서 변수 확장이 작동하는 방식에 대한 자세한 내용은 액세스 제어 레퍼런스를 참조하세요.

서버 역할 옵션#

위에서 설명한 allowdeny 섹션은 허용된 서버와 로그인을 제어하는 데 사용됩니다. 역할 옵션은 지정된 역할을 가진 사용자가 사용할 수 있는 Teleport 기능을 제공합니다. 이러한 옵션은 서버 액세스에 적용됩니다.

spec:
  allow:
    #....
  options:
    # 자동으로 프로비저닝된 SSH 사용자의 기본 셸을 설정합니다. 셸의 절대 경로 또는
    # 시스템 PATH를 통해 접근 가능한 이름 모두 유효한 값입니다. create_host_user_mode가
    # off로 설정되지 않은 경우에만 적용됩니다.
    create_host_user_default_shell: bash
    # 이 역할이 사용자 자동 프로비저닝을 지원하는지 여부를 제어합니다.
    # 옵션: keep (세션 종료 시 사용자 유지), insecure-drop (세션 종료 시 사용자 제거),
    #       off (호스트 사용자 생성 비활성화)
    create_host_user_mode: keep
    # forward_agent는 SSH 에이전트 포워딩 허용 여부를 제어합니다
    forward_agent: true
    # ssh_port_forwarding은 SSH를 통해 허용되는 TCP 포트 포워딩 모드를 제어합니다. 이는
    # 원격 및 로컬 포트 포워딩 모드를 구분하지 않았던 더 이상 사용되지 않는 port_forwarding
    # 필드를 대체합니다. 레거시 port_forwarding 필드를 활성화하여 포워딩을 허용하는 기존
    # 역할이 있는 경우 ssh_port_forwarding에 구성된 포워딩 제어가 무시됩니다.
    ssh_port_forwarding:
      # 원격 포트 포워딩 동작을 구성합니다
      remote:
        enabled: true
      # 로컬 포트 포워딩 동작을 구성합니다
      local:
        enabled: 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: false
    # max_sessions는 단일 연결을 통해 설정할 수 있는 세션 채널의 총 수입니다.
    # 10으로 설정하면 OpenSSH 기본 동작과 일치합니다.
    max_sessions: 10
    # BPF 기반 세션 레코더가 기록하는 이벤트를 정의합니다.
    enhanced_recording:
    - command
    - disk
    - network
    # permit_x11_forwarding은 사용자가 프록시를 통해 openssh 클라이언트 및
    # 서버에서 X11 포워딩을 사용할 수 있도록 허용합니다
    permit_x11_forwarding: true
    # Enterprise 전용 max_connections 필드는 클러스터 내 동시 세션 수에 제한을 설정합니다.
    # 이 설정은 클러스터 전체에서 연결을 추적해야 하므로 Teleport 성능을 저하시킵니다.
    max_connections: 2
    # 디스크 가득 참 오류와 같은 세션 녹화 실패를 Teleport가 처리하는 방법을 정의합니다.
    # 값은 `best_effort` 또는 `strict`로 설정할 수 있습니다. `strict`로 설정하면
    # 세션이 즉시 종료됩니다. `best_effort`로 설정하면 세션이 종료되지 않고 녹화가
    # 비활성화됩니다. 구성은 서비스별로 수행됩니다(현재는 `ssh`만 지원).
    record_session:
      # 선택 사항: 프로토콜별 모드가 설정되지 않은 경우 사용할 기본 세션 녹화 모드.
      default: best_effort|strict
      # 선택 사항: SSH 세션에 대한 세션 녹화 모드.
      # 설정하지 않으면 default에 설정된 값이 사용됩니다.
      ssh: best_effort|strict
    # 새 세션을 시작하려면 추가 MFA 탭이 필요합니다.
    # 선택 사항: 기본값은 false입니다.
    require_session_mfa: true
    # Enterprise 전용: 활성화하면 로그인에 사용된 소스 IP가 사용자 인증서에 포함되어
    # 손상된 인증서가 다른 네트워크에서 사용되는 것을 방지합니다.
    # 기본값은 false입니다.
    pin_source_ip: true
    # 사용자 SSH 키에 포함될 이름 및 관련 값 목록을 지정합니다.
    # 키 유형은 "ssh"만 가능하고 모드는 "extension"만 가능합니다.
    # name 및 value 필드는 임의의 문자열이 될 수 있으며 value 필드는
    # 변수 보간을 지원합니다.
    cert_extensions:
     - type: ssh
       mode: extension
       name: login@github.com
       value: "{{ external.github_login }}"