Infograb logo
데스크톱을 위한 역할 기반 액세스 제어

Teleport의 RBAC는 관리자가 Teleport에 연결된 Windows 데스크톱에 대한 세분화된 액세스 정책을 설정할 수 있게 해줍니다.

Teleport의 role 리소스는 데스크톱 액세스를 제어하기 위한 다음 옵션을 제공합니다:

kind: role
version: v5
metadata:
  name: developer
spec:
  options:
    # 사용자의 데스크톱 세션을 기록할지 여부를 지정합니다.
    # 사용자의 역할 중 하나 이상이 기록을 활성화하면 데스크톱 세션 기록이 활성화됩니다.
    # 명시되지 않으면 기본값은 true입니다.
    # 클러스터의 session_recording_config 리소스가 'mode: off'로 설정된 경우,
    # 또는 teleport.yaml에서 auth_service.session_recording이 'off'로 설정된 경우,
    # 데스크톱 세션은 결코 기록되지 않습니다.
    record_session:
      desktop: true

    # 원격 데스크톱과 함께 클립보드 공유가 허용되어야 하는지 여부를 지정합니다.
    # (지원되는 브라우저가 필요함). 명시되지 않으면 기본값은 true입니다.
    # 사용자의 역할 중 하나 이상이 클립보드를 비활성화하면 비활성화됩니다.
    desktop_clipboard: true

    # 로컬 머신에서 원격 데스크톱으로의 디렉토리 공유가 허용되어야 하는지 여부를 지정합니다.
    # (지원되는 브라우저가 필요함). 명시되지 않으면 기본값은 true입니다.
    # 사용자의 역할 중 하나 이상이 디렉토리 공유를 비활성화하면 비활성화됩니다.
    desktop_directory_sharing: true

    # 연결 시 로컬 사용자가 자동으로 생성되어야 하는지 여부를 지정합니다.
    # 기본적으로 이 기능은 비활성화되어 있으며, 사용자는 이미 존재해야 합니다.
    # 참고: 이는 로컬 사용자에게만 해당되며 Active Directory 환경에서는 지원되지 않습니다.
    create_desktop_user: true
  allow:
    # 이 역할이 액세스할 수 있는 데스크톱에 대한 레이블 선택기.
    windows_desktop_labels:
      environment: ["dev", "stage"]

    # 이 역할이 연결할 수 있는 Windows 사용자 계정.
    windows_desktop_logins: ["Administrator", "{{internal.windows_logins}}"]
Active Directory 구성

Teleport의 RBAC 시스템은 적절한 Active Directory 관리의 대체 수단이 아닙니다. Teleport가 발급한 Windows 인증서는 짧은 시간 동안 유효하지만 전체 도메인에 적용됩니다. 각 Teleport 사용자의 역할이 필요한 Windows 로그인만 반영하도록 적절한 주의가 필요하며, 이러한 Windows 사용자가 적절히 보안되어야 합니다.

전체 Teleport 역할 참조, Teleport가 internalexternal 속성을 확장하는 방법에 대한 정보는 다음을 참조하십시오: Teleport 액세스 제어 참조.

레이블 지정

allowdeny 규칙 모두 windows_desktop_labels 선택기를 지원합니다. 이러한 선택기는 데스크톱에 설정된 레이블과 일치합니다. 모든 데스크톱 레이블과 일치하도록 와일드카드("*")를 사용할 수 있습니다.

Windows 데스크톱은 두 가지 방법으로 레이블을 획득합니다:

  • Teleport 구성 파일의 windows_desktop_service 섹션에 정의된 host_labels 규칙을 사용합니다.
  • LDAP를 사용하여 (LDAP를 통해 발견된 데스크톱에 대해서만)

host_labels 사용

다음 host_labels 구성은 Windows 데스크톱 이름이 test.dev.example.com 인 경우 environment: dev 레이블을 적용하고, desktop.prod.example.com 인 경우 environment: prod 레이블을 적용합니다:

host_labels:
  - match: '^.*\.dev\.example\.com'
    labels:
      environment: dev
  - match: '^.*\.prod\.example\.com'
    labels:
      environment: prod

위의 match 규칙에 제공된 정규 표현식은 LDAP를 통해 발견된 데스크톱의 이름에 적용됩니다. 정적으로 정의된 호스팅(구성의 static_hosts 섹션에 정의된)은 자동으로 생성된 이름을 받으므로 이 경우 데스크톱의 addr 에 대해 호스트 레이블 일치가 적용됩니다.

정적 호스트

192.168.1.105 의 정적 호스트 정의는 다음과 같은 리소스를 결과로 생성합니다:

kind: windows_desktop
metadata:
  expires: "2023-05-01T15:47:21.564561Z"
  id: 1682955441565783000
  labels:
    teleport.dev/ad: "true"
    teleport.dev/origin: config-file
  name: 3362ad10b55d-static-192-168-1-105
spec:
  addr: 192.68.1.105:3389
  domain: example.com
  host_id: 307e091b-7f6b-42e0-b78d-3362ad10b55d
  non_ad: false
version: v3

이 경우, 정규 표현식은 192.68.1.105:3389 에 대해 평가됩니다.

발견된 호스트

LDAP를 통해 발견된 호스트(또는 API에 의해 생성된 호스트)의 경우, 정규 표현식은 이름에 대해 평가됩니다.

