인포레터에서 최신 DevOps 트렌드를 격주로 만나보세요!
조정된 세션
조정된 세션을 사용하면 다른 사용자가 시작한 활성 서버 또는 Kubernetes 세션에 다른 사용자가 존재해야 하는 요구 사항을 정의할 수 있습니다. 지정한 요구 사항에 따라, 다른 사용자의 세션에 참여할 수 있는 권한이 부여된 사용자에게는 다음과 같은 권한이 주어질 수 있습니다:
- 다른 사용자의 세션을 실시간으로 관찰합니다.
- 다른 사용자의 세션에 상호작용식으로 참여합니다.
- 원할 때 다른 사용자의 세션을 종료합니다.
조정된 세션의 가장 일반적인 사용 사례는 다음과 같은 시나리오를 포함합니다:
- 엄격한 보안 또는 컴플라이언스 요구 사항이 있으며, 특정 서버에서 사용자 주도 세션을 감시할 사람이 필요합니다.
- 누군가와 터미널을 공유하여 지시하거나 협력할 수 있습니다.
- 활성 세션을 일시 중지하거나 종료할 수 있는 능력이 필요합니다.
모든 Teleport 에디션을 사용하여 터미널 세션을 공유할 수 있습니다. 그러나, 활성 세션을 관찰하거나 조정해야 하는 경우 Teleport Enterprise가 필요합니다.
요구 및 허용 정책
조정된 세션은 역할을 사용하여 세션에 참여할 수 있는 사람과 세션을 시작하는 데 존재해야 하는 사람에 대한 세밀한 제어를 제공합니다.
조정된 세션을 제어하는 데 사용할 수 있는 정책 유형은 다음과 같습니다:
- 요구 정책은 세션을 시작하거나 실행하기 위해 충족해야 하는 조건 집합을 정의합니다. 요구 정책이 있는 역할이 할당된 사용자는 정책이 적용되는 세션을 시작하기 위해 정책의 최소 요구 사항을 충족해야 합니다.
- 허용 정책은 사용자가 어떤 세션에 참여할 수 있고 세션에 참여할 수 있는 조건을 정의합니다.
요구 정책 구성
Teleport Enterprise 에디션에서는 역할 내에서 require_session_join
을 사용하여
세션을 시작하거나 실행하기 위해 충족해야 하는 조건을 지정할 수 있습니다. 예를 들어,
다음 정책은 prod-access
역할이 할당된 사용자가 SSH 또는 Kubernetes 세션을 시작하기 위해
auditor
역할을 가진 사용자가 최소 한 명 이상 존재해야 함을 명시합니다:
kind: role
metadata:
name: prod-access
version: v7
spec:
allow:
require_session_join:
- name: 감사 감독
filter: 'contains(user.spec.roles, "auditor")'
kinds: ["k8s", "ssh"]
modes: ["moderator"]
count: 1
logins:
- ubuntu
- debian
node_labels:
env: prod
kubernetes_labels:
env: prod
kubernetes_groups:
- prod-access
kubernetes_users:
- USER
kubernetes_resources:
- kind: "*"
name: "*"
namespace: "*"
verbs: ["*"]
이 샘플 정책은 SSH 또는 Kubernetes 세션을 시작하기 위해
auditor
역할을 가진 사용자가 조정자로서 최소 한 명 이상 존재해야 함을 요구하므로,
이 prod-access
역할이 할당된 사용자는 정책 요구 사항이 충족될 때까지
세션을 시작할 수 없습니다.
require_session_join
규칙은 사용자의 모든 세션에 적용되며,
다른 역할을 통해 액세스할 수 있는 세션도 포함됩니다. 사용자 세션에 조정이 필요하지 않은 경우,
조정을 요구해야 하는 리소스에 대해 역할을 일시적으로 가정하기 위해 Access Requests를 사용하는 것이 좋습니다.
필수 필드
다음은 require_session_join
에 대한 필수 필드입니다:
옵션 | 유형 | 설명 |
---|---|---|
name | 문자열 | 요구 정책의 이름 |
filter | 필터 | 주어진 사용자에 대해 true로 평가되면 사용자가 조정된 세션에 존재할 수 있도록 하는 표현식입니다. |
kinds | 리스트 | 정책이 적용되는 세션 종류—SSH, Kubernetes 또는 둘 다—입니다. 유효한 옵션은 ssh 와 k8s 입니다. |
modes | 리스트 | 조정된 세션에 참여하는 사용자가 정책을 충족하기 위해 일치해야 하는 참여자 모드—observer , moderator , 또는 peer —입니다. |
count | 정수 | 정책을 충족하기 위해 필터 표현식과 일치해야 하는 최소 사용자 수입니다. |
필터 표현식
필터 표현식은 정책의 범위를 보다 상세하게 제어할 수 있도록 합니다. 예를 들어, 세션에 필요한 사용자를 필터 표현식을 사용하여 지정할 수 있습니다. 필터는 user
객체를 컨텍스트로 가지며, 이를 사용하여 지정한 roles
와 name
필드와 일치하도록 조정할 수 있습니다.
다음 예시에서 필터 표현식은 사용자의 이름이 adam
이거나 사용자가 cs-observe
역할을 가지고 있는 경우 true로 평가됩니다:
equals(user.name, "adam") || contains(user.spec.roles, "cs-observe")
필터 표현식은 다음과 같은 함수와 연산자를 지원합니다:
contains(set, item)
: 아이템이 세트에 포함되어 있으면 true를 반환하고, 그렇지 않으면 false를 반환합니다. 세트는 문자열 또는 배열일 수 있습니다.equals(a, b)
: 두 값이 같으면 true를 반환하고, 그렇지 않으면 false를 반환합니다.![expr]
: 불리언 표현식을 부정합니다.[expr] && [expr]
: 두 불리언 표현식에 대해 논리 AND를 수행합니다.[expr] || [expr]
: 두 불리언 표현식에 대해 논리 OR를 수행합니다.
사용자 수 맞추기
require 정책에서 count
필드를 사용하여 필터 표현식과 일치하는 사용자의 최소 수를 지정할 수 있으며, 세션에 존재해야 요구 정책을 충족합니다.
선택적 필드
다음 필드는 require_session_join
에 대해 선택적입니다:
옵션 | 유형 | 설명 |
---|---|---|
on_leave | String | 정책이 더 이상 충족되지 않을 때 취할 행동. |
require 정책에서 on_leave
필드를 사용하여 중재자가 세션을 떠났을 때 정책이 더 이상 충족되지 않는 경우 발생하는 일을 정의할 수 있습니다. 이 필드의 두 가지 가능한 값은 다음과 같습니다:
terminate
: 세션을 즉시 종료하고 모든 참가자를 연결 해제합니다.pause
: 세션을 일시 정지하고 정책이 다시 충족될 때까지 모든 입력/출력 스트리밍을 중단합니다.
기본적으로 Teleport는 이 필드의 빈 문자열을 terminate
와 동일하게 처리합니다.
세션 소유자와 연결된 모든 require 정책이 pause
로 설정되어 있는 경우, 세션은 세션 참가자로부터 모든 입력을 버퍼링하고 최신 출력을 저장하지만 세션은 열려 있어 다시 시작할 수 있습니다.
require 정책과 역할 결합
정책과 역할을 평가할 때, 역할 내의 모든 require 정책은 OR 연산자를 사용하여 평가되고, 각 역할의 정책은 AND 연산자를 사용하여 평가됩니다. 실제로 이는 최소한 하나의 require 정책이 있는 각 역할에 대해 하나의 정책이 충족되어야 사용자가 해당 역할로 세션을 시작할 수 있음을 의미합니다.
리프 클러스터에서 중재된 세션 요구
require_session_join
정책이 있는 역할을 루트 클러스터에서 생성하면, 해당 역할이 할당된 사용자의 세션은 루트 클러스터의 리소스에서 시작될 때만 중재가 필요합니다. 해당 역할이 할당된 사용자가 리프 노드의 리소스에 연결하면, 매핑된 리프 역할이 중재를 요구하지 않는 한 그들의 세션은 중재가 필요하지 않습니다. 리프 클러스터에서 중재된 세션을 요구하려면, 리프 클러스터에서 정의된 매핑된 역할에 require_session_join
정책을 포함해야 합니다.
루트와 리프 클러스터 간의 신뢰 관계와 역할 매핑 구성을 위한 자세한 내용은 신뢰된 클러스터 구성을 참조하세요.
허용 정책 구성하기
역할에서 join_sessions
를 사용하여 사용자가 참여할 수 있는 세션과 세션에 참여할 수 있는 조건을 지정할 수 있습니다. 예를 들어, 다음 정책은 auditor
역할에 연결되어 있으며, 감사 역할에 할당된 사용자가 prod-access
역할을 가진 사용자가 시작한 SSH 및 Kubernetes 세션에 중재자 또는 관찰자로 참가할 수 있도록 허용합니다:
kind: role
metadata:
name: auditor
version: v7
spec:
allow:
join_sessions:
- name: Join prod sessions
roles: ["prod-access"]
kinds: ["k8s", "ssh"]
modes: ["moderator", "observer"]
join_sessions
허용 정책이 있는 역할에 할당된 사용자는 정책이 허용하는 세션 목록을 암묵적으로 볼 수 있습니다. 세션 목록을 방지하는 deny
규칙이 있을 경우, join_sessions
정책은 사용자가 참여할 수 있는 세션에 대해서는 deny
규칙을 무시합니다. 이 참여 세션에 대한 예외 외에는 deny
진술이 우선합니다.
필수 필드
다음은 join_sessions
에 대한 필수 필드입니다:
옵션 | 유형 | 설명 |
---|---|---|
name | 문자열 | 허용 정책의 이름입니다. |
roles | 목록 | 허용 정책이 적용되는 Teleport 역할 이름의 목록입니다. 이러한 역할을 가진 사용자가 생성한 활성 세션은 이 정책 하에 조인할 수 있습니다. |
kinds | 목록 | 허용 정책이 적용되는 세션 종류—SSH, Kubernetes, 또는 둘 다입니다. 유효한 옵션은 ssh 및 k8s 입니다. |
modes | 목록 | 세션에 조인하는 사용자가 사용할 수 있는 참여자 모드—observer , moderator , 또는 peer 입니다. 기본 모드는 observer 입니다. |
명령행에서 세션에 참가하기
다음 예에서 Jeff는 prod-access
역할이 할당되어 있고 tsh ssh
를 사용하여 생산 환경의 서버에 연결하려고 합니다:
tsh ssh ubuntu@prod.teleport.example.comTeleport > Creating session with ID: 46e2af03-62d6-4e07-a886-43fe741ca044...Teleport > Controls - CTRL-C: Leave the session - t: Forcefully terminate the session (moderators only)Teleport > User jeff joined the session.Teleport > Waiting for required participants...
Jeff의 세션은 필수 발전자를 기다리며 정지 상태입니다. auditor
역할이 할당된 Alice가 모더레이터로 대기 중인 세션에 조인하면 세션을 시작할 수 있습니다. 예를 들어:
tsh join --mode=moderator 46e2af03-62d6-4e07-a886-43fe741ca044Teleport > Creating session with ID: 46e2af03-62d6-4e07-a886-43fe741ca044...Teleport > Controls - CTRL-C: Leave the session - t: Forcefully terminate the session (moderators only)Teleport > User jeff joined the session.Teleport > Waiting for required participants...Teleport > User alice joined the session.Teleport > Connecting to prod.teleport.example.com over SSH
ubuntu@prod.teleport.example.com %
이 세션은 SSH 세션이기 때문에, Alice는 Teleport Web UI에서도 조인할 수 있습니다. 예를 들어:
참여자 모드
세션에 조인하는 참여자는 항상 세 가지 모드 중 하나를 갖습니다:
observer
: 세션에 대한 읽기 전용 접근을 허용합니다. 출력은 볼 수 있지만 세션을 제어하거나 입력을 보낼 수 없습니다.moderator
: 세션을 관찰할 수 있게 합니다. 출력은 볼 수 있고 언제든지 세션을 강제로 종료하거나 일시 중지할 수 있지만 입력을 보낼 수는 없습니다.peer
: 세션에서 협업할 수 있게 합니다. 출력은 볼 수 있고 입력을 보낼 수 있습니다.
tsh join
또는 tsh kube join
을 사용하여 세션에 조인하면, --mode <mode>
명령어 옵션으로 참여자 모드를 지정할 수 있습니다. 여기서 <mode>
는 peer
, moderator
, 또는 observer
입니다. 기본 참여자 모드는 observer
입니다.
관찰자 또는 모더레이터 모드에서 세션을 떠나려면 단축키 ^c
(Control + c)를 사용할 수 있습니다. 모더레이터 모드에서는 언제든지 단축키 t
로 세션을 강제로 종료할 수도 있습니다.
다중 인증
만약 per_session_mfa
가 역할 또는 클러스터 설정에서 true
로 설정되어 있다면, Teleport는 새 세션 시작 시 다중 인증 체크를 요구합니다. 이 요구 사항은 세션 모더레이터에게도 적용됩니다. 따라서 세션에 참여하고자 하는 모더레이터는 다중 인증을 위한 장치를 설정해야 합니다.
30초마다, Teleport는 세션 모더레이터에게 다음 15초 안에 재인증을 요청합니다. 이러한 동작은 세션 전반에 걸쳐 계속되며, 모더레이터가 항상 존재하고 주어진 세션을 감시하고 있음을 보장합니다.
60초 이내에 MFA 입력이 없으면, 사용자는 세션에서 연결이 끊깁니다. 이로 인해 요구 정책이 더 이상 만족되지 않기 때문에 세션이 종료되거나 일시 중지될 수 있습니다.
세션 종류
요구 및 허용 정책은 어떤 세션에 적용되는지를 지정해야 합니다. 유효한 옵션은 ssh
와 k8s
입니다.
ssh
정책은 Teleport SSH 서버가 실행 중인 노드의 모든 SSH 세션에 적용됩니다.k8s
정책은 Teleport에 연결된 클러스터의 모든 Kubernetes 세션에 적용됩니다.
SSH 세션에 대한 join_sessions
권한이 있는 사용자는 명령 줄 또는 Teleport 웹 UI에서 세션에 참여할 수 있습니다. Kubernetes 세션에 대한 join_sessions
권한이 있는 사용자는 명령 줄에서만 세션에 참여할 수 있습니다.
세션 초대
tsh ssh
또는 tsh kube exec
명령을 사용하여 인터랙티브 SSH 또는 Kubernetes 세션을 시작할 때, --reason <reason>
또는 --invited <users>
명령줄 옵션을 제공하여 <reason>
을 문자열로 또는 <users>
를 사용자 이름의 쉼표로 구분된 목록으로 지정할 수 있습니다.
이 정보는 session_tracker
리소스로 전파되어, 예를 들어 외부 통신 시스템을 통해 알림을 활성화하는데 사용할 수 있습니다.
파일 전송
모더레이트된 세션 내에서의 파일 전송은 Teleport 웹 UI를 사용할 때만 지원됩니다. 현재 활성 세션이 모더레이션을 요구하는 경우, 파일 전송 요청은 자동으로 모든 현재 세션 참가자에게 전송됩니다.
파일 전송 시작 시 파일 전송 요청 알림을 받기 위해, 세션 시작자와 모더레이터는 Teleport 웹 UI에 존재해야 합니다. 파일 전송 요청이 요청된 후에는 모든 세션 참가자에게 알림이 전송되며, 파일 전송 요청을 승인하거나 거부하도록 요청받습니다.
모더레이터가 파일 전송 요청을 거부하면, 요청은 즉시 제거되고 모든 세션 참가자에게 알림이 전송됩니다.
세션 시작에 사용된 정책을 만족하기 위해 충분한 승인이 주어지면, 파일 전송이 자동으로 시작됩니다.