Infograb logo
Teleport 세션 녹화

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

세션 녹화가 캡처하는 내용

캡처되는 내용은 세션의 유형에 따라 다릅니다.

SSH 세션

Teleport는 세션의 전체 가상 터미널 (PTY) 출력을 캡처합니다. 세션 녹화의 의도는 사용자가 세션을 실행할 때 보았던 내용을 문서화하는 것입니다.

세션 녹화의 설계에는 일부 보안 위험이 따릅니다. 즉, 사용자는 터미널 명령을 숨기기 위해 인코딩 (예: base64 사용), 디스크 또는 인터넷에서 스크립트를 실행하거나 터미널 설정을 변경할 수 있습니다. 이러한 문제가 환경에 내포된 경우, 대신 BPF 기반의 향상된 세션 녹화 사용을 고려하십시오.

Kubernetes 세션

Teleport는 kubectl exec 호출의 전체 PTY 출력을 캡처합니다.

Kubernetes 세션 녹화는 SSH 세션 녹화와 동일한 보안 위험을 수반합니다.

데스크탑 세션

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

앱 세션

Teleport는 애플리케이션 액세스와 관련된 app.session.request 감사 이벤트 스트림을 캡처합니다. 감사 이벤트는 비공식적으로 "청크"라고 불리는 5분 단위로 그룹화됩니다.

데이터베이스 세션

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

세션 녹화 구성

Teleport는 두 가지 유형의 녹화 구성을 지원합니다: 동기 및 비동기 녹화. 추가로, Teleport 관리자는 녹화가 이루어지는 위치를 노드 또는 프록시로 구성할 수 있습니다.

이로 인해 4가지 가능한 세션 녹화 구성이 발생합니다:

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

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

Note

Windows, 데이터베이스 및 Kubernetes 세션은 이 세션 유형의 Teleport 서비스가 실행되는 호스트에서 항상 녹화되기 때문에 "노드" (데스크탑, 데이터베이스 또는 Kubernetes 클러스터)에서 Teleport 소프트웨어가 실행되지 않습니다.

이러한 이유로 Teleport Windows, Database 및 Kubernetes 서비스는 nodeproxy 를 동일하게 취급하고 (비동기 녹화 수행) node-syncproxy-sync 를 동일하게 취급합니다 (동기 녹화 수행).

SSH 노드에서 녹화

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

session-recording-diagram

프록시 서비스에서 녹화

녹화 프록시 모드에서 프록시 서비스는 SSH 에이전트 포워딩을 통해 클라이언트가 제공한 인증서를 사용하여 SSH 연결을 종료(복호화)한 다음, 최종 목적지 서버에 대한 자체 SSH 연결을 설정합니다. 이를 통해 프록시 서비스는 인증 서버에 기록할 SSH 세션 데이터를 전달할 수 있습니다.

recording-proxy

녹화 프록시 모드는 Teleport 사용자가 sshd 를 실행하는 OpenSSH 서버에 대한 세션 녹화를 활성화할 수 있게 하여, Teleport로 대규모 서버 집합을 점진적으로 전환할 때 도움이 됩니다.

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

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

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

녹화 프록시 모드를 활성화하는 방법에 대한 내용은 참조를 참조하십시오. 녹화 모드는 인증 서비스에서 구성됩니다.

동기화 녹화

동기화 녹화가 활성화되면, 녹화를 수행하는 Teleport 구성 요소(구성에 따라 Teleport SSH 서비스 또는 프록시 서비스 인스턴스)는 각 녹화 이벤트가 발생할 때마다 Teleport의 인증 서버에 전송합니다. 이 모드에서는 녹화 이벤트를 발생시키지 못하는 경우가 치명적으로 간주되며, 이벤트를 기록할 수 없는 경우 세션이 종료됩니다. 이는 모든 데이터가 기록되고 있다는 확신이 필요한 규제가 엄격한 환경에 가장 적합합니다. 또한 세션이 중단되거나 임시 연결 손실로 인해 종료되지 않도록 세션 지속 시간동안 인증 서버와 신뢰할 수 있고 저지연의 연결이 필요합니다.

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

비동기 녹화

비동기 녹화 시, 녹화 이벤트는 세션 중에 로컬 파일 시스템에 기록됩니다. 세션이 완료되면 Teleport가 파트를 완전한 녹화로 조합하고 전체 녹화를 인증 서버에 저장을 위해 제출합니다.

녹화 데이터가 디스크에 플러시되므로, 관리자는 시스템에 기대되는 Teleport 세션 수를 수용할 수 있는 충분한 디스크 공간이 있는지 확인해야 합니다. 또한, 녹화 데이터가 임시로 디스크에 저장되기 때문에, 업로드 완료 전에 변조되거나 삭제되거나 기타 방식으로 손상될 가능성이 더 큽니다.

비동기 녹화의 장점은 인증 서버에 대한 지속적인 연결이 필요하지 않다는 점입니다. 예를 들어, Teleport의 인증 서버가 다운되더라도 SSH 세션은 계속 운영될 수 있습니다. 세션이 완료되면 Teleport는 녹화를 인증 서버에 업로드하려고 시도합니다. 인증 서버가 여전히 사용할 수 없는 경우, Teleport는 인증 서버가 다시 온라인 상태가 될 때 아티팩트를 업로드할 수 있는 내장된 재시도 및 지연 메커니즘을 가지고 있습니다. 또한, 비동기 녹화는 추가적인 대화량을 기록하거나 인증 서버와의 연결이 불안정하거나 고지연 환경에서 세션 기록에 적합합니다.

저장소

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

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

Teleport 인증 서비스는 스토리지 백엔드에 직접 쓰는 유일한 구성 요소입니다.

세션 저장 백엔드는 Teleport의 클러스터 상태 또는 감사 로그 저장소와는 구별되며, 이는 SQLite, DynamoDB, Firestore 등과 같은 다른 서비스 세트를 지원합니다.

형식

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

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

재생

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

웹 UI에서 세션 녹화 페이지는 세션 종료 이벤트에 대한 Teleport의 감사 로그를 쿼리하여 채워지며, 여기에는 녹화에 대한 메타데이터가 포함됩니다. 이는 Teleport 사용자에게 때때로 놀라울 수 있습니다. 왜냐하면 녹화와 감사 로그가 별도의 백엔드에 저장되지만, 녹화를 재생하려면 둘 다 작동해야 하기 때문입니다.

업로드 완성기

모든 Teleport 프로세스는 업로드 완성기라는 서비스를 실행하며, 이 서비스는 주기적으로 버려진 업로드를 확인하고 녹화와 연결된 세션 추적기가 활성화되어 있지 않으면 이를 완료합니다. 기본적으로 업로드 완성기는 5분마다 실행되며, 세션 추적기는 30분의 만료 기간을 가집니다. 이는 서비스가 다시 온라인 상태가 된 후 버려진 업로드가 완료되기까지 최대 ~35분이 걸릴 수 있음을 의미합니다.

비동기 녹화 모드에서 세션 중에 노드가 다운되면 부분적으로 완료된 녹화가 노드의 디스크에 남아 있게 됩니다. 노드의 업로드 완성기는 결국 버려진 업로드를 감지하고 이를 Teleport Auth Server로 스트리밍하여 저장 백엔드에 기록됩니다.

동기 녹화 모드에서는 Teleport의 Auth Server가 녹화를 직접 저장소로 스트리밍합니다. 세션 중에 Auth Server가 다운되면 완료되지 않은 업로드는 일련의 부분으로 남아 있게 되며(클라우드 저장소 또는 Auth Server의 디스크에), 버려진 업로드를 감지하고 이를 완료하는 것은 Auth Server의 업로드 완성기의 책임입니다.

관련 자료

Teleport 원문 보기