Infograb logo
조정된 세션

조정된 세션은 다른 사용자가 시작한 활성 서버 또는 Kubernetes 세션에 다른 사용자가 참석하기 위한 요구 사항을 정의할 수 있도록 합니다. 지정한 요구 사항에 따라 다른 사용자의 세션에 참여할 수 있는 사용자는 다음과 같은 권한을 부여받을 수 있습니다:

  • 다른 사용자의 세션을 실시간으로 관찰합니다.
  • 다른 사용자의 세션에 상호 작용적으로 참여합니다.
  • 다른 사용자의 세션을 원할 때 종료합니다.

조정된 세션의 가장 일반적인 사용 사례는 다음과 같은 시나리오를 포함합니다:

  • 엄격한 보안 또는 준수 요구 사항이 있으며 사용자 시작 세션에 대해 사람들이 감시해야 합니다.
  • 다른 사람과 터미널을 공유하여 지시하거나 협력하고자 합니다.
  • 활성 세션을 일시 중지하거나 종료할 수 있는 기능이 필요합니다.

모든 Teleport 에디션을 사용하여 터미널 세션을 공유할 수 있습니다. 그러나 활성 세션이 관찰되거나 조정되도록 요구하려면 Teleport Enterprise가 필요합니다.

요구 및 허용 정책

조정된 세션은 역할을 사용하여 세션에 참여할 수 있는 사람과 세션을 시작하는 데 필요한 사람을 세밀하게 제어합니다.

조정된 세션을 제어하기 위해 사용할 수 있는 두 가지 유형의 정책이 있습니다:

  • Require 정책은 세션이 시작되거나 실행되기 위해 충족해야 하는 일련의 조건을 정의합니다. 요구 정책이 있는 역할이 지정된 사용자는 해당 정책이 적용되는 세션을 시작하기 위해 최소 요구 사항을 충족해야 합니다.
  • Allow 정책은 사용자가 세션에 참여할 수 있는 세션과 세션에 참여할 수 있는 조건을 정의합니다.

요구 정책 구성

Teleport Enterprise 에디션에서는 역할에서 require_session_join을 사용하여 세션이 시작되거나 실행되기 위해 충족해야 하는 조건을 지정할 수 있습니다. 예를 들어, 아래 정책은 prod-access 역할이 부여된 사용자가 SSH 또는 Kubernetes 세션을 시작하기 위해 auditor 역할과 moderator 모드가 있는 최소 한 명의 사용자가 필요하다고 명시합니다:

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 규칙은 사용자의 모든 세션에 적용되며, 다른 역할을 통해 접근할 수 있는 세션을 포함합니다. 사용자 세션에 조정을 요구하지 않으려면 액세스 요청을 사용하여 조정이 필요한 리소스에 대해 임시로 역할을 가정하는 것을 추천합니다.

필수 필드

다음은 require_session_join에 필요한 필드입니다:

옵션유형설명
nameStringRequire 정책의 이름
filterFilter주어진 사용자가 진리로 평가되는 경우 사용자가 조정된 세션에 참석할 수 있게 하는 표현식입니다.
kindsList정책이 적용되는 세션의 종류—SSH, Kubernetes 또는 둘 다입니다. 유효한 선택지는 sshk8s입니다.
modesList조정된 세션에 참여하는 사용자가 정책을 충족하기 위해 일치해야 하는 참여자 모드—observer, moderator, 또는 peer입니다.
countInteger정책을 충족하기 위해 필터 표현식에 일치해야 하는 최소 사용자 수입니다.

필터 표현식

필터 표현식을 사용하면 정책의 범위를 더 세밀하게 제어할 수 있습니다. 예를 들어, 누가 세션에 참석해야 하는지를 지정하기 위해 필터 표현식을 사용할 수 있습니다. 필터는 user 객체를 컨텍스트로 사용하여 지정한 rolesname 필드에 맞게 조정할 수 있습니다.

다음 예에서 필터 표현식은 사용자의 이름이 adam이거나 사용자가 cs-observe 역할을 가지고 있을 경우 참으로 평가됩니다:

equals(user.name, "adam") || contains(user.spec.roles, "cs-observe")

필터 표현식은 다음 함수와 연산자를 지원합니다:

  • contains(set, item): 항목이 집합에 있을 경우 참을 반환하며, 그렇지 않으면 거짓을 반환합니다. 집합은 문자열 또는 배열일 수 있습니다.
  • equals(a, b): 두 값이 같을 경우 참을 반환하며, 그렇지 않으면 거짓을 반환합니다.
  • ![expr]: 부울 표현식을 부정합니다.
  • [expr] && [expr]: 두 개의 부울 표현식에 대해 논리 AND를 수행합니다.
  • [expr] || [expr]: 두 개의 부울 표현식에 대해 논리 OR을 수행합니다.

일치하는 사용자 수

정책의 count 필드를 사용하여 필터 표현식에 일치하는 세션의 최소 사용자 수를 지정할 수 있습니다.

선택적 필드

다음 필드는 require_session_join에 대해 선택적입니다:

옵션유형설명
on_leaveString정책이 더 이상 충족되지 않을 때 수행할 작업.

요구 정책의 on_leave 필드를 사용하여 조정자가 세션에서 떠나고 정책을 더 이상 충족하지 않게 될 때 발생하는 일을 정의할 수 있습니다. 이 필드는 다음 두 가지 가능한 값을 가집니다:

  • terminate 세션을 즉시 종료하고 모든 참가자를 연결 해제합니다.
  • pause 세션을 일시 중지하고 정책이 다시 충족될 때까지 입력/출력 스트리밍을 중지합니다.

기본적으로 Teleport는 이 필드에서 빈 문자열을 terminate와 동일하게 취급합니다.

세션 소유자에게 첨부된 모든 요구 정책이 pause로 설정되면 세션은 모든 세션 참가자로부터 입력을 폐기하고 최근 출력을 버퍼링하지만 세션은 열려 있으므로 다시 진행할 수 있습니다.

요구 정책과 역할 결합

정책과 역할을 평가할 때 모든 역할 내의 요구 정책이 OR 연산자를 사용하여 평가되고 각 역할의 정책이 AND 연산자를 사용하여 평가됩니다. 실제로 이는 반드시 최소 하나의 요구 정책이 충족되어야 역할이 부여된 사용자가 세션을 시작할 수 있도록 합니다.

리프 클러스터에서 조정된 세션 요구하기

루트 클러스터에서 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: prod 세션 참여
        roles: ['prod-access']
        kinds: ['k8s', 'ssh']
        modes: ['moderator', 'observer']

join_sessions 허용 정책이 있는 역할이 부여된 사용자는 이 정책이 허용하는 세션 목록을 암묵적으로 나열할 수 있습니다. 세션 나열을 방지하는 deny 규칙이 있는 경우, join_sessions 정책은 사용자가 참여할 수 있는 세션에 대한 deny 규칙을 무시합니다. 이 세션에 참여하는 것 외의 이 예외를 제외하고는 deny 문이 우선합니다.

필수 필드

다음은 join_sessions에 필요한 필드입니다:

옵션유형설명
nameString허용 정책의 이름입니다.
rolesList허용 정책이 적용되는 Teleport 역할 이름 목록입니다. 이러한 역할을 가진 사용자가 생성한 활성 세션은 이 정책에 따라 참여할 수 있습니다.
kindsList허용 정책이 적용되는 세션의 종류—SSH, Kubernetes, 또는 둘 다입니다. 유효한 선택지는 sshk8s입니다.
modesList사용자가 세션에 참여하기 위해 사용할 수 있는 참여자 모드—observer, moderator, 또는 peer입니다. 기본 모드는 observer입니다.

명령줄에서 세션에 참여하기

다음 예에서 Jeff는 prod-access 역할이 부여되어 있으며 tsh ssh를 사용하여 프로덕션 환경의 서버에 연결하려고 합니다:

tsh ssh ubuntu@prod.teleport.example.com
Teleport > 세션 ID: 46e2af03-62d6-4e07-a886-43fe741ca044를 생성하는 중...Teleport > Controls - CTRL-C: 세션을 떠나다 - t: 세션을 강제로 종료하다 (조정자 전용)Teleport > 사용자 jeff가 세션에 참여했습니다.Teleport > 필수 참가자를 기다리고 있습니다...

Jeff의 세션은 필수 관찰자를 기다리느라 일시 중지되었습니다. auditor 역할이 부여된 Alice가 조정자로 대기 중인 세션에 참여하면 세션을 시작할 수 있습니다. 예를 들어:

tsh join --mode=moderator 46e2af03-62d6-4e07-a886-43fe741ca044
Teleport > 세션 ID: 46e2af03-62d6-4e07-a886-43fe741ca044를 생성하는 중...Teleport > Controls - CTRL-C: 세션을 떠나다 - t: 세션을 강제로 종료하다 (조정자 전용)Teleport > 사용자 jeff가 세션에 참여했습니다.Teleport > 필수 참가자를 기다리고 있습니다...Teleport > 사용자 alice가 세션에 참여했습니다.Teleport > SSH를 통해 prod.teleport.example.com에 연결하는 중
ubuntu@prod.teleport.example.com %

이 세션이 SSH 세션이기 때문에 Alice는 Teleport 웹 UI에서 참여할 수도 있습니다. 예를 들어:

참여자 모드

세션에 참여하는 참여자는 항상 세 가지 모드 중 하나를 가집니다:

  • observer: 세션에 대한 읽기 전용 접근을 허용합니다. 출력을 볼 수 있지만 세션을 제어하거나 입력을 전송할 수 없습니다.
  • moderator: 세션을 관찰할 수 있습니다. 출력 보기 및 언제든지 세션을 강제로 종료하거나 일시 중지할 수 있지만 입력을 전송할 수는 없습니다.
  • peer: 세션에서 협력할 수 있습니다. 출력을 보고 입력을 보낼 수 있습니다.

tsh join 또는 tsh kube join을 통해 세션에 참여할 때 --mode <mode> 명령줄 옵션을 사용하여 참여자 모드를 지정할 수 있으며, 여기서 <mode>peer, moderator, 또는 observer입니다. 기본 참여자 모드는 observer입니다.

observer 또는 moderator 모드로 있을 때 단축키 ^c (Control + c)를 사용하여 세션을 떠날 수 있습니다. 조정자 모드에서는 언제든지 단축키 t를 사용하여 세션을 강제로 종료할 수 있습니다.

다중 인증

역할 또는 클러스터 설정에서 per_session_mfatrue로 설정되면 Teleport는 새로운 세션을 시작할 때 다중 인증 검사를 요구합니다. 이 요구 사항은 세션 조정자에게도 적용됩니다. 따라서 세션에 참여하고자 하는 조정자는 다중 인증을 위한 장치를 구성해야 합니다.

Teleport는 30초마다 세션 조정자에게 다음 15초 이내에 다시 인증하도록 요청합니다. 이 동작은 세션 동안 계속되어 조정자가 항상 특정 세션을 관찰할 수 있도록 합니다.

60초 이내에 MFA 입력을 받지 못하면 사용자가 세션에서 연결 해제되며, 이는 요구 정책이 더 이상 충족되지 않기 때문에 세션이 종료되거나 일시 중지될 수 있습니다.

세션 종류

요구 및 허용 정책은 어떤 세션에 적용되는지 지정해야 합니다. 유효한 선택지는 sshk8s입니다.

  • 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에 있어야 파일 전송 요청 알림을 받을 수 있습니다. 파일 전송 요청이 있을 경우 모든 세션 참가자에게 알림이 전송되고 요청을 승인할지 거부할지를 묻는 메시지가 표시됩니다.

조정자가 파일 전송 요청을 거부하면 요청이 즉시 삭제되고 모든 세션 참가자가 통보됩니다.

세션을 시작하는 데 사용된 정책을 충족하기 위해 충분한 승인을 받은 후 파일 전송이 자동으로 시작됩니다.

관련 문서

Teleport 원문 보기