데스크톱을 위한 역할 기반 접근 제어
Teleport의 RBAC를 통해 관리자는 Teleport에 연결된 Windows 데스크톱에 대한 세분화된 접근 정책을 설정할 수 있습니다. Teleport의 role 리소스는 데스크톱 접근 제어를 위한 다음 옵션을 제공합니다:
Teleport의 RBAC를 통해 관리자는 Teleport에 연결된 Windows 데스크톱에 대한 세분화된 접근 정책을 설정할 수 있습니다.
Teleport의 role 리소스는 데스크톱 접근 제어를 위한 다음 옵션을 제공합니다:
kind: role
version: v5
metadata:
name: developer
spec:
options:
# 사용자의 데스크톱 세션 녹화 여부를 지정합니다.
# 사용자의 역할 중 하나 이상이 녹화를 활성화한 경우 데스크톱 세션 녹화가 활성화됩니다.
# 지정하지 않으면 기본적으로 true입니다.
# auth_service.session_recording이 teleport.yaml에서 'off'로 설정되거나
# 클러스터의 session_recording_config 리소스가 'mode: off'로 설정된 경우
# 데스크톱 세션은 절대 녹화되지 않습니다.
record_session:
desktop: true
# 원격 데스크톱과의 클립보드 공유 허용 여부를 지정합니다
# (지원되는 브라우저 또는 Teleport Connect 필요).
# 지정하지 않으면 기본적으로 true입니다.
# 사용자의 역할 중 하나 이상이 클립보드를 비활성화한 경우 비활성화됩니다.
desktop_clipboard: true
# 로컬 머신에서 원격 데스크톱으로 디렉터리 공유 허용 여부를 지정합니다
# (지원되는 브라우저 또는 Teleport Connect 필요).
# 지정하지 않으면 기본적으로 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}}"]
Teleport의 RBAC 시스템은 적절한 Active Directory 관리를 대체하지 않습니다. Teleport가 발급한 Windows 인증서는 짧은 시간 동안만 유효하지만, 전체 도메인에 적용됩니다. 각 Teleport 사용자의 역할이 필요한 Windows 로그인만 반영하고, 이러한 Windows 사용자가 적절하게 보호되도록 주의를 기울여야 합니다.
Teleport가 internal 및 external 트레이트를 확장하는 방법에 대한 정보를 포함한 전체 Teleport
역할 참조는 Teleport 접근 제어 참조를 참조하세요.
레이블 지정#
allow 및 deny 규칙 모두 windows_desktop_labels 선택기를 지원합니다. 이러한 선택기는
데스크톱에 설정된 레이블과 대조됩니다. 와일드카드("*")를 사용하여 모든 데스크톱 레이블과
일치시킬 수 있습니다.
Windows 데스크톱은 두 가지 방법으로 레이블을 획득합니다:
- Teleport 구성 파일의
windows_desktop_service섹션에 정의된host_labels규칙 사용. - LDAP 사용 (LDAP를 통해 검색된 데스크톱에만 해당)
host_labels 사용#
다음 host_labels 구성은 test.dev.example.com이라는 Windows 데스크톱에 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.168.1.105:3389
domain: example.com
host_id: 307e091b-7f6b-42e0-b78d-3362ad10b55d
non_ad: false
version: v3
이 경우, 정규 표현식은 192.168.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 Desktop Service는 주기적으로 LDAP 서버를 쿼리하여 Windows 데스크톱을 자동으로 검색하고 Teleport 클러스터에 등록할 수 있습니다. 이러한 데스크톱에 레이블을 지정하는 몇 가지 방법이 있습니다:
Teleport는 LDAP를 통해 검색된 모든 데스크톱에 다음 레이블을 자동으로 적용합니다:
| 레이블 | LDAP 속성 | 예시 |
|---|---|---|
teleport.dev/computer_name |
name |
WIN-I5G06B8RT33 |
teleport.dev/dns_host_name |
dNSHostName |
WIN-I5G06B8RT33.example.com |
teleport.dev/os |
operatingSystem |
Windows Server 2012 |
teleport.dev/os_version |
osVersion |
4.0 |
teleport.dev/windows_domain |
구성에서 가져옴 | example.com |
teleport.dev/is_domain_controller |
primaryGroupID |
true |
teleport.dev/ou |
distinguishedName에서 파생 |
OU=IT,DC=goteleport,DC=com |
또한, 사용자는 Teleport 레이블로 변환될 LDAP 속성을 구성할 수 있습니다. 예를 들어, 다음 Desktop Service 구성을 고려하세요:
discovery:
label_attributes:
- location
location 속성 값이 Oakland인 데스크톱의 경우, Teleport는 ldap/location 키와 Oakland 값을
가진 레이블을 적용합니다.
이 정책을 통해 검색된 모든 호스트에 적용되는 정적 레이블 세트를 지정할 수도 있습니다:
windows_desktop_service:
enabled: true
discovery_configs:
- base_dn: 'OU=Engineering,OU=Servers,DC=example,DC=com'
labels:
team: engineering
- base_dn: 'OU=Sales,OU=Servers,DC=example,DC=com'
labels:
team: sales
이 예시에서, Engineering OU의 모든 호스트에는 team: engineering이 있고
Sales OU의 호스트에는 team: sales가 있습니다.
로그인#
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.yaml의auth_service.session_recording아래에 있지만, 클러스터의session_recording_config리소스를 통해 동적으로 구성할 수도 있습니다. - 사용자의 역할이 데스크톱 세션 녹화를 활성화하고 있어야 합니다.
기본적으로 Teleport 역할에서 데스크톱 세션 녹화는 명시적으로 비활성화되지 않는 한 활성화된 것으로 간주됩니다:
record_session:
desktop: false
사용자에 대한 데스크톱 세션 녹화를 비활성화하려면, 사용자의 모든 역할이 녹화를 비활성화해야 합니다. 즉, 녹화를 활성화하는 단일 역할만 있어도 세션이 녹화됩니다.
