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 섹션을 참조하십시오.

Teleport 감사 로그를 dir 백엔드를 사용하여 살펴보겠습니다. 이벤트 로그는 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는 감사 로그 저장을 관리합니다. 다음을 클릭하여 Teleport 웹 UI에서 감사 로그에 액세스할 수 있습니다:

활동 > 감사 로그

감사 로그는 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 원문 보기