Infograb logo
감사 이벤트 및 기록

Teleport는 다양한 이벤트를 감사 로그로 방출하여 클러스터 활동을 기록합니다. 감사 로그에는 두 가지 구성 요소가 있습니다:

  • 클러스터 이벤트: Teleport는 원격 IP 주소, 시간 및 세션 ID와 같은 메타데이터와 함께 성공적인 사용자 로그인을 기록합니다.
  • 기록된 세션: 모든 SSH, 데스크톱 또는 Kubernetes 셸 세션은 기록되며 나중에 재생할 수 있습니다. 기본적으로 기록은 Teleport 노드에 의해 수행되지만 프록시에 의해 수행되도록 구성할 수 있습니다.
  • 클러스터 이벤트: Teleport는 원격 IP 주소, 시간 및 세션 ID와 같은 메타데이터와 함께 성공적인 사용자 로그인을 기록합니다.
  • 기록된 세션: 모든 SSH, 데스크톱 또는 Kubernetes 셸 세션은 기록되며 나중에 재생할 수 있습니다. Teleport Cloud는 세션 기록 데이터의 저장을 관리합니다.

향상된 세션 기록 BPF를 사용하여 더 포괄적인 감사 로그를 얻을 수 있습니다.

이벤트

Teleport는 감사 이벤트를 저장하기 위해 여러 스토리지 백엔드를 지원합니다. dir 백엔드는 Auth Service 호스트의 로컬 파일 시스템을 사용합니다. 이 백엔드가 사용될 때 이벤트는 JSON 형식으로 파일 시스템에 기록됩니다. dir 백엔드는 이벤트 파일을 약 24시간마다 회전시키지만 캡처된 이벤트를 삭제하지는 않습니다.

고가용성 구성의 경우, 사용자는 SSH 이벤트와 기록된 세션을 네트워크 스토리지에 저장하는 방법에 대한 정보는 Athena, DynamoDB 또는 Firestore 장을 참조할 수 있습니다. 이러한 백엔드를 사용하는 경우 감사 이벤트는 결국 만료되어 로그에서 제거됩니다. 기본 보존 기간은 1년이지만 retention_period 구성 매개변수를 사용하여 재정의할 수 있습니다.

감사 로그를 여러 장소에 동시에 저장하는 것도 가능합니다. 감사 로그를 구성하는 방법에 대한 자세한 내용은 Teleport 구성 참조의 예제 구성 파일 storage 섹션을 참조하세요.

dir 백엔드를 사용하여 Teleport 감사 로그를 살펴보겠습니다. 이벤트 로그는 Teleport의 데이터 디렉터리 내의 log 디렉토리에 저장됩니다. 일반적으로 /var/lib/teleport/log에 위치합니다. 각 날짜는 파일로 표현됩니다:

ls -l /var/lib/teleport/log/

total 104

-rw-r----- 1 root root 31638 Jan 22 20:00 2017-01-23.00:00:00.log

-rw-r----- 1 root root 91256 Jan 31 21:00 2017-02-01.00:00:00.log

-rw-r----- 1 root root 15815 Feb 32 22:54 2017-02-03.00:00:00.log

Teleport Enterprise Cloud는 감사 로그의 저장을 자동으로 관리합니다. 다음을 클릭하여 감사 로그에 액세스할 수 있습니다:

활동 > 감사 로그

감사 로그는 JSON 형식을 사용합니다. 인간이 읽을 수 있지만 프로그램적으로도 구문 분석할 수 있습니다. 각 라인은 이벤트를 나타내며 다음과 같은 형식을 갖습니다:

{
    // 이벤트 유형. 가능한 모든 이벤트 유형 목록은 아래를 참조합니다.
    "event": "session.start",
    // 이벤트 로그에 대한 고유 ID. 중복 제거에 유용합니다.
    "uid": "59cf8d1b-7b36-4894-8e90-9d9713b6b9ef",
    // Teleport 사용자 이름
    "user": "ekontsevoy",
    // OS 로그인
    "login": "root",
    // 서버 네임스페이스. 이 필드는 미래의 사용을 위해 예약되었습니다.
    "namespace": "default",
    // 고유 서버 ID
    "server_id": "f84f7386-5e22-45ff-8f7d-b8079742e63f",
    // 서버 레이블
    "server_labels": {
      "datacenter": "us-east-1",
      "label-b": "x"
    }
    // 세션 ID. 세션을 재생하는 데 사용할 수 있습니다.
    "sid": "8d3895b6-e9dd-11e6-94de-40167e68e931",
    // SSH 노드의 주소
    "addr.local": "10.5.l.15:3022",
    // 연결 클라이언트 (사용자)의 주소
    "addr.remote": "73.223.221.14:42146",
    // 터미널 크기
    "size": "80:25",
    // 타임스탬프
    "time": "2017-02-03T06:54:05Z"
}

