GitHub 감사 로그 수집

다음에서 지원:

개요

이 파서는 JSON 형식의 GitHub 감사 로그를 처리합니다. 이 스크립트는 여러 필드를 삭제하여 입력을 정리하고, process_type 필드를 기반으로 여러 grok 및 키-값 작업을 실행하여 관련 정보를 추출하고, 추출된 필드를 UDM에 매핑하고, Google SecOps 처리를 위해 출력을 구성합니다. 또한 특정 특이 사례를 처리하고 GitHub 감사 로그 내의 다양한 로그 하위유형에 대한 데이터 변환을 실행합니다.

시작하기 전에

  • Google SecOps 인스턴스가 있는지 확인합니다.
  • GitHub 저장소에 대한 권한이 있는지 확인합니다.

GitHub 로그를 수집하도록 Google SecOps에서 피드 구성

  1. SIEM 설정 > 피드로 이동합니다.
  2. 새로 추가를 클릭합니다.
  3. 피드 이름 필드에 피드 이름을 입력합니다 (예: GitHub 로그).
  4. 소스 유형으로 Webhook을 선택합니다.
  5. 로그 유형으로 GitHub를 선택합니다.
  6. 다음을 클릭합니다.
  7. 선택사항: 다음 입력 매개변수의 값을 지정합니다.
    • 분할 구분 기호: 로그 줄을 구분하는 데 사용되는 구분 기호입니다(예: \n).
    • 애셋 네임스페이스: 애셋 네임스페이스입니다.
    • 수집 라벨: 이 피드의 이벤트에 적용된 라벨입니다.
  8. 다음을 클릭합니다.
  9. 확정 화면에서 피드 구성을 검토한 다음 제출을 클릭합니다.
  10. 보안 비밀 키 생성을 클릭하여 이 피드를 인증하기 위한 보안 비밀 키를 생성합니다.
  11. 비밀 키를 복사하여 저장합니다. 이 보안 비밀 키는 다시 볼 수 없습니다. 필요한 경우 새 보안 비밀 키를 재생성할 수 있지만 이 작업을 하면 이전 보안 비밀 키는 더 이상 사용할 수 없게 됩니다.
  12. 세부정보 탭의 엔드포인트 정보 필드에서 피드 엔드포인트 URL을 복사합니다. 클라이언트 애플리케이션에서 이 엔드포인트 URL을 지정해야 합니다.
  13. 완료를 클릭합니다.

웹훅 피드에 대한 API 키 만들기

  1. Google Cloud 콘솔 > 사용자 인증 정보로 이동합니다.

    사용자 인증 정보로 이동

  2. 사용자 인증 정보 만들기를 클릭한 후 API 키를 선택합니다.

  3. Google Security Operations API에 대한 API 키 액세스를 제한합니다.

엔드포인트 URL 지정

  1. 클라이언트 애플리케이션에서 웹훅 피드에 제공된 HTTPS 엔드포인트 URL을 지정합니다.
  2. 다음 형식의 커스텀 헤더의 일부로 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로 데이터를 전송하는 방법을 단계별로 안내합니다.

  1. GitHub 저장소로 이동합니다.
  2. 설정으로 이동합니다.
  3. 웹훅을 클릭합니다.
  4. 웹훅 추가를 클릭합니다.
  5. 페이로드 URL 필드에 Google SecOps API 엔드포인트 URL을 입력합니다.
  6. 콘텐츠 유형으로 application/json을 선택합니다.

    선택사항: 보안을 강화하려면 보안 비밀을 설정합니다. 이렇게 하면 웹훅 페이로드의 서명이 생성되므로 Google SecOps 측에서 진위성을 확인할 수 있습니다. 보안 비밀을 사용하는 경우 Google SecOps 피드에서도 구성합니다.

  7. 웹훅을 트리거하는 이벤트를 선택합니다. 포괄적인 로깅을 위해 개별 이벤트 직접 선택을 선택하고 관련 이벤트 (예: 푸시, 풀 요청, 문제)를 선택합니다. 확실하지 않다면 push 이벤트만으로 시작합니다.

  8. Active(활성) 체크박스가 선택되어 있는지 확인합니다.

  9. 웹훅 추가를 클릭하여 구성을 저장합니다.

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_typesecurity_resultsummary에 매핑됩니다.
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_idprincipal.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.fieldstarget.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_infoquery_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'에 매핑되었습니다.