감사 이벤트 스키마 및 예시
GitLab v19.3Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
요약
감사 이벤트는 응답 본문에 예측 가능한 스키마를 가집니다. 감사 이벤트가 GitLab Duo Agent Platform과 관련된 경우, details 객체에 duo_related 필드가 true로 설정되어 포함됩니다.
감사 이벤트 스키마#
감사 이벤트는 응답 본문에 예측 가능한 스키마를 가집니다.
| 필드 | 설명 | 참고사항 | 스트리밍 전용 필드 |
|---|---|---|---|
author_id |
이벤트를 트리거한 사용자의 사용자 ID | ❌ | |
author_name |
이벤트를 트리거한 작성자의 사람이 읽을 수 있는 이름 | 작성자가 더 이상 존재하지 않을 때 유용함 | ✅ |
created_at |
이벤트가 트리거된 타임스탬프 | ❌ | |
details |
추가 메타데이터를 포함하는 JSON 객체 | 정해진 스키마가 없지만 종종 이벤트에 대한 추가 정보를 포함 | ❌ |
entity_id |
감사 이벤트 엔티티의 ID | ❌ | |
entity_path |
감사 가능한 이벤트의 영향을 받는 엔티티의 전체 경로 | ✅ | |
entity_type |
엔티티 유형의 문자열 표현 | 허용되는 값에는 User, Group, Key가 포함됩니다. 이 목록은 완전하지 않습니다 |
❌ |
event_type |
감사 이벤트 유형의 문자열 표현 | ✅ | |
id |
감사 이벤트의 고유 식별자 | 필요한 경우 중복 제거에 사용할 수 있습니다 | ❌ |
ip_address |
이벤트를 트리거하는 데 사용된 호스트의 IP 주소 | ✅ | |
target_details |
대상에 대한 추가 세부 정보 | ✅ | |
target_id |
감사 이벤트 대상의 ID | ✅ | |
target_type |
대상 유형의 문자열 표현 | ✅ |
감사 이벤트 JSON 스키마#
{
"properties": {
"id": {
"type": "string"
},
"author_id": {
"type": "integer"
},
"author_name": {
"type": "string"
},
"details": {},
"ip_address": {
"type": "string"
},
"entity_id": {
"type": "integer"
},
"entity_path": {
"type": "string"
},
"entity_type": {
"type": "string"
},
"event_type": {
"type": "string"
},
"target_id": {
"type": "integer"
},
"target_type": {
"type": "string"
},
"target_details": {
"type": "string"
},
},
"type": "object"
}
GitLab Duo 관련 이벤트#
히스토리
- GitLab 19.3에서 도입됨.
감사 이벤트가 GitLab Duo Agent Platform과 관련된 경우, details 객체에 duo_related 필드가 true로 설정되어 포함됩니다.
다음 이벤트에 이 필드가 포함될 수 있습니다:
| 이벤트 유형 | 설명 |
|---|---|
application_setting_updated |
GitLab Duo Agent Platform과 관련된 애플리케이션 설정이 업데이트되었습니다. |
member_destroyed |
GitLab Duo Agent Platform 서비스 계정의 멤버십이 제거되었습니다. |
서비스 계정 이름 패턴 대신 이 필드를 사용하여 SIEM(Security Information and Event Management) 도구나 기타 외부 도구에서 GitLab Duo Agent Platform 활동을 식별하세요.
복합 ID로 생성된 이벤트#
히스토리
- GitLab 19.3에서 도입됨.
서비스 계정이 복합 ID를 가진 사람 사용자를 대신하여 작업을 수행하면, 감사 이벤트는 서비스 계정에 귀속됩니다:
-
author_id에는 서비스 계정의 사용자 ID가 포함됩니다. -
author_name에는<service account name> on behalf of @<human username>이 포함되며, 255자로 잘립니다. 이 값은 감사 이벤트 페이지의 Author 열과 CSV 내보내기에 표시됩니다.
details 객체는 작업을 승인한 사람 사용자를 기록합니다:
| 필드 | 설명 |
|---|---|
human_author_id |
사람 사용자의 사용자 ID |
human_author_name |
사람 사용자의 이름 |
human_author_username |
사람 사용자의 사용자 이름 |
이러한 필드는 스트리밍된 감사 이벤트와 감사 이벤트 API가 반환하는 details 객체에 포함됩니다.
이러한 이벤트의 경우 details 객체의 author_class 필드에 Gitlab::Audit::CompositeIdentityAuthor가 포함됩니다. 이 값을 사용하여 SIEM 또는 기타 외부 도구에서 복합 ID 이벤트를 식별하세요.
ai_agent_session_started 및 ai_tool_invoked와 같은 AI 에이전트 세션 이벤트도 human_author_* 필드를 기록하지만 이 author_class 값을 사용하지는 않습니다. 두 종류의 이벤트를 모두 일치시키려면 대신 human_author_id의 존재 여부로 필터링하세요.
사람 사용자가 작업을 수행하고 서비스 계정이 작업에 참여하기만 한 경우(예: 사람 사용자가 서비스 계정을 머지 리퀘스트 리뷰어로 지정하는 경우), 감사 이벤트는 사람 사용자에게 귀속되며 human_author_* 필드는 추가되지 않습니다.
헤더#
헤더 형식은 다음과 같습니다:
POST /logs HTTP/1.1
Host:
Content-Type: application/x-www-form-urlencoded
X-Gitlab-Event-Streaming-Token:
X-Gitlab-Audit-Event-Type: repository_git_operation
예시: Git 작업의 감사 이벤트 스트리밍#
스트리밍 감사 이벤트는 인증된 사용자가 프로젝트의 원격 Git 리포지터리를 푸시, 풀 또는 clone할 때 전송될 수 있습니다:
- SSH 사용.
- HTTP 또는 HTTPS 사용.
- GitLab UI에서 Download ([download]) 사용.
로그인하지 않은 사용자에 대해서는 감사 이벤트가 캡처되지 않습니다. 예를 들어, 공개 프로젝트를 다운로드할 때입니다.
예시: 배포 키를 사용한 SSH over Git 이벤트의 감사 이벤트 페이로드#
히스토리
custom_message의gl_key_type및gl_key_id필드가 GitLab 19.3에서 도입됨.
Fetch:
{
"id": "1",
"author_id": -3,
"entity_id": 29,
"entity_type": "Project",
"details": {
"author_name": "deploy-key-name",
"author_class": "DeployKey",
"target_id": 29,
"target_type": "Project",
"target_details": "example-project",
"custom_message": {
"protocol": "ssh",
"action": "git-upload-pack",
"written_bytes": 1048576,
"received_bytes": 2048,
"gl_key_type": "deploy_key",
"gl_key_id": 24
},
"ip_address": "127.0.0.1",
"entity_path": "example-group/example-project"
},
"ip_address": "127.0.0.1",
"author_name": "deploy-key-name",
"entity_path": "example-group/example-project",
"target_details": "example-project",
"created_at": "2022-07-26T05:43:53.662Z",
"target_type": "Project",
"target_id": 29,
"event_type": "repository_git_operation"
}
custom_message 객체에는 Git 작업의 데이터 전송 크기 필드가 포함됩니다:
-
written_bytes: Git 작업 중 클라이언트로 전송된 바이트 수(예: 클론, fetch, 풀 작업 시). -
received_bytes: Git 작업 중 클라이언트로부터 수신된 바이트 수(예: 푸시 작업 시).
이러한 필드는 데이터가 전송되지 않은 경우(예: 데이터 교환 전에 요청이 실패하는 경우)에는 생략됩니다.
custom_message 객체에는 SSH 키 또는 배포 키로 인증된 Git 작업의 키 정보가 포함됩니다:
-
gl_key_type: 인증에 사용된 키의 유형. 사용자 SSH 키의 경우key, 배포 키의 경우deploy_key입니다. -
gl_key_id: 인증에 사용된 키의 ID.
이러한 필드는 작업이 키로 인증되지 않은 경우(예: 사용자 이름과 비밀번호를 사용한 HTTP(S) 또는 배포 토큰)에는 생략됩니다.