Infograb logo
텔레포트 세션 녹화

이 페이지는 텔레포트가 세션을 녹화하는 방법과 세션 녹화에 적용되는 다양한 구성 옵션에 대한 개요를 제공합니다.

세션 녹화가 캡처하는 내용

캡처되는 콘텐츠는 세션의 유형에 따라 다릅니다.

SSH 세션

텔레포트는 세션의 전체 가상 터미널(PTY) 출력을 캡처합니다. 세션 녹화의 의도는 사용자가 세션을 실행할 때 무엇을 보았는지를 문서화하는 것입니다.

세션 녹화의 설계에는 일부 보안 위험이 있습니다. 즉, 사용자는터미널 명령을 인코딩하여 숨길 수 있습니다(예: base64 사용),디스크나 인터넷에서 스크립트를 실행하거나,터미널 설정을 변경할 수 있습니다. 이것이 귀하의 환경에 문제를 일으킨다면,대신 BPF 기반의 Enhanced Session Recording 사용을 고려하세요.

Kubernetes 세션

텔레포트는 kubectl exec 호출의 전체 PTY 출력을 캡처합니다. Kubernetes 세션 녹화는 SSH 세션 녹화와 동일한 보안 위험을 포함합니다.

데스크탑 세션

텔레포트는 데스크탑 화면의 내용과 모든 마우스 입력을 캡처합니다. 텔레포트는 원격 데스크탑에서 키스트로크를 캡처하지 않습니다.

앱 세션

텔레포트는 애플리케이션 액세스와 관련된 app.session.request 감사 이벤트의 스트림을 캡처합니다. 감사 이벤트는 비공식적으로 "청크"라고 불리는 5분 간격으로 나눠집니다.

데이터베이스 세션

텔레포트는 데이터베이스 쿼리와 접근 중인 데이터베이스와 관련된 감사 이벤트의 스트림을 캡처합니다.

세션 녹화 구성

텔레포트는 동기 및 비동기 녹화의 두 가지 다른 녹화 구성을 지원합니다. 또한, 텔레포트 관리자는 녹화가 이루어지는 위치를 노드 또는 프록시로 구성할 수 있습니다.

이는 4가지 가능한 세션 녹화 구성으로 이어집니다:

  • node-sync: SSH 서비스 인스턴스에서 수행되는 동기 녹화
  • node: SSH 서비스 인스턴스에서 수행되는 비동기 녹화
  • proxy-sync: 프록시 서비스 인스턴스에서 수행되는 동기 녹화
  • proxy: 프록시 서비스 인스턴스에서 수행되는 비동기 녹화

이것은 클러스터 전체에 적용되는 구성 옵션으로, 텔레포트 클러스터 전체에 적용됩니다. 이것은 teleport.yamlauth_service 섹션에서 session_recording을 설정하거나, session_recording_config 리소스를 사용하여 동적으로 구성할 수 있습니다. 다른 리소스 집합에 대해 다른 녹화 구성을 적용해야 하는 경우, 자체 녹화 구성이 있는 신뢰할 수 있는 클러스터를 설정할 수 있습니다.

Note

Windows, 데이터베이스 및 Kubernetes 세션은 이 세션 유형을 실행하는 호스트에서 항상 기록됩니다. 이는 "노드"(데스크탑, 데이터베이스 또는 Kubernetes 클러스터)에서 텔레포트 소프트웨어가 실행되지 않기 때문입니다.

이러한 이유로 텔레포트 Windows, 데이터베이스 및 Kubernetes 서비스는 nodeproxy를 동일하게 취급합니다(비동기 녹화 수행) 그리고 node-syncproxy-sync를 동일하게 취급합니다(동기 녹화 수행).

SSH 노드에서 녹화

기본적으로 텔레포트는 SSH 노드에서 녹화를 수행합니다. 이는 텔레포트의 프록시 서버가 노드로 가는 SSH 트래픽을 볼 수 없기 때문입니다. 암호화는 종단 간 (SSH 클라이언트에서 SSH 서버까지) 이루어집니다:

session-recording-diagram

프록시 서비스에서 녹화

녹화 프록시 모드에서 프록시 서비스는 SSH 연결을 종료(복호화)한 후 클라이언트에서 제공된 인증서를 사용하여 최종 목적지 서버에 자신의 SSH 연결을 설정합니다. 이렇게 하면 프록시 서비스가 SSH 세션 데이터를 녹화되도록 인증 서버에 전달할 수 있습니다.
아래와 같이:

recording-proxy

녹화 프록시 모드에서는 텔레포트 사용자가 sshd를 실행하는 OpenSSH 서버에 대해 세션 녹화를 활성화할 수 있으며, 이는 대규모 서버 fleets를 텔레포트로 단계적으로 전환할 때 유용합니다.

우리는 녹화 프록시 모드가 덜 안전하다고 생각합니다. 프록시 서비스에 추가 권한을 부여하기 때문입니다. 프록시 서비스는 SSH 연결을 복호화하는 자격 증명이 필요하므로, 적절한 보안이 필요하며, 프록시 서비스 인스턴스가 복호화할 수 없는 데이터는 공격자에게 더 귀중한 표적이 됩니다.

또한 프록시 서비스가 SSH 연결을 복호화하는 데 사용하는자격 증명은 SSH 에이전트 포워딩을 통해 제공되므로 프록시 서비스에서 녹화하려면 에이전트 포워딩을 활성화해야 합니다.

그러나 프록시 기반 세션 녹화에도 장점이 있습니다. SSH 노드에서 세션이 녹화될 때, 루트 사용자는 iptables 규칙을 추가하여 세션 로그가 인증 서비스에 도달하는 것을 방지할 수 있습니다. 프록시 서비스에서 녹화된 세션에서는 노드에서 루트 권한이 있는 사용자가 감사 로그를 비활성화할 방법이 없습니다.

녹화 프록시 모드를 활성화하는 방법에 대한 참고 자료를 참조하세요. 녹화 모드는 인증 서비스에서 구성됩니다.

동기 녹화

동기 녹화가 활성화되면, 녹화를 수행하는 텔레포트 구성 요소(사용자의 구성에 따라 텔레포트 SSH 서비스 또는 프록시 서비스 인스턴스)는 발생할 때마다 각 녹화 이벤트를 텔레포트의 인증 서버에 제출합니다. 이 모드에서는 녹화 이벤트를 방출하지 못하면 치명적인 것으로 간주되며, 이벤트가 기록되지 않으면 세션이 종료됩니다. 이로 인해 동기 녹화는 모든 데이터가 기록되고 확신할 수 있어야 하는 고도로 규제된 환경에 가장 적합합니다. 또한, 세션 중에 일시적인 연결 손실로 인해 세션이 중단되거나 종료되지 않도록 하려면 신뢰할 수 있고 낮은 대기 시간의 인증 서버에 연결이 필요합니다.

동기 녹화 모드에서 인증 서버는 녹화 이벤트의 스트림을 수신하고, 이를 최종 아티팩트로 조립하고 저장 백엔드에 업로드하는 책임이 있습니다. 데이터가 인증 서버로 직접 스트리밍되므로, 텔레포트 관리자는 텔레포트 SSH 서비스 및 프록시 서비스 인스턴스의 디스크 공간에 대해걱정할 필요가 없으며, 그 디스크에는 녹화 데이터가 기록되지 않습니다.

비동기 녹화

비동기 녹화에서는 세션 중에 로컬 파일 시스템에 녹화 이벤트가 기록됩니다. 세션이 완료되면 텔레포트는 이 부분들을 완전한 녹화로 조립한 후 전체 녹화를 인증 서버에 제출하여 저장합니다.

녹화 데이터가 디스크에 플러시되므로, 관리자는 예상되는 텔레포트 세션 수에 충분한 디스크 공간이 있는지 확인해야 합니다. 또한, 녹화 데이터가 임시로 디스크에 저장되면서 업로드가 완료되기 전에 변조되거나 삭제되거나 다른 방식으로 손상될 가능성이 더 높습니다.

비동기 녹화의 장점은 인증 서버에 지속적인 연결이 필요하지 않다는 것입니다. 예를 들어, 텔레포트의 인증 서버가 다운되더라도 SSH 세션은 계속 운영될 수 있습니다. 세션이 완료되면 텔레포트는 인증 서버에 녹화를 업로드하려고 시도합니다. 인증 서버가 여전히 사용할 수 없는 경우, 텔레포트는 인증 서버가 온라인 상태로 돌아올 때 아티팩트를 업로드하기 위한 빌트인 재시도 및 백오프 메커니즘을 갖추고 있습니다. 또한 비동기 녹화는 세션이 매우 활발하거나 인증 서버에 대한 연결이 신뢰할 수 없거나 대기 시간이 긴 환경에서도 적합합니다.

저장소

세션 녹화는 텔레포트의 감사 세션 백엔드에 저장되며, 이는 teleport.yaml 구성 파일에서 audit_sessions_uri 필드에 의해 지정됩니다.
텔레포트는 현재 다음과 같은 세션 저장소 백엔드를 지원합니다:

  • 파일: 로컬 파일 시스템에 녹화를 저장합니다.
    개발 환경, 데모 및 소규모 가정 환경에 적합합니다.
  • S3: AWS S3 버킷 또는 S3 호환 스토리지에 녹화를 저장합니다.
    프로덕션 배포에 적합합니다.
  • GCS: Google Cloud Storage에 녹화를 저장합니다.
    프로덕션 배포에 적합합니다.

텔레포트 인증 서비스는 저장소 백엔드에 직접 기록하는 유일한 구성 요소입니다.

세션 저장소 백엔드는 텔레포트의 클러스터 상태 또는 감사 로그 저장소와 다르며, 그것은 다른 서비스 집합을 지원합니다(예: SQLite, DynamoDB, Firestore 등).

형식

텔레포트 세션 녹화는 세션과 관련된 구조화된 이벤트의 정렬된 시퀀스입니다. 각 이벤트는 인코딩된 프로토콜 버퍼이며, 전체 세션은 저장소 백엔드에 기록되기 전에 gzip으로 압축됩니다.

이러한 녹화는 역호환성을 위해 .tar 확장자를 가지지만, TAR 아카이브가 아니며 tar 유틸리티로 읽을 수 없다는 점을 유의해야 합니다.

재생

SSH 및 Kubernetes 세션은 텔레포트의 웹 UI에서 재생하거나 tsh play 명령어를 사용할 수 있습니다.데스크탑 세션 녹화는 웹 UI에서만 재생할 수 있습니다.

웹 UI에서 세션 녹화 페이지는 세션 종료 이벤트에 대한 텔레포트의 감사 로그를 쿼리하여 채워지며, 이는 녹화에 대한 메타데이터를 포함합니다. 이는 때때로 텔레포트 사용자에게 놀라움을 줄 수 있습니다. 녹화 및 감사 로그가 별도의 백엔드에 저장되더라도, 두 개 모두 재생을 위해 작동해야 합니다.

업로드 완료자

모든 텔레포트 프로세스는 업로드 완료자라는 서비스를 실행하며, 이는 주기적으로 방치된 업로드를 확인하고 활성 세션 추적기가 없는 경우 이를 완료합니다. 기본적으로 업로드 완료자는 매 5분마다 실행되며, 세션 추적자는 30분의 만료 기간을 가집니다. 즉, 서비스가 다시 온라인 상태로 돌아온 후에 방치된 업로드가 완료되는 데 최대 35분이 걸릴 수 있습니다.

비동기 녹화 모드에서, 세션 중에 노드가 다운되면 부분적으로 완료된 녹화는 노드의 디스크에 남아 있습니다. 노드의 업로드 완료자는 결국 방치된 업로드를 감지하고 주기적으로 텔레포트 인증 서버로 스트리밍하여 저장소 백엔드에 기록합니다.

동기 녹화 모드에서는 텔레포트의 인증 서버가 녹화를 저장소에 직접 스트리밍합니다. 세션 동안 인증 서버가 다운되면, 완료되지 않은 업로드는 일련의 파트(클라우드 저장소 또는 인증 서버의 디스크)에 남아 있으며, 이는 인증 서버의 업로드 완료자가 방치된 업로드를 감지하고 완료하는 책임이 있습니다.

관련 읽기

Teleport 원문 보기