Raccogliere i log di controllo di GitHub
Panoramica
Questo parser gestisce i log di controllo di GitHub in formato JSON. Pulisce l'input rimuovendo numerosi campi, esegue diverse operazioni grok e chiave-valore in base al campo process_type per estrarre le informazioni pertinenti, mappa i campi estratti all'UDM e struttura l'output per l'importazione in Google SecOps. Gestisce inoltre casi limite specifici ed esegue trasformazioni dei dati per diversi sottotipi di log all'interno dei log di controllo di GitHub.
Prima di iniziare
- Assicurati di avere un'istanza Google SecOps.
- Assicurati di disporre dell'accesso privilegiato ai repository GitHub.
Configura un feed in Google SecOps per importare i log di GitHub
- Vai a Impostazioni SIEM > Feed.
- Fai clic su Aggiungi nuovo.
- Nel campo Nome feed, inserisci un nome per il feed (ad esempio Log di GitHub).
- Seleziona Webhook come Tipo di origine.
- Seleziona GitHub come Tipo di log.
- Fai clic su Avanti.
- (Facoltativo) Specifica i valori per i seguenti parametri di input:
- Delimitatore di split: il delimitatore utilizzato per separare le righe di log, ad esempio
\n
. - Spazio dei nomi degli asset: lo spazio dei nomi degli asset.
- Etichette di importazione: l'etichetta applicata agli eventi di questo feed.
- Delimitatore di split: il delimitatore utilizzato per separare le righe di log, ad esempio
- Fai clic su Avanti.
- Controlla la configurazione del feed nella schermata Concludi e poi fai clic su Invia.
- Fai clic su Genera chiave segreta per generare una chiave segreta per autenticare questo feed.
- Copia e memorizza la chiave segreta. Non potrai più visualizzare questa chiave segreta. Se necessario, puoi rigenerare una nuova chiave segreta, ma questa azione rende obsoleta la chiave segreta precedente.
- Nella scheda Dettagli, copia l'URL dell'endpoint del feed dal campo Informazioni sull'endpoint. Devi specificare questo URL endpoint nell'applicazione client.
- Fai clic su Fine.
Crea una chiave API per il feed webhook
Vai alla console Google Cloud > Credenziali.
Fai clic su Crea credenziali e poi seleziona Chiave API.
Limita l'accesso alla chiave API all'API Google Security Operations.
Specifica l'URL dell'endpoint
- Nell'applicazione client, specifica l'URL dell'endpoint HTTPS fornito nel feed webhook.
Attiva l'autenticazione specificando la chiave API e la chiave segreta nell'intestazione personalizzata nel seguente formato:
X-goog-api-key = API_KEY X-Webhook-Access-Key = SECRET
Consiglio: specifica la chiave API come intestazione anziché nell'URL. Se il client webhook non supporta le intestazioni personalizzate, puoi specificare la chiave API e la chiave segreta utilizzando parametri di ricerca nel seguente formato:
ENDPOINT_URL?key=API_KEY&secret=SECRET
Sostituisci quanto segue:
ENDPOINT_URL
: l'URL dell'endpoint del feed.API_KEY
: la chiave API per l'autenticazione in Google Security Operations.SECRET
: la chiave segreta che hai generato per autenticare il feed.
Creare un webhook su GitHub
Questa guida fornisce istruzioni dettagliate per creare un webhook su GitHub per inviare dati a Google SecOps.
- Vai al tuo repository GitHub.
- Vai a Impostazioni.
- Fai clic su Webhook.
- Fai clic su Aggiungi webhook.
- Nel campo Payload URL (URL del payload), inserisci l'URL dell'endpoint API Google SecOps.
Seleziona application/json come Tipo di contenuti.
(Facoltativo) Per una maggiore sicurezza, imposta un secret. Viene generata una firma per i payload degli webhook, che ti consente di verificarne l'autenticità lato Google SecOps. Se utilizzi un secret, configuralo anche nel feed Google SecOps.
Scegli gli eventi che attivano il webhook. Per un logging completo, seleziona Fammi selezionare i singoli eventi e controlla gli eventi pertinenti (ad esempio Push, Pull request, Issue). In caso di dubbi, inizia con Solo l'evento
push
.Assicurati che la casella di controllo Attiva sia selezionata.
Fai clic su Aggiungi webhook per salvare la configurazione.
Tabella di mappatura UDM
Campo log | Mappatura UDM | Logica |
---|---|---|
_document_id |
read_only_udm.additional.fields.[].key , read_only_udm.additional.fields.[].value.string_value |
Il parametro _document_id del log non elaborato viene mappato a una coppia chiave-valore nell'array additional.fields all'interno dell'UDM. |
action |
read_only_udm.metadata.product_event_type , read_only_udm.security_result.summary |
Il campo action è mappato a product_event_type nei metadati e a summary in security_result . |
actor |
read_only_udm.principal.user.userid |
Il campo actor , che rappresenta l'utente che esegue l'azione, è mappato a principal.user.userid . |
actor_id |
read_only_udm.principal.user.attribute.labels.[].key , read_only_udm.principal.user.attribute.labels.[].value |
actor_id è mappato come etichetta all'interno dell'array principal.user.attribute.labels . |
actor_ip |
read_only_udm.principal.ip |
L'indirizzo IP dell'attore è mappato a principal.ip . |
actor_location.country_code |
read_only_udm.principal.location.country_or_region |
Il codice paese dell'attore è mappato a principal.location.country_or_region . |
application_name |
read_only_udm.target.application |
Il nome dell'applicazione è mappato a target.application . |
business |
read_only_udm.target.user.company_name , read_only_udm.additional.fields.[].key , read_only_udm.additional.fields.[].value.string_value |
Il nome dell'attività è mappato a target.user.company_name e come coppia chiave-valore in additional.fields . |
business_id |
read_only_udm.target.resource.attribute.labels.[].key , read_only_udm.target.resource.attribute.labels.[].value |
L'ID attività è mappato come etichetta all'interno dell'array target.resource.attribute.labels . |
config.url |
read_only_udm.target.url |
L'URL di configurazione è mappato a target.url . |
created_at |
read_only_udm.metadata.event_timestamp |
Il timestamp created_at viene convertito nel formato appropriato e mappato a metadata.event_timestamp . |
data.cancelled_at |
read_only_udm.extensions.vulns.vulnerabilities.scan_end_time |
Il timestamp data.cancelled_at viene convertito e mappato a extensions.vulns.vulnerabilities.scan_end_time . |
data.email |
read_only_udm.target.email |
L'indirizzo email del campo dati è mappato a target.email . |
data.event |
read_only_udm.security_result.about.labels.[].key , read_only_udm.security_result.about.labels.[].value |
L'evento del campo dati viene mappato come etichetta all'interno dell'array security_result.about.labels . |
data.events |
read_only_udm.security_result.about.labels.[].key , read_only_udm.security_result.about.labels.[].value |
Gli eventi del campo dati vengono mappati come etichette all'interno dell'array security_result.about.labels . |
data.head_branch |
read_only_udm.security_result.about.labels.[].key , read_only_udm.security_result.about.labels.[].value |
Il ramo principale del campo dati viene mappato come etichetta all'interno dell'array security_result.about.labels . |
data.head_sha |
read_only_udm.target.file.sha256 |
L'SHA principale del campo dati è mappato a target.file.sha256 . |
data.hook_id |
read_only_udm.target.resource.attribute.labels.[].key , read_only_udm.target.resource.attribute.labels.[].value |
L'ID hook del campo dati viene mappato come etichetta all'interno dell'array target.resource.attribute.labels . |
data.started_at |
read_only_udm.extensions.vulns.vulnerabilities.scan_start_time |
Il timestamp data.started_at viene convertito e mappato a extensions.vulns.vulnerabilities.scan_start_time . |
data.team |
read_only_udm.target.user.group_identifiers |
Il team del campo dati è mappato a target.user.group_identifiers . |
data.trigger_id |
read_only_udm.security_result.about.labels.[].key , read_only_udm.security_result.about.labels.[].value |
L'ID attivatore del campo dati viene mappato come etichetta all'interno dell'array security_result.about.labels . |
data.workflow_id |
read_only_udm.security_result.about.labels.[].key , read_only_udm.security_result.about.labels.[].value |
L'ID flusso di lavoro del campo dati viene mappato come etichetta all'interno dell'array security_result.about.labels . |
data.workflow_run_id |
read_only_udm.security_result.about.labels.[].key , read_only_udm.security_result.about.labels.[].value |
L'ID esecuzione del flusso di lavoro dal campo dati viene mappato come etichetta all'interno dell'array security_result.about.labels . |
enterprise.name |
read_only_udm.additional.fields.[].key , read_only_udm.additional.fields.[].value.string_value |
Il nome dell'azienda viene mappato come coppia chiave-valore in additional.fields . |
external_identity_nameid |
read_only_udm.target.user.userid , read_only_udm.target.user.email_addresses |
Se external_identity_nameid è un indirizzo email, la parte del nome utente viene estratta e mappata a target.user.userid e l'email completa viene aggiunta a target.user.email_addresses . In caso contrario, l'intero valore viene mappato a target.user.userid . |
external_identity_username |
read_only_udm.target.user.user_display_name |
Il nome utente dell'identità esterna è mappato a target.user.user_display_name . |
hashed_token |
read_only_udm.network.session_id |
Il token sottoposto ad hashing è mappato a network.session_id . |
org |
read_only_udm.target.administrative_domain |
L'organizzazione è mappata a target.administrative_domain . |
org_id |
read_only_udm.additional.fields.[].key , read_only_udm.additional.fields.[].value.string_value |
L'ID organizzazione è mappato come coppia chiave-valore in additional.fields . |
programmatic_access_type |
read_only_udm.additional.fields.[].key , read_only_udm.additional.fields.[].value.string_value |
Il tipo di accesso programmatico è mappato come coppia chiave-valore in additional.fields . |
public_repo |
read_only_udm.additional.fields.[].key , read_only_udm.additional.fields.[].value.string_value , read_only_udm.target.location.name |
Il valore public_repo determina il valore mappato a una coppia chiave-valore in additional.fields e target.location.name . "false" viene mappato a "PRIVATE" e gli altri valori a "PUBLIC". |
query_string |
read_only_udm.additional.fields.[].key , read_only_udm.additional.fields.[].value.string_value |
La stringa di query viene mappata come coppia chiave-valore in additional.fields . |
rate_limit_remaining |
read_only_udm.additional.fields.[].key , read_only_udm.additional.fields.[].value.string_value |
Il limite di frequenza rimanente viene mappato come coppia chiave-valore in additional.fields . |
repo |
read_only_udm.target.resource.name |
Il repository è mappato a target.resource.name . |
repo_id |
read_only_udm.additional.fields.[].key , read_only_udm.additional.fields.[].value.string_value |
L'ID repository viene mappato come coppia chiave-valore in additional.fields . |
repository_public |
read_only_udm.additional.fields.[].key , read_only_udm.additional.fields.[].value.string_value |
Il flag pubblico del repository è mappato come coppia chiave-valore in additional.fields . |
request_body |
read_only_udm.additional.fields.[].key , read_only_udm.additional.fields.[].value.string_value |
Il corpo della richiesta viene mappato come coppia chiave-valore in additional.fields . |
request_method |
read_only_udm.network.http.method |
Il metodo di richiesta viene convertito in lettere maiuscole e mappato a network.http.method . |
route |
read_only_udm.additional.fields.[].key , read_only_udm.additional.fields.[].value.string_value |
Il percorso viene mappato come coppia chiave-valore in additional.fields . |
status_code |
read_only_udm.network.http.response_code |
Il codice di stato viene convertito in un numero intero e mappato a network.http.response_code . |
token_id |
read_only_udm.additional.fields.[].key , read_only_udm.additional.fields.[].value.string_value |
L'ID token viene mappato come coppia chiave-valore in additional.fields . |
token_scopes |
read_only_udm.additional.fields.[].key , read_only_udm.additional.fields.[].value.string_value |
Gli ambiti dei token sono mappati come coppia chiave-valore in additional.fields . |
transport_protocol_name |
read_only_udm.network.application_protocol |
Il nome del protocollo di trasporto viene convertito in lettere maiuscole e mappato a network.application_protocol . |
url_path |
read_only_udm.target.url |
Il percorso dell'URL è mappato a target.url . |
user |
read_only_udm.target.user.user_display_name |
L'utente è mappato a target.user.user_display_name . |
user_agent |
read_only_udm.network.http.user_agent , read_only_udm.network.http.parsed_user_agent |
Lo user agent è mappato a network.http.user_agent e la relativa versione analizzata è mappata a network.http.parsed_user_agent . |
user_id |
read_only_udm.target.user.userid |
L'ID utente è mappato a target.user.userid . |
workflow.name |
read_only_udm.security_result.about.labels.[].key , read_only_udm.security_result.about.labels.[].value |
Il nome del workflow viene mappato come etichetta all'interno dell'array security_result.about.labels . |
workflow_run.event |
read_only_udm.additional.fields.[].key , read_only_udm.additional.fields.[].value.string_value |
L'evento di esecuzione del flusso di lavoro è mappato come coppia chiave-valore in additional.fields . |
workflow_run.head_branch |
read_only_udm.security_result.about.labels.[].key , read_only_udm.security_result.about.labels.[].value |
Il ramo principale dell'esecuzione del flusso di lavoro viene mappato come etichetta all'interno dell'array security_result.about.labels . |
workflow_run.head_sha |
read_only_udm.target.file.sha256 |
L'SHA dell'eseguitrice del flusso di lavoro è mappato a target.file.sha256 . |
workflow_run.id |
read_only_udm.target.resource.attribute.labels.[].key , read_only_udm.target.resource.attribute.labels.[].value |
L'ID esecuzione del flusso di lavoro è mappato come etichetta all'interno dell'array target.resource.attribute.labels . |
workflow_run.workflow_id |
read_only_udm.security_result.about.labels.[].key , read_only_udm.security_result.about.labels.[].value |
L'ID esecuzione del workflow è mappato come etichetta all'interno dell'array security_result.about.labels . |
(Parser Logic) | read_only_udm.metadata.event_type |
Il tipo di evento viene determinato dallo scanner in base alla presenza e ai valori di altri campi, come data.team , action e actor . Il valore predefinito è USER_RESOURCE_ACCESS se non viene soddisfatta un'altra condizione specifica. |
(Parser Logic) | read_only_udm.metadata.log_type |
Il tipo di log è hardcoded su "GITHUB". |
(Parser Logic) | read_only_udm.metadata.product_name |
Il nome del prodotto è hardcoded in "GITHUB". |
(Parser Logic) | read_only_udm.metadata.vendor_name |
Il nome del fornitore è hardcoded su "GITHUB". |
(Parser Logic) | read_only_udm.target.resource.resource_type |
Il tipo di risorsa è impostato su STORAGE_OBJECT quando è presente il campo repo . |
(Parser Logic) | read_only_udm.target.resource.type |
Il tipo di risorsa è derivato dal campo action . |
(Parser Logic) | read_only_udm.security_result.action |
L'azione di sicurezza (ALLOW/BLOCK) è ricavata dai campi at o raw.at se sono presenti e uguali a "success" o meno. |
(Parser Logic) | read_only_udm.security_result.severity |
La gravità della sicurezza è ricavata dai campi level o SeverityText , se presenti. "INFO" viene mappato a "INFORMATIONAL", "WARN" a "MEDIUM" e gli altri valori vengono mappati direttamente. Per i log git-daemon , "fatal" è mappato a "CRITICAL". |
(Parser Logic) | read_only_udm.network.application_protocol |
Il protocollo di applicazione è dedotto dai campi protocol , proto , babeld_proto , transport_protocol_name o raw.protocol , convertiti in maiuscolo e controllati per "HTTP", "HTTPS" e "SSH". |
(Parser Logic) | read_only_udm.network.application_protocol_version |
La versione del protocollo dell'applicazione è ricavata dal campo http_version , se presente. |
(Parser Logic) | read_only_udm.network.http.parsed_user_agent |
Lo user agent analizzato è derivato dai campi user_agent , column5 , http_ua o content , se presenti. |
(Parser Logic) | read_only_udm.network.received_bytes |
I byte ricevuti derivano dai campi column3 , read_bytes , fs_recv o uploaded_bytes , se presenti, e vengono convertiti in un numero intero non firmato. |
(Parser Logic) | read_only_udm.network.received_packets |
I pacchetti ricevuti derivano dal campo client_recv , se presente, e vengono convertiti in un numero intero. |
(Parser Logic) | read_only_udm.network.response_code |
Il codice di risposta viene ricavato dai campi column2 , status , status_code o http_status , se presenti, e convertito in un numero intero. |
(Parser Logic) | read_only_udm.network.sent_bytes |
I byte inviati derivano dal campo client_sent , se presente, e vengono convertiti in un numero intero non firmato. |
(Parser Logic) | read_only_udm.network.sent_packets |
I pacchetti inviati derivano dal campo fs_sent , se presente, e vengono convertiti in un numero intero. |
(Parser Logic) | read_only_udm.network.session_duration.seconds |
La durata della sessione in secondi è ricavata dal campo time_duration , se presente, e convertita in un numero intero. |
(Parser Logic) | read_only_udm.target.file.full_path |
Il percorso completo del file di destinazione è dedotto dai campi path , git_dir o dir , se presenti. |
(Parser Logic) | read_only_udm.target.file.sha1 |
L'SHA1 del file di destinazione è derivato dal campo sha , se presente. |
(Parser Logic) | read_only_udm.target.hostname |
Il nome host di destinazione viene ricavato dal campo client_hostname , se presente. |
(Parser Logic) | read_only_udm.target.ip |
L'IP target è ricavato dai campi x_real_ip , remote_address , client_ip o remote_addr , se presenti. |
(Parser Logic) | read_only_udm.target.location.name |
Il nome della località di destinazione è dedotto dai campi datacenter o public_repo , se presenti. |
(Parser Logic) | read_only_udm.target.port |
La porta di destinazione è ricavata dai campi client_port , dstp o remote_port , se presenti, e convertita in un numero intero. |
(Parser Logic) | read_only_udm.target.process.command_line |
La riga di comando del processo target è ricavata dai campi command , ssh_cmd , cmdline o cmd , se presenti. |
(Parser Logic) | read_only_udm.target.process.parent_process.pid |
L'ID processo padre del processo di destinazione è dedotto dal campo ppid , se presente, e convertito in una stringa. |
(Parser Logic) | read_only_udm.target.process.pid |
L'ID processo di destinazione è dedotto dal campo pid , se presente, e convertito in una stringa. |
(Parser Logic) | read_only_udm.target.url |
L'URL target è ricavato dai campi url , http_url , request_url , http_request , dest_url , config.url o url_path , se presenti. Può anche essere costruito da path_info e query_string . |
(Parser Logic) | read_only_udm.target.user.attribute.roles.[].name |
I ruoli utente target vengono ricavati dai campi actor_type o user_type , se presenti. |
(Parser Logic) | read_only_udm.target.user.email_addresses |
Gli indirizzi email degli utenti di destinazione vengono ricavati dal campo external_identity_nameid , se si tratta di un indirizzo email. |
(Parser Logic) | read_only_udm.target.user.group_identifiers |
Gli identificatori dei gruppi di utenti target sono ricavati dal campo data.team , se presente. |
(Parser Logic) | read_only_udm.target.user.userid |
L'ID utente target è dedotto dai campi userid , external_identity_nameid , current_user , member , user_id , actor_id o raw.user_id , se presenti. |
(Parser Logic) | read_only_udm.target.user.user_display_name |
Il nome visualizzato dell'utente di destinazione è dedotto dai campi login , user , external_identity_username , user_login o raw.login , se presenti. |
(Parser Logic) | read_only_udm.principal.asset.asset_id |
L'ID risorsa principale è ricavato dal campo guid , preceduto da "GUID: ". |
(Parser Logic) | read_only_udm.principal.hostname |
Il nome host principale è dedotto dai campi hostname , request_host , host o principal_hostname , se presenti. |
(Parser Logic) | read_only_udm.principal.ip |
L'IP principale è ricavato dai campi column6 , ip , x_real_ip , remote_address , raw.ip , actor_ip o log:source:ip , se presenti. |
(Parser Logic) | read_only_udm.principal.location.country_or_region |
Il paese o la regione della località principale è ricavato dal campo actor_location.country_code , se presente. |
(Parser Logic) | read_only_udm.principal.port |
La porta principale è ricavata dai campi srcp o log:source:port , se presenti, e convertita in un numero intero. |
(Parser Logic) | read_only_udm.principal.resource.name |
Il nome della risorsa principale è dedotto dal campo service.name , se presente. |
(Parser Logic) | read_only_udm.principal.resource.product_object_id |
L'ID oggetto prodotto della risorsa principale è dedotto dai campi service.instance.id o subject_id , se presenti. |
(Parser Logic) | read_only_udm.principal.url |
L'URL principale è derivato dal campo repo , se presente. |
(Parser Logic) | read_only_udm.principal.user.userid |
L'ID utente principale viene ricavato dal campo repository_owner_id , se presente, e convertito in stringa. |
(Parser Logic) | read_only_udm.principal.user.user_display_name |
Il nome visualizzato dell'utente principale è dedotto dal campo repo_name , se presente. |
(Parser Logic) | read_only_udm.intermediary.hostname |
Il nome host intermedio è dedotto dal campo hostname , se presente. |
(Parser Logic) | read_only_udm.intermediary.ip |
L'IP intermedio è ricavato dai campi x_forwarded_for o xff_ip , se presenti. |
(Parser Logic) | read_only_udm.metadata.description |
La descrizione dei metadati è ricavata dai campi content , at o raw.message , se presenti. |
(Parser Logic) | read_only_udm.metadata.product_event_type |
Il tipo di evento prodotto è dedotto dai campi process_type o action , se presenti. |
(Parser Logic) | read_only_udm.metadata.product_log_id |
L'ID log del prodotto è dedotto dai campi github_request_id , id , request_id o raw.request_id , se presenti. |
(Parser Logic) | read_only_udm.metadata.product_version |
La versione del prodotto è ricavata dal campo version , se presente. |
(Parser Logic) | read_only_udm.security_result.about.labels.[].key , read_only_udm.security_result.about.labels.[].value |
All'array security_result.about.labels vengono aggiunte varie etichette in base alla presenza e ai valori di campi come data.events , data.workflow_id , workflow.name , data.head_branch , data.trigger_id , data.workflow_run_id e data.event . |
(Parser Logic) | read_only_udm.security_result.description |
La descrizione del risultato di sicurezza è ricavata dai campi auth_status , data_msg , msg , Body , desc o content , se presenti. |
(Parser Logic) | read_only_udm.security_result.severity_details |
I dettagli sulla gravità del risultato di sicurezza vengono ricavati dal campo userid , se presente. |
(Parser Logic) | read_only_udm.security_result.summary |
Il riepilogo dei risultati di sicurezza è dedotto dai campi creason , action o reason , se presenti. |
(Parser Logic) | read_only_udm.network.http.referral_url |
L'URL referral HTTP è ricavato dai campi column4 o referer , se presenti. |
(Parser Logic) | read_only_udm.network.http.user_agent |
Lo user agent HTTP è dedotto dai campi column5 , http_ua o user_agent , se presenti. |
(Parser Logic) | read_only_udm.network.sent_bytes |
I byte inviati dalla rete derivano dai campi client_sent o fs_sent , se presenti, e vengono convertiti in un numero intero non firmato. |
(Parser Logic) | read_only_udm.additional.fields.[].key , read_only_udm.additional.fields.[].value.string_value |
Molti campi vengono mappati in modo condizionale come coppie chiave-valore nell'array additional.fields , tra cui 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 e job . La logica specifica per ogni campo è descritta nel codice del parser. |
(Parser Logic) | read_only_udm.security_result.detection_fields.[].key , read_only_udm.security_result.detection_fields.[].value |
I campi controller_action , two_factor , delay_time , queued_time , delivery_build , delivery_send e stages vengono mappati in modo condizionale all'array security_result.detection_fields . |
(Parser Logic) | read_only_udm.target.resource.attribute.labels.[].key , read_only_udm.target.resource.attribute.labels.[].value |
I campi hook_id , job_name , job_workflow_ref , runner_group_id , runner_group_name , runner_name , runner_id , workflow_run_id e business_id vengono mappati condizionatamente come etichette all'interno dell'array target.resource.attribute.labels . |
(Parser Logic) | read_only_udm.metadata.event_timestamp |
Se il timestamp non è direttamente disponibile in un formato supportato, l'analizzatore tenta di estrarlo e convertirlo da vari campi, tra cui ts , now , created_at , Timestamp , time e raw.now . |
(Parser Logic) | read_only_udm.network.http.method |
Il metodo HTTP è derivato dai campi method , column1 , request_method , http_method o raw.method , convertiti in maiuscolo. |
(Parser Logic) | read_only_udm.target.application |
L'applicazione di destinazione è ricavata dai campi process , program o app , se presenti. |
Modifiche
2023-12-18
- Correzione di bug:
- Se "process_type" è "github_production", aggiungi un pattern Grok per estrarre "kv_data".
- Se "process_type" è "github_production", mappa "user" a "target.user.user_display_name".
- Se "process_type" è "github_production", mappa "user_id" a "target.user.userid".
- "referrer" è stato mappato a "network.http.referral_url".
- "user_session_id" è stato mappato a "network.session_id".
- "ip" è stato mappato a "principal.ip".
- "from" è stato mappato a "additional.fields".
- "request_category" è stato mappato a "additional.fields".
- "device_cookie" è stato mappato a "additional.fields".
- "operation_type" è stato mappato a "additional.fields".
- "category_type" è stato mappato a "additional.fields".
- "note" è stato mappato a "additional.fields".
- "read" è stato mappato a "additional.fields".
- "pre_perform_allocation_count" è stato mappato a "additional.fields".
- "backend" è stato mappato a "additional.fields".
- "queue" è stato mappato a "additional.fields".
- "class" è stato mappato a "additional.fields".
- "success" è stato mappato a "additional.fields".
- "controller_action" è stato mappato a "security_result.detection_fields".
- "two_factor" è stato mappato a "security_result.detection_fields".
2023-10-25
- Quando "public_repo" è "false", imposta "target.location.name" su "PRIVATE", altrimenti impostalo su "PUBLIC".
2023-10-11
- "user_agent" è stato mappato a "network.http.user_agent" e "network.http.parsed_user_agent".
- "request_method" è stato mappato a "network.http.method".
- "application_name" è stato mappato a "target.application".
- "status_code" è stato mappato a "network.http.response_code".
- "url_path" è stato mappato a "target.url".
- "user_id" è stato mappato a "target.userid".
- "transport_protocol_name" è stato mappato a "network.application_protocol".
- "raw.now" è stato mappato a "metadata.event_timestamp".
- "raw.ip" è stato mappato a "principal.ip".
- "raw.request_id" è stato mappato a "metadata.product_log_id".
- "raw.repo" è stato mappato a "target.url".
- "raw.action" è stato mappato a "security_result.summary".
- "raw.protocol" è stato mappato a "network.application_protocol".
- "raw.message" è stato mappato a "metadata.description".
- "raw.at" è stato mappato a "security_result.action".
- "raw.login" è stato mappato a "target.user_display_name".
- "raw.user_id" è stato mappato a "target.userid".
- "raw.failure_reason", "raw.failure_type", "raw.raw_login" e "raw.from" sono stati mappati a "additional.fields".
- I campi "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" sono stati mappati a "additional.fields".
2023-07-31
- Correzione di bug:
- È stato aggiunto "on_error" ai pattern Grok.
- "workflow_run.id" è stato mappato a "target.resource.attribute.labels".
- "workflow_run.event" è stato mappato a "additional.fields".
- È stata mappata la colonna "workflow_run.actor.login" alla colonna "principal.user.userid".
- È stata mappata la colonna "workflow_run.head_branch" alla colonna "security_result.about.labels".
- "workflow_run.head_sha" è stato mappato a "target.file.sha256".
- "enterprise.name" è stato mappato a "additional.fields".
- "workflow.name" è stato mappato a "security_result.about.labels".
- "workflow_run.workflow_id" è stato mappato a "security_result.about.labels".
2023-06-22
- È stato aggiunto il supporto per i formati dei log syslog "github_auth", "haproxy", "github_access", "github_unicorn", "github_production", "hookshot-go", "babeld", "github_gitauth", "babeld2hydro", "authzd", "gitrpcd", "agent", "git-daemon", "github_resqued", "sudo", "systemd" e "github_audit".
2023-06-09
- Enhancement-
- "external_identity_nameid" è stato mappato a "target.user.email_addresses" se in formato email.
- Recupera il nome utente da "external_identity_nameid" e mappalo a "target.user.userid".
2023-01-13
- Enhancement-
- "actor_ip" è stato mappato a "principal.ip".
- "hashed_token" è stato mappato a "network.session_id".
- "external_identity_nameid" è stato mappato a "target.user.userid "
- "external_identity_username" è stato mappato a "target.user.user_display_name".
2022-11-28
- Miglioramento: è stato mappato "config.url" a "target.url".
2022-07-07
- Miglioramento: i log nel formato JSON appena importati con l'azione "git.clone","git.push" e "workflows.prepared_workflow_job" sono stati gestiti e analizzati.
- "job_name" mappato a "target.resource.attribute.labels".
- "job_workflow_ref" mappato a "target.resource.attribute.labels".
- "runner_group_id" mappato a "target.resource.attribute.labels".
- "runner_group_name" mappato a "target.resource.attribute.labels".
- "runner_name" mappato a "target.resource.attribute.labels".
- 'runner_id' mappato a 'target.resource.attribute.labels'.
- "workflow_run_id" mappato a "target.resource.attribute.labels".
- 'actor_location.country_code' mappato a 'principal.location.country_or_region'.