kind: windows_desktop
metadata:
  expires: "2023-05-01T15:47:36.677008Z"
  id: 1682955456680526000
  labels:
    teleport.dev/computer_name: EC2AMAZ-37TSM4L
    teleport.dev/dns_host_name: EC2AMAZ-37TSM4L.example.com
    teleport.dev/is_domain_controller: "true"
    teleport.dev/origin: dynamic
    teleport.dev/os: Windows Server 2019 Datacenter
    teleport.dev/os_version: 10.0 (17763)
    teleport.dev/ou: OU=Domain Controllers,DC=example,DC=com
    teleport.dev/windows_domain: example.com
  name: EC2AMAZ-37TSM4L-example-com
spec:
  addr: 172.31.9.146:3389
  domain: example.com
  host_id: 307e091b-7f6b-42e0-b78d-3362ad10b55d
  non_ad: false
version: v3

이 경우, 정규 표현식은 EC2AMAZ-37TSM4L-example-com 에 대해 평가됩니다.

LDAP 사용

Teleport 데스크톱 서비스는 LDAP 서버를 주기적으로 쿼리하여 Windows 데스크톱을 자동으로 발견하고 이를 Teleport 클러스터에 등록할 수 있습니다. 이러한 데스크톱은 여러 가지 방법으로 라벨을 지정할 수 있습니다:

Teleport는 LDAP를 통해 발견된 모든 데스크톱에 자동으로 다음 라벨을 적용합니다:

라벨LDAP 속성예시
teleport.dev/computer_namenameWIN-I5G06B8RT33
teleport.dev/dns_host_namedNSHostName WIN-I5G06B8RT33.example.com
teleport.dev/osoperatingSystem Windows Server 2012
teleport.dev/os_versionosVersion 4.0
teleport.dev/windows_domain구성에서 가져옴example.com
teleport.dev/is_domain_controllerprimaryGroupIDtrue
teleport.dev/oudistinguishedName 에서 파생OU=IT,DC=goteleport,DC=com

또한, 사용자는 Teleport 라벨로 변환될 LDAP 속성을 구성할 수 있습니다. 예를 들어, 다음과 같은 데스크톱 서비스 구성을 고려해 보십시오:

discovery:
  label_attributes:
    - location

location 속성이 Oakland 인 데스크톱의 경우, Teleport는 키가 ldap/location 이고 값이 Oakland 인 라벨을 적용합니다.

로그인

windows_desktop_logins 역할 설정은 역할이 접근을 허용하는 Windows 사용자 계정을 나열합니다. 로컬 사용자에게는 {{internal.windows_logins}} 변수를 사용하여 사용자의 windows_logins 특성을 나타낼 수 있습니다. 사용자가 생성될 때 windows_logins 특성을 지정할 수 있습니다: tctl users add alice --windows-logins=Administrator,DBUser .

새 클러스터는 자동으로 미리 설정된 access 역할에 다음을 채웁니다:

allow:
  windows_desktop_logins: ["{{internal.windows_logins}}"]

클립보드 접근

사용자가 원격 데스크톱과 로컬 워크스테이션 간에 복사 및 붙여넣기를 하려면 사용자를 위한 클립보드 공유가 활성화되어 있어야 합니다. desktop_clipboard 역할 옵션은 지정하지 않으면 기본적으로 활성화됩니다. Teleport 사용자에 대해 클립보드 공유를 비활성화하려면 클립보드 공유를 명시적으로 비활성화하는 역할이 적어도 하나 할당되어 있어야 합니다:

desktop_clipboard: false

디렉터리 공유

Teleport 사용자는 로컬 워크스테이션에서 원격 데스크톱과 디렉터리를 공유할 수 있습니다.

Teleport 역할은 기본적으로 디렉터리 공유를 활성화합니다. 사용자의 Teleport 역할 중 하나가 디렉터리 공유를 비활성화하면, 해당 사용자에 대해 디렉터리 공유가 비활성화됩니다.

Teleport 사용자에 대해 디렉터리 공유를 비활성화하려면 role.yaml 이라는 파일에 다음과 유사한 역할을 정의합니다:

kind: role
version: v5
metadata:
  name: "no-sharing"
spec:
  options:
    desktop_directory_sharing: false

세션 녹화

Teleport 사용자의 데스크톱 세션을 녹화하기 위해서는 다음 두 가지가 모두 충족되어야 합니다:

  • 클러스터에서 세션 녹화가 활성화되어 있어야 합니다 (즉, off 로 설정되지 않아야 합니다). 이 설정은 teleport.yamlauth_service.session_recording 아래에 위치하지만, 클러스터의 session_recording_config 리소스를 통해 동적으로 구성할 수도 있습니다.
  • 사용자의 역할이 데스크톱 세션 녹화를 활성화해야 합니다.

기본적으로, Teleport 역할에서는 데스크톱 세션 녹화가 활성화된 것으로 간주되며, 이를 명시적으로 비활성화하지 않는 한 그렇습니다:

record_session:
  desktop: false

사용자에 대해 데스크톱 세션 녹화를 비활성화하려면, 사용자의 모든 역할이 이를 비활성화해야 합니다. 즉, 녹화를 활성화하는 역할 하나가 존재하는 것만으로도 세션이 녹화되도록 보장됩니다.

Teleport 원문 보기