GitHub 감사 로그 수집
개요
이 파서는 JSON 형식의 GitHub 감사 로그를 처리합니다. 이 스크립트는 여러 필드를 삭제하여 입력을 정리하고, process_type 필드를 기반으로 여러 grok 및 키-값 작업을 실행하여 관련 정보를 추출하고, 추출된 필드를 UDM에 매핑하고, Google SecOps 처리를 위해 출력을 구성합니다. 또한 특정 특이 사례를 처리하고 GitHub 감사 로그 내의 다양한 로그 하위유형에 대한 데이터 변환을 실행합니다.
시작하기 전에
- Google SecOps 인스턴스가 있는지 확인합니다.
- GitHub 저장소에 대한 권한이 있는지 확인합니다.
GitHub 로그를 수집하도록 Google SecOps에서 피드 구성
- SIEM 설정 > 피드로 이동합니다.
- 새로 추가를 클릭합니다.
- 피드 이름 필드에 피드 이름을 입력합니다 (예: GitHub 로그).
- 소스 유형으로 Webhook을 선택합니다.
- 로그 유형으로 GitHub를 선택합니다.
- 다음을 클릭합니다.
- 선택사항: 다음 입력 매개변수의 값을 지정합니다.
- 분할 구분 기호: 로그 줄을 구분하는 데 사용되는 구분 기호입니다(예:
\n
). - 애셋 네임스페이스: 애셋 네임스페이스입니다.
- 수집 라벨: 이 피드의 이벤트에 적용된 라벨입니다.
- 분할 구분 기호: 로그 줄을 구분하는 데 사용되는 구분 기호입니다(예:
- 다음을 클릭합니다.
- 확정 화면에서 피드 구성을 검토한 다음 제출을 클릭합니다.
- 보안 비밀 키 생성을 클릭하여 이 피드를 인증하기 위한 보안 비밀 키를 생성합니다.
- 비밀 키를 복사하여 저장합니다. 이 보안 비밀 키는 다시 볼 수 없습니다. 필요한 경우 새 보안 비밀 키를 재생성할 수 있지만 이 작업을 하면 이전 보안 비밀 키는 더 이상 사용할 수 없게 됩니다.
- 세부정보 탭의 엔드포인트 정보 필드에서 피드 엔드포인트 URL을 복사합니다. 클라이언트 애플리케이션에서 이 엔드포인트 URL을 지정해야 합니다.
- 완료를 클릭합니다.
웹훅 피드에 대한 API 키 만들기
Google Cloud 콘솔 > 사용자 인증 정보로 이동합니다.
사용자 인증 정보 만들기를 클릭한 후 API 키를 선택합니다.
Google Security Operations API에 대한 API 키 액세스를 제한합니다.
엔드포인트 URL 지정
- 클라이언트 애플리케이션에서 웹훅 피드에 제공된 HTTPS 엔드포인트 URL을 지정합니다.
다음 형식의 커스텀 헤더의 일부로 API 키와 보안 비밀 키를 지정하여 인증을 사용 설정합니다.
X-goog-api-key = API_KEY X-Webhook-Access-Key = SECRET
권장사항: URL에 API 키를 지정하는 대신 헤더로 지정하세요. 웹훅 클라이언트가 커스텀 헤더를 지원하지 않는 경우 다음 형식의 쿼리 매개변수를 사용하여 API 키와 보안 비밀 키를 지정할 수 있습니다.
ENDPOINT_URL?key=API_KEY&secret=SECRET
다음을 바꿉니다.
ENDPOINT_URL
: 피드 엔드포인트 URL입니다.API_KEY
: Google Security Operations에 인증하기 위한 API 키입니다.SECRET
: 피드를 인증하기 위해 생성한 보안 비밀 키입니다.
GitHub에서 웹후크 만들기
이 가이드에서는 GitHub에서 웹훅을 만들어 Google SecOps로 데이터를 전송하는 방법을 단계별로 안내합니다.
- GitHub 저장소로 이동합니다.
- 설정으로 이동합니다.
- 웹훅을 클릭합니다.
- 웹훅 추가를 클릭합니다.
- 페이로드 URL 필드에 Google SecOps API 엔드포인트 URL을 입력합니다.
콘텐츠 유형으로 application/json을 선택합니다.
선택사항: 보안을 강화하려면 보안 비밀을 설정합니다. 이렇게 하면 웹훅 페이로드의 서명이 생성되므로 Google SecOps 측에서 진위성을 확인할 수 있습니다. 보안 비밀을 사용하는 경우 Google SecOps 피드에서도 구성합니다.
웹훅을 트리거하는 이벤트를 선택합니다. 포괄적인 로깅을 위해 개별 이벤트 직접 선택을 선택하고 관련 이벤트 (예: 푸시, 풀 요청, 문제)를 선택합니다. 확실하지 않다면
push
이벤트만으로 시작합니다.Active(활성) 체크박스가 선택되어 있는지 확인합니다.
웹훅 추가를 클릭하여 구성을 저장합니다.
UDM 매핑 표
로그 필드 | UDM 매핑 | 논리 |
---|---|---|
_document_id |
read_only_udm.additional.fields.[].key , read_only_udm.additional.fields.[].value.string_value |
원시 로그의 _document_id 는 UDM 내 additional.fields 배열의 키-값 쌍에 매핑됩니다. |
action |
read_only_udm.metadata.product_event_type , read_only_udm.security_result.summary |
action 필드는 메타데이터의 product_event_type 및 security_result 의 summary 에 매핑됩니다. |
actor |
read_only_udm.principal.user.userid |
작업을 실행하는 사용자를 나타내는 actor 필드는 principal.user.userid 에 매핑됩니다. |
actor_id |
read_only_udm.principal.user.attribute.labels.[].key , read_only_udm.principal.user.attribute.labels.[].value |
actor_id 는 principal.user.attribute.labels 배열 내에 라벨로 매핑됩니다. |
actor_ip |
read_only_udm.principal.ip |
작업 수행자의 IP 주소가 principal.ip 에 매핑됩니다. |
actor_location.country_code |
read_only_udm.principal.location.country_or_region |
행위자의 국가 코드는 principal.location.country_or_region 에 매핑됩니다. |
application_name |
read_only_udm.target.application |
애플리케이션 이름은 target.application 에 매핑됩니다. |
business |
read_only_udm.target.user.company_name , read_only_udm.additional.fields.[].key , read_only_udm.additional.fields.[].value.string_value |
비즈니스 이름은 target.user.company_name 에 매핑되고 additional.fields 에서 키-값 쌍으로 매핑됩니다. |
business_id |
read_only_udm.target.resource.attribute.labels.[].key , read_only_udm.target.resource.attribute.labels.[].value |
비즈니스 ID는 target.resource.attribute.labels 배열 내 라벨로 매핑됩니다. |
config.url |
read_only_udm.target.url |
구성 URL은 target.url 에 매핑됩니다. |
created_at |
read_only_udm.metadata.event_timestamp |
created_at 타임스탬프가 적절한 형식으로 변환되고 metadata.event_timestamp 에 매핑됩니다. |
data.cancelled_at |
read_only_udm.extensions.vulns.vulnerabilities.scan_end_time |
data.cancelled_at 타임스탬프가 변환되어 extensions.vulns.vulnerabilities.scan_end_time 에 매핑됩니다. |
data.email |
read_only_udm.target.email |
데이터 필드의 이메일 주소가 target.email 에 매핑됩니다. |
data.event |
read_only_udm.security_result.about.labels.[].key , read_only_udm.security_result.about.labels.[].value |
데이터 필드의 이벤트는 security_result.about.labels 배열 내에 라벨로 매핑됩니다. |
data.events |
read_only_udm.security_result.about.labels.[].key , read_only_udm.security_result.about.labels.[].value |
데이터 필드의 이벤트는 security_result.about.labels 배열 내에서 라벨로 매핑됩니다. |
data.head_branch |
read_only_udm.security_result.about.labels.[].key , read_only_udm.security_result.about.labels.[].value |
데이터 필드의 헤드 브랜치가 security_result.about.labels 배열 내에 라벨로 매핑됩니다. |
data.head_sha |
read_only_udm.target.file.sha256 |
데이터 필드의 헤드 SHA가 target.file.sha256 에 매핑됩니다. |
data.hook_id |
read_only_udm.target.resource.attribute.labels.[].key , read_only_udm.target.resource.attribute.labels.[].value |
데이터 필드의 후크 ID는 target.resource.attribute.labels 배열 내에 라벨로 매핑됩니다. |
data.started_at |
read_only_udm.extensions.vulns.vulnerabilities.scan_start_time |
data.started_at 타임스탬프가 변환되어 extensions.vulns.vulnerabilities.scan_start_time 에 매핑됩니다. |
data.team |
read_only_udm.target.user.group_identifiers |
데이터 필드의 팀이 target.user.group_identifiers 에 매핑됩니다. |
data.trigger_id |
read_only_udm.security_result.about.labels.[].key , read_only_udm.security_result.about.labels.[].value |
데이터 필드의 트리거 ID는 security_result.about.labels 배열 내에 라벨로 매핑됩니다. |
data.workflow_id |
read_only_udm.security_result.about.labels.[].key , read_only_udm.security_result.about.labels.[].value |
데이터 필드의 워크플로 ID는 security_result.about.labels 배열 내 라벨로 매핑됩니다. |
data.workflow_run_id |
read_only_udm.security_result.about.labels.[].key , read_only_udm.security_result.about.labels.[].value |
데이터 필드의 워크플로 실행 ID는 security_result.about.labels 배열 내 라벨로 매핑됩니다. |
enterprise.name |
read_only_udm.additional.fields.[].key , read_only_udm.additional.fields.[].value.string_value |
엔터프라이즈 이름은 additional.fields 에서 키-값 쌍으로 매핑됩니다. |
external_identity_nameid |
read_only_udm.target.user.userid , read_only_udm.target.user.email_addresses |
external_identity_nameid 가 이메일 주소인 경우 사용자 이름 부분이 추출되어 target.user.userid 에 매핑되고 전체 이메일이 target.user.email_addresses 에 추가됩니다. 그렇지 않으면 전체 값이 target.user.userid 에 매핑됩니다. |
external_identity_username |
read_only_udm.target.user.user_display_name |
외부 ID 사용자 이름은 target.user.user_display_name 에 매핑됩니다. |
hashed_token |
read_only_udm.network.session_id |
해싱된 토큰은 network.session_id 에 매핑됩니다. |
org |
read_only_udm.target.administrative_domain |
조직이 target.administrative_domain 에 매핑됩니다. |
org_id |
read_only_udm.additional.fields.[].key , read_only_udm.additional.fields.[].value.string_value |
조직 ID는 additional.fields 에서 키-값 쌍으로 매핑됩니다. |
programmatic_access_type |
read_only_udm.additional.fields.[].key , read_only_udm.additional.fields.[].value.string_value |
프로그래매틱 액세스 유형은 additional.fields 에서 키-값 쌍으로 매핑됩니다. |
public_repo |
read_only_udm.additional.fields.[].key , read_only_udm.additional.fields.[].value.string_value , read_only_udm.target.location.name |
public_repo 값은 additional.fields 및 target.location.name 의 키-값 쌍에 매핑된 값을 결정합니다. 'false'는 'PRIVATE'에 매핑되고 다른 값은 'PUBLIC'에 매핑됩니다. |
query_string |
read_only_udm.additional.fields.[].key , read_only_udm.additional.fields.[].value.string_value |
쿼리 문자열은 additional.fields 에서 키-값 쌍으로 매핑됩니다. |
rate_limit_remaining |
read_only_udm.additional.fields.[].key , read_only_udm.additional.fields.[].value.string_value |
남은 비율 제한은 additional.fields 에서 키-값 쌍으로 매핑됩니다. |
repo |
read_only_udm.target.resource.name |
저장소가 target.resource.name 에 매핑됩니다. |
repo_id |
read_only_udm.additional.fields.[].key , read_only_udm.additional.fields.[].value.string_value |
저장소 ID는 additional.fields 에서 키-값 쌍으로 매핑됩니다. |
repository_public |
read_only_udm.additional.fields.[].key , read_only_udm.additional.fields.[].value.string_value |
저장소 공개 플래그는 additional.fields 에서 키-값 쌍으로 매핑됩니다. |
request_body |
read_only_udm.additional.fields.[].key , read_only_udm.additional.fields.[].value.string_value |
요청 본문은 additional.fields 에 키-값 쌍으로 매핑됩니다. |
request_method |
read_only_udm.network.http.method |
요청 메서드는 대문자로 변환되고 network.http.method 에 매핑됩니다. |
route |
read_only_udm.additional.fields.[].key , read_only_udm.additional.fields.[].value.string_value |
경로는 additional.fields 에서 키-값 쌍으로 매핑됩니다. |
status_code |
read_only_udm.network.http.response_code |
상태 코드는 정수로 변환되고 network.http.response_code 에 매핑됩니다. |
token_id |
read_only_udm.additional.fields.[].key , read_only_udm.additional.fields.[].value.string_value |
토큰 ID는 additional.fields 에서 키-값 쌍으로 매핑됩니다. |
token_scopes |
read_only_udm.additional.fields.[].key , read_only_udm.additional.fields.[].value.string_value |
토큰 범위는 additional.fields 에서 키-값 쌍으로 매핑됩니다. |
transport_protocol_name |
read_only_udm.network.application_protocol |
전송 프로토콜 이름이 대문자로 변환되고 network.application_protocol 에 매핑됩니다. |
url_path |
read_only_udm.target.url |
URL 경로는 target.url 에 매핑됩니다. |
user |
read_only_udm.target.user.user_display_name |
사용자는 target.user.user_display_name 에 매핑됩니다. |
user_agent |
read_only_udm.network.http.user_agent , read_only_udm.network.http.parsed_user_agent |
사용자 에이전트는 network.http.user_agent 에 매핑되고 파싱된 버전은 network.http.parsed_user_agent 에 매핑됩니다. |
user_id |
read_only_udm.target.user.userid |
사용자 ID가 target.user.userid 에 매핑됩니다. |
workflow.name |
read_only_udm.security_result.about.labels.[].key , read_only_udm.security_result.about.labels.[].value |
워크플로 이름은 security_result.about.labels 배열 내 라벨로 매핑됩니다. |
workflow_run.event |
read_only_udm.additional.fields.[].key , read_only_udm.additional.fields.[].value.string_value |
워크플로 실행 이벤트는 additional.fields 에서 키-값 쌍으로 매핑됩니다. |
workflow_run.head_branch |
read_only_udm.security_result.about.labels.[].key , read_only_udm.security_result.about.labels.[].value |
워크플로 실행 헤드 브랜치는 security_result.about.labels 배열 내에 라벨로 매핑됩니다. |
workflow_run.head_sha |
read_only_udm.target.file.sha256 |
워크플로 실행 헤드 SHA는 target.file.sha256 에 매핑됩니다. |
workflow_run.id |
read_only_udm.target.resource.attribute.labels.[].key , read_only_udm.target.resource.attribute.labels.[].value |
워크플로 실행 ID는 target.resource.attribute.labels 배열 내 라벨로 매핑됩니다. |
workflow_run.workflow_id |
read_only_udm.security_result.about.labels.[].key , read_only_udm.security_result.about.labels.[].value |
워크플로 실행 워크플로 ID는 security_result.about.labels 배열 내에 라벨로 매핑됩니다. |
(파서 로직) | read_only_udm.metadata.event_type |
이벤트 유형은 data.team , action , actor 와 같은 다른 필드의 존재 여부와 값을 기반으로 파서에 의해 결정됩니다. 다른 특정 조건이 충족되지 않으면 기본값은 USER_RESOURCE_ACCESS 입니다. |
(파서 로직) | read_only_udm.metadata.log_type |
로그 유형은 'GITHUB'로 하드코딩되어 있습니다. |
(파서 로직) | read_only_udm.metadata.product_name |
제품 이름은 'GITHUB'로 하드코딩되어 있습니다. |
(파서 로직) | read_only_udm.metadata.vendor_name |
공급업체 이름은 'GITHUB'로 하드코딩되어 있습니다. |
(파서 로직) | read_only_udm.target.resource.resource_type |
repo 필드가 있으면 리소스 유형이 STORAGE_OBJECT 로 설정됩니다. |
(파서 로직) | read_only_udm.target.resource.type |
리소스 유형은 action 필드에서 파생됩니다. |
(파서 로직) | read_only_udm.security_result.action |
보안 작업 (허용/차단)은 at 또는 raw.at 필드에서 파생되며, 이 필드가 'success'와 같으면 허용되고 그렇지 않으면 차단됩니다. |
(파서 로직) | read_only_udm.security_result.severity |
보안 심각도는 level 또는 SeverityText 필드(있는 경우)에서 파생됩니다. 'INFO'는 'INFORMATIONAL'에 매핑되고, 'WARN'은 'MEDIUM'에 매핑되며, 다른 값은 직접 매핑됩니다. git-daemon 로그의 경우 'fatal'이 'CRITICAL'에 매핑됩니다. |
(파서 로직) | read_only_udm.network.application_protocol |
애플리케이션 프로토콜은 protocol , proto , babeld_proto , transport_protocol_name 또는 raw.protocol 필드에서 파생되며, 대문자로 변환하고 'HTTP', 'HTTPS', 'SSH'를 확인합니다. |
(파서 로직) | read_only_udm.network.application_protocol_version |
애플리케이션 프로토콜 버전은 http_version 필드(있는 경우)에서 파생됩니다. |
(파서 로직) | read_only_udm.network.http.parsed_user_agent |
파싱된 사용자 에이전트는 user_agent , column5 , http_ua 또는 content 필드(있는 경우)에서 파생됩니다. |
(파서 로직) | read_only_udm.network.received_bytes |
수신된 바이트는 column3 , read_bytes , fs_recv 또는 uploaded_bytes 필드(있는 경우)에서 파생되며, 부호 없는 정수로 변환됩니다. |
(파서 로직) | read_only_udm.network.received_packets |
수신된 패킷은 client_recv 필드(있는 경우)에서 파생되며 정수로 변환됩니다. |
(파서 로직) | read_only_udm.network.response_code |
응답 코드는 column2 , status , status_code 또는 http_status 필드(있는 경우)에서 파생되며 정수로 변환됩니다. |
(파서 로직) | read_only_udm.network.sent_bytes |
전송된 바이트는 client_sent 필드(있는 경우)에서 파생되며 부호 없는 정수로 변환됩니다. |
(파서 로직) | read_only_udm.network.sent_packets |
전송된 패킷은 fs_sent 필드에서 파생되며, 이 필드가 있는 경우 정수로 변환됩니다. |
(파서 로직) | read_only_udm.network.session_duration.seconds |
세션 시간(초)은 time_duration 필드에서 파생되며(있는 경우) 정수로 변환됩니다. |
(파서 로직) | read_only_udm.target.file.full_path |
타겟 파일 전체 경로는 path , git_dir 또는 dir 필드에서 파생됩니다(있는 경우). |
(파서 로직) | read_only_udm.target.file.sha1 |
대상 파일 SHA1은 sha 필드(있는 경우)에서 파생됩니다. |
(파서 로직) | read_only_udm.target.hostname |
대상 호스트 이름은 client_hostname 필드에서 가져옵니다(있는 경우). |
(파서 로직) | read_only_udm.target.ip |
대상 IP는 x_real_ip , remote_address , client_ip 또는 remote_addr 필드(있는 경우)에서 파생됩니다. |
(파서 로직) | read_only_udm.target.location.name |
대상 위치 이름은 datacenter 또는 public_repo 필드에서 파생됩니다(있는 경우). |
(파서 로직) | read_only_udm.target.port |
대상 포트는 client_port , dstp 또는 remote_port 필드(있는 경우)에서 파생되며 정수로 변환됩니다. |
(파서 로직) | read_only_udm.target.process.command_line |
타겟 프로세스 명령줄은 command , ssh_cmd , cmdline 또는 cmd 필드(있는 경우)에서 파생됩니다. |
(파서 로직) | read_only_udm.target.process.parent_process.pid |
대상 프로세스 상위 프로세스 ID는 ppid 필드에서 파생되며, 이 필드가 있는 경우 문자열로 변환됩니다. |
(파서 로직) | read_only_udm.target.process.pid |
대상 프로세스 ID는 pid 필드에서 파생되며, 이 필드가 있으면 문자열로 변환됩니다. |
(파서 로직) | read_only_udm.target.url |
대상 URL은 url , http_url , request_url , http_request , dest_url , config.url 또는 url_path 필드에서 가져옵니다(있는 경우). path_info 및 query_string 로 구성할 수도 있습니다. |
(파서 로직) | read_only_udm.target.user.attribute.roles.[].name |
타겟 사용자 역할은 actor_type 또는 user_type 필드(있는 경우)에서 파생됩니다. |
(파서 로직) | read_only_udm.target.user.email_addresses |
대상 사용자 이메일 주소는 이메일 주소인 경우 external_identity_nameid 필드에서 가져옵니다. |
(파서 로직) | read_only_udm.target.user.group_identifiers |
대상 사용자 그룹 식별자는 data.team 필드(있는 경우)에서 파생됩니다. |
(파서 로직) | read_only_udm.target.user.userid |
타겟 사용자 ID는 userid , external_identity_nameid , current_user , member , user_id , actor_id 또는 raw.user_id 필드(있는 경우)에서 파생됩니다. |
(파서 로직) | read_only_udm.target.user.user_display_name |
대상 사용자 표시 이름은 login , user , external_identity_username , user_login 또는 raw.login 필드(있는 경우)에서 가져옵니다. |
(파서 로직) | read_only_udm.principal.asset.asset_id |
기본 애셋 ID는 guid 필드에서 파생되며 접두사로 'GUID: '가 추가됩니다. |
(파서 로직) | read_only_udm.principal.hostname |
기본 호스트 이름은 hostname , request_host , host 또는 principal_hostname 필드(있는 경우)에서 파생됩니다. |
(파서 로직) | read_only_udm.principal.ip |
기본 IP는 column6 , ip , x_real_ip , remote_address , raw.ip , actor_ip 또는 log:source:ip 필드(있는 경우)에서 파생됩니다. |
(파서 로직) | read_only_udm.principal.location.country_or_region |
기본 위치 국가 또는 지역은 actor_location.country_code 필드에서 파생됩니다(있는 경우). |
(파서 로직) | read_only_udm.principal.port |
기본 포트는 srcp 또는 log:source:port 필드에서 파생되며(있는 경우) 정수로 변환됩니다. |
(파서 로직) | read_only_udm.principal.resource.name |
기본 리소스 이름은 service.name 필드에서 파생됩니다(있는 경우). |
(파서 로직) | read_only_udm.principal.resource.product_object_id |
기본 리소스 제품 객체 ID는 service.instance.id 또는 subject_id 필드(있는 경우)에서 파생됩니다. |
(파서 로직) | read_only_udm.principal.url |
기본 URL은 repo 필드에서 가져옵니다(있는 경우). |
(파서 로직) | read_only_udm.principal.user.userid |
기본 사용자 ID는 repository_owner_id 필드에서 파생되며(있는 경우) 문자열로 변환됩니다. |
(파서 로직) | read_only_udm.principal.user.user_display_name |
기본 사용자 표시 이름은 repo_name 필드(있는 경우)에서 파생됩니다. |
(파서 로직) | read_only_udm.intermediary.hostname |
중간 호스트 이름은 hostname 필드에서 파생됩니다(있는 경우). |
(파서 로직) | read_only_udm.intermediary.ip |
중간 IP는 x_forwarded_for 또는 xff_ip 필드에서 파생됩니다(있는 경우). |
(파서 로직) | read_only_udm.metadata.description |
메타데이터 설명은 content , at 또는 raw.message 필드(있는 경우)에서 파생됩니다. |
(파서 로직) | read_only_udm.metadata.product_event_type |
제품 이벤트 유형은 process_type 또는 action 필드(있는 경우)에서 파생됩니다. |
(파서 로직) | read_only_udm.metadata.product_log_id |
제품 로그 ID는 github_request_id , id , request_id 또는 raw.request_id 필드(있는 경우)에서 파생됩니다. |
(파서 로직) | read_only_udm.metadata.product_version |
제품 버전은 version 필드(있는 경우)에서 파생됩니다. |
(파서 로직) | read_only_udm.security_result.about.labels.[].key , read_only_udm.security_result.about.labels.[].value |
data.events , data.workflow_id , workflow.name , data.head_branch , data.trigger_id , data.workflow_run_id , data.event 와 같은 필드의 존재 여부와 값에 따라 다양한 라벨이 security_result.about.labels 배열에 추가됩니다. |
(파서 로직) | read_only_udm.security_result.description |
보안 결과 설명은 auth_status , data_msg , msg , Body , desc 또는 content 필드(있는 경우)에서 가져옵니다. |
(파서 로직) | read_only_udm.security_result.severity_details |
보안 결과 심각도 세부정보는 userid 필드(있는 경우)에서 가져옵니다. |
(파서 로직) | read_only_udm.security_result.summary |
보안 결과 요약은 creason , action 또는 reason 필드(있는 경우)에서 파생됩니다. |
(파서 로직) | read_only_udm.network.http.referral_url |
HTTP 추천 URL은 column4 또는 referer 필드(있는 경우)에서 파생됩니다. |
(파서 로직) | read_only_udm.network.http.user_agent |
HTTP 사용자 에이전트는 column5 , http_ua 또는 user_agent 필드(있는 경우)에서 파생됩니다. |
(파서 로직) | read_only_udm.network.sent_bytes |
네트워크에서 전송된 바이트는 client_sent 또는 fs_sent 필드(있는 경우)에서 파생되며 부호 없는 정수로 변환됩니다. |
(파서 로직) | read_only_udm.additional.fields.[].key , read_only_udm.additional.fields.[].value.string_value |
많은 필드가 additional.fields 배열에서 auth_fingerprint , controller , oauth_access_id , oauth_application_id , oauth_scopes , route , worker_request_count , repo , repo_visibility , auth , content_length , elapsed , catalog_service , action , method , failure_type , failure_reason , hashed_token , token_type , gitauth_version , enterprise.name , programmatic_access_type , token_id , token_scopes , integration , query_string , rate_limit_remaining , request_body , org_id , repo_id , repository_public , raw.method , raw.failure_type , raw.failure_reason , raw.from , raw.raw_login , device_cookie , operation , operation_type , category_type , business , note , read , pre_perform_allocation_count , backend , queue , class , success , env , job_id , job 를 포함하여 키-값 쌍으로 조건부로 매핑됩니다. 각 필드의 구체적인 로직은 파서 코드에 자세히 설명되어 있습니다. |
(파서 로직) | read_only_udm.security_result.detection_fields.[].key , read_only_udm.security_result.detection_fields.[].value |
controller_action , two_factor , delay_time , queued_time , delivery_build , delivery_send , stages 필드는 조건부로 security_result.detection_fields 배열에 매핑됩니다. |
(파서 로직) | read_only_udm.target.resource.attribute.labels.[].key , read_only_udm.target.resource.attribute.labels.[].value |
hook_id , job_name , job_workflow_ref , runner_group_id , runner_group_name , runner_name , runner_id , workflow_run_id , business_id 필드는 조건부로 target.resource.attribute.labels 배열 내에서 라벨로 매핑됩니다. |
(파서 로직) | read_only_udm.metadata.event_timestamp |
지원되는 형식으로 타임스탬프를 직접 사용할 수 없는 경우 파서는 ts , now , created_at , Timestamp , time , raw.now 를 비롯한 다양한 필드에서 타임스탬프를 추출하고 변환하려고 시도합니다. |
(파서 로직) | read_only_udm.network.http.method |
HTTP 메서드는 method , column1 , request_method , http_method 또는 raw.method 필드에서 파생되며 대문자로 변환됩니다. |
(파서 로직) | read_only_udm.target.application |
타겟 애플리케이션은 process , program 또는 app 필드(있는 경우)에서 파생됩니다. |
변경사항
2023-12-18
- 버그 수정:
- 'process_type'이 'github_production'인 경우 'kv_data'를 추출하는 Grok 패턴이 추가되었습니다.
- 'process_type'이 'github_production'인 경우 'user'가 'target.user.user_display_name'에 매핑되었습니다.
- 'process_type'이 'github_production'인 경우 'user_id'가 'target.user.userid'에 매핑됩니다.
- 'referrer'가 'network.http.referral_url'에 매핑되었습니다.
- 'user_session_id'가 'network.session_id'에 매핑되었습니다.
- 'ip'가 'principal.ip'에 매핑되었습니다.
- 'from'이 'additional.fields'에 매핑되었습니다.
- 'request_category'가 'additional.fields'에 매핑되었습니다.
- 'device_cookie'가 'additional.fields'에 매핑되었습니다.
- 'operation_type'이 'additional.fields'에 매핑되었습니다.
- 'category_type'이 'additional.fields'에 매핑되었습니다.
- 'note'가 'additional.fields'에 매핑되었습니다.
- 'read'가 'additional.fields'에 매핑되었습니다.
- 'pre_perform_allocation_count'가 'additional.fields'에 매핑되었습니다.
- 'backend'가 'additional.fields'에 매핑되었습니다.
- 'queue'가 'additional.fields'에 매핑되었습니다.
- 'class'가 'additional.fields'에 매핑되었습니다.
- 'success'가 'additional.fields'에 매핑되었습니다.
- 'controller_action'이 'security_result.detection_fields'에 매핑되었습니다.
- 'two_factor'가 'security_result.detection_fields'에 매핑되었습니다.
2023-10-25
- 'public_repo'가 'false'이면 'target.location.name'을 'PRIVATE'로 설정하고, 그렇지 않으면 'PUBLIC'으로 설정합니다.
2023-10-11
- 'user_agent'가 'network.http.user_agent' 및 'network.http.parsed_user_agent'에 매핑되었습니다.
- 'request_method'가 'network.http.method'에 매핑되었습니다.
- 'application_name'이 'target.application'에 매핑되었습니다.
- 'status_code'가 'network.http.response_code'에 매핑되었습니다.
- 'url_path'가 'target.url'에 매핑되었습니다.
- 'user_id'가 'target.userid'에 매핑되었습니다.
- 'transport_protocol_name'이 'network.application_protocol'에 매핑되었습니다.
- 'raw.now'가 'metadata.event_timestamp'에 매핑되었습니다.
- 'raw.ip'가 'principal.ip'에 매핑되었습니다.
- 'raw.request_id'가 'metadata.product_log_id'에 매핑되었습니다.
- 'raw.repo'가 'target.url'에 매핑되었습니다.
- 'raw.action'이 'security_result.summary'에 매핑되었습니다.
- 'raw.protocol'이 'network.application_protocol'에 매핑되었습니다.
- 'raw.message'가 'metadata.description'에 매핑되었습니다.
- 'raw.at'이 'security_result.action'에 매핑되었습니다.
- 'raw.login'이 'target.user_display_name'에 매핑되었습니다.
- 'raw.user_id'가 'target.userid'에 매핑되었습니다.
- 'raw.failure_reason', 'raw.failure_type', 'raw.raw_login', 'raw.from'이 'additional.fields'에 매핑되었습니다.
- 'programmatic_access_type', 'actor_id', 'token_id', 'token_scopes', 'integration', 'query_string', 'rate_limit_remaining', 'request_body', 'route', 'business', 'org_id', 'repo_id', 'public_repo', '_document_id', 'operation_type', 'repository_public'이 'additional.fields'에 매핑되었습니다.
2023-07-31
- 버그 수정:
- Grok 패턴에 'on_error'가 추가되었습니다.
- 'workflow_run.id'가 'target.resource.attribute.labels'에 매핑되었습니다.
- 'workflow_run.event'가 'additional.fields'에 매핑되었습니다.
- 'workflow_run.actor.login'이 'principal.user.userid'에 매핑되었습니다.
- 'workflow_run.head_branch'가 'security_result.about.labels'에 매핑되었습니다.
- 'workflow_run.head_sha'가 'target.file.sha256'에 매핑되었습니다.
- 'enterprise.name'이 'additional.fields'에 매핑되었습니다.
- 'workflow.name'이 'security_result.about.labels'에 매핑되었습니다.
- 'workflow_run.workflow_id'가 'security_result.about.labels'에 매핑되었습니다.
2023-06-22
- 'github_auth', 'haproxy', 'github_access', 'github_unicorn', 'github_production', 'hookshot-go', 'babeld', 'github_gitauth', 'babeld2hydro', 'authzd', 'gitrpcd', 'agent', 'git-daemon', 'github_resqued', 'sudo', 'systemd', 'github_audit' syslog 로그 형식에 대한 지원이 추가되었습니다.
2023-06-09
- Enhancement-
- 이메일 형식인 경우 'external_identity_nameid'가 'target.user.email_addresses'에 매핑되었습니다.
- 'external_identity_nameid'에서 사용자 이름을 가져와 'target.user.userid'에 매핑합니다.
2023-01-13
- Enhancement-
- 'actor_ip'가 'principal.ip'에 매핑되었습니다.
- 'hashed_token'이 'network.session_id'에 매핑되었습니다.
- 'external_identity_nameid'가 'target.user.userid'에 매핑되었습니다.
- 'external_identity_username'이 'target.user.user_display_name'에 매핑되었습니다.
2022-11-28
- 개선사항 - 'config.url'이 'target.url'에 매핑되었습니다.
2022-07-07
- 개선사항 - 작업 'git.clone', 'git.push', 'workflows.prepared_workflow_job'이 있는 새로 처리된 JSON 형식 로그가 처리되고 파싱되었습니다.
- 'job_name'이 'target.resource.attribute.labels'에 매핑되었습니다.
- 'job_workflow_ref'가 'target.resource.attribute.labels'에 매핑되었습니다.
- 'runner_group_id'가 'target.resource.attribute.labels'에 매핑되었습니다.
- 'runner_group_name'이 'target.resource.attribute.labels'에 매핑되었습니다.
- 'runner_name'이 'target.resource.attribute.labels'에 매핑되었습니다.
- 'runner_id'가 'target.resource.attribute.labels'에 매핑되었습니다.
- 'workflow_run_id'가 'target.resource.attribute.labels'에 매핑되었습니다.
- 'actor_location.country_code'가 'principal.location.country_or_region'에 매핑되었습니다.