이벤트 유형

아래는 몇 가지 가능한 감사 이벤트 유형입니다.

이 목록은 포괄적이지 않습니다. 감사 이벤트를 자동으로 구문 분석하여 event 키로 그룹화 및 필터링하고 트렌드를 발견할 수 있는 플랫폼에 내보내는 것을 권장합니다. 감사 이벤트 내보내기를 설정하려면 Teleport 감사 이벤트 내보내기를 읽어보세요.

이벤트 유형설명
auth인증 시도. 다음 필드를 추가합니다: {"success": "false", "error": "access denied"}
session.start대화형 셸 세션이 시작되었습니다.
session.end대화형 셸 세션이 종료되었습니다.
session.join새 사용자가 기존 대화형 셸 세션에 참여했습니다.
session.leave사용자가 세션을 떠났습니다.
session.disk세션 중 열려 있는 파일 목록. 향상된 세션 기록이 필요합니다.
session.network세션 중 생성된 네트워크 연결 목록. 향상된 세션 기록이 필요합니다.
session.command세션 중 실행된 명령 목록. 향상된 세션 기록이 필요합니다.
session.recording.access세션 기록에 접근했습니다.
exectsh ssh root@node ls /와 같이 원격 명령이 SSH를 통해 실행되었습니다. 다음 필드가 기록됩니다: {"command": "ls /", "exitCode": 0, "exitError": ""}
scp원격 파일 복사가 실행되었습니다. 다음 필드가 기록됩니다: {"path": "/path/to/file.txt", "len": 32344, "action": "read" }
resize터미널 크기가 변경되었습니다.
user.login사용자가 웹 UI 또는 tsh를 통해 로그인했습니다. 다음 필드가 기록됩니다: {"user": "alice@example.com", "method": "local"} .
app.session.start사용자가 애플리케이션에 액세스했습니다.
app.session.chunk애플리케이션 세션 중 활동 기록
join_token.create새로운 참여 토큰이 생성되었습니다. 다음 필드를 추가합니다: {"roles": ["Node", "Db"], "join_method": "token"}

기록된 세션

시작 및 종료 이벤트를 기록하는 것 외에도 Teleport는 전체 세션을 기록할 수 있습니다. SSH 또는 Kubernetes 세션의 경우 PTY에서 바이트 스트림 전체를 캡처합니다. 데스크톱 세션의 경우 기록에는 화면 내용이 포함됩니다.

Teleport는 기록된 세션을 AWS S3 버킷에서 저장하거나 로컬 파일 시스템(NFS 포함)에 저장할 수 있습니다.

기록된 세션은 log 아래의 sessions 디렉토리에 원시 바이트로 저장됩니다. 각 세션은 protobuf 인코딩된 이진 데이터 스트림입니다.

tsh play 명령어 또는 웹 UI를 사용하여 기록된 세션을 재생할 수 있습니다.

예를 들어, CLI를 통해 세션을 재생하려면:

tsh play 4c146ec8-eab6-11e6-b1b3-40167e68e931

세션 이벤트를 JSON 형식으로 stdout에 출력합니다:

tsh play 4c146ec8-eab6-11e6-b1b3-40167e68e931 --format=json

Teleport Enterprise Cloud는 기록된 세션을 자동으로 저장합니다.

tsh play 명령어 또는 웹 UI를 사용하여 기록된 세션을 재생할 수 있습니다.

예를 들어, CLI를 통해 세션을 재생하려면:

tsh play 4c146ec8-eab6-11e6-b1b3-40167e68e931

세션 이벤트를 JSON 형식으로 stdout에 출력합니다:

tsh play 4c146ec8-eab6-11e6-b1b3-40167e68e931 --format=json

모드

SSH 세션에만 사용할 수 있으며 Teleport가 auth_service.session_recording: node로 구성된 경우입니다.

모드는 Teleport가 녹화 실패(예: 디스크 공간 부족 오류)에 대한 처리 방식을 정의합니다. 이는 역할 수준에서 서비스별로 구성되며, 가장 엄격한 값이 우선합니다. 사용 가능한 모드는 다음과 같습니다:

모드녹화 실패 후
최선의 노력 (best_effort)세션을 종료하지 않고 녹화를 비활성화합니다.
엄격 (strict)즉시 세션을 종료합니다.

사용자 역할에서 녹화 모드를 지정하지 않은 경우 best_effort가 사용됩니다. 다음은 SSH 세션에서 엄격 모드를 사용하도록 구성된 역할의 예입니다:

kind: role
version: v5
metadata:
  name: ssh-strict
spec:
  options:
    record_session:
      ssh: strict
Teleport 원문 보기