인포레터에서 최신 DevOps 트렌드를 격주로 만나보세요!
데스크톱을 위한 역할 기반 액세스 제어
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가 internal
및 external
속성을 확장하는 방법에 대한 정보는 다음을 참조하십시오: Teleport 액세스 제어 참조.
레이블 지정
allow
및 deny
규칙 모두 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_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 속성을 구성할 수 있습니다. 예를 들어, 다음과 같은 데스크톱 서비스 구성을 고려해 보십시오:
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.yaml
의auth_service.session_recording
아래에 위치하지만, 클러스터의session_recording_config
리소스를 통해 동적으로 구성할 수도 있습니다. - 사용자의 역할이 데스크톱 세션 녹화를 활성화해야 합니다.
기본적으로, Teleport 역할에서는 데스크톱 세션 녹화가 활성화된 것으로 간주되며, 이를 명시적으로 비활성화하지 않는 한 그렇습니다:
record_session:
desktop: false
사용자에 대해 데스크톱 세션 녹화를 비활성화하려면, 사용자의 모든 역할이 이를 비활성화해야 합니다. 즉, 녹화를 활성화하는 역할 하나가 존재하는 것만으로도 세션이 녹화되도록 보장됩니다.