Raccogliere i log di Atlassian Jira
Panoramica
Questo parser gestisce i log di Atlassian Jira nei formati SYSLOG e JSON. Innanzitutto tenta di analizzare il messaggio come JSON. Se l'analisi non va a buon fine, utilizza i pattern grok per analizzare i messaggi formattati SYSLOG, estraendo vari campi come indirizzi IP, nomi utente, metodi HTTP e codici di risposta prima di mapparli alla UDM. Il parser gestisce anche eventi di controllo Jira specifici, inclusi gli accessi riusciti e non riusciti, e mappa i campi pertinenti agli attributi dei risultati di sicurezza all'interno di UDM.
Prima di iniziare
Assicurati di soddisfare i seguenti prerequisiti:
- Istanza Google SecOps.
- Accesso con privilegi ad Atlassian Jira.
Configurare i feed
Esistono due diversi punti di accesso per configurare i feed nella piattaforma Google SecOps:
- Impostazioni SIEM > Feed
- Hub dei contenuti > Pacchetti di contenuti
Configura i feed da Impostazioni SIEM > Feed
Per configurare un feed:
- Vai a Impostazioni SIEM > Feed.
- Fai clic su Aggiungi nuovo feed.
- Nella pagina successiva, fai clic su Configura un singolo feed.
- Nel campo Nome feed, inserisci un nome per il feed (ad esempio, Log di Atlassian Jira).
- Seleziona Webhook come Tipo di origine.
- Seleziona Atlassian Jira come Tipo di log.
- Fai clic su Avanti.
- (Facoltativo) Specifica i valori per i seguenti parametri di input:
- Delimitatore di suddivisione: il delimitatore utilizzato per separare le righe di log, ad esempio
\n
. - Spazio dei nomi dell'asset: lo spazio dei nomi dell'asset.
- Etichette di importazione: l'etichetta applicata agli eventi di questo feed.
- Delimitatore di suddivisione: il delimitatore utilizzato per separare le righe di log, ad esempio
- Fai clic su Avanti.
- Controlla la configurazione del feed nella schermata Finalizza 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 puoi visualizzare di nuovo 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 dell'endpoint nell'applicazione client.
- Fai clic su Fine.
Configurare i feed dall'hub dei contenuti
Specifica i valori per i seguenti campi:
- Delimitatore di suddivisione: il delimitatore utilizzato per separare le righe di log, ad esempio
\n
.
Opzioni avanzate
- Nome feed: un valore precompilato che identifica il feed.
- Tipo di origine: metodo utilizzato per raccogliere i log in Google SecOps.
- Spazio dei nomi dell'asset: lo spazio dei nomi associato al feed.
Etichette di importazione: etichette applicate a tutti gli eventi di questo feed.
Fai clic su Genera chiave segreta per generare una chiave segreta per autenticare questo feed.
Copia e memorizza la chiave segreta. Non puoi visualizzare di nuovo 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 dell'endpoint nell'applicazione client.
Crea una chiave API per il feed webhook
Vai alla consoleGoogle Cloud > Credenziali.
Fai clic su Crea credenziali e poi seleziona Chiave API.
Limita l'accesso della chiave API all'API Google Security Operations.
Specifica l'URL dell'endpoint
- Nella tua applicazione client, specifica l'URL dell'endpoint HTTPS fornito nel feed webhook.
Attiva l'autenticazione specificando la chiave API e la chiave segreta come parte dell'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 a Google Security Operations.SECRET
: la chiave segreta che hai generato per autenticare il feed.
Crea un webhook in Atlassian Jira per Google SecOps
- Accedi alla tua istanza Jira come amministratore.
- Vai a Impostazioni settings > Sistema > Webhook.
- Fai clic su Crea un webhook.
- Configura i seguenti dettagli del webhook:
- Nome: fornisci un nome descrittivo per il webhook (ad esempio, Integrazione Google SecOps).
- URL: inserisci l'URL dell'endpoint API Google SecOps.
- Eventi: seleziona gli eventi Jira che devono attivare il webhook. Scegli gli eventi pertinenti alle tue esigenze di monitoraggio della sicurezza (ad esempio, problema creato, problema aggiornato, commento aggiunto). Se necessario, puoi selezionare Tutti gli eventi.
- (Facoltativo) Filtro JQL: utilizza un filtro JQL per perfezionare ulteriormente gli eventi che attivano il webhook. Ciò è utile per concentrarsi su progetti, tipi di problemi o altri criteri specifici.
- Escludi corpo: lascia questa opzione deselezionata. Il webhook deve inviare i dati degli eventi in formato JSON a Google SecOps.
- Fai clic su Crea per salvare la configurazione del webhook.
Tabella di mappatura UDM
Campo log | Mappatura UDM | Logic |
---|---|---|
affectedObjects.id |
target.resource.attribute.labels.value |
Il campo id all'interno di ogni oggetto dell'array affectedObjects viene mappato a un'etichetta con la chiave "ID_[index]", dove [index] è la posizione dell'oggetto nell'array. |
affectedObjects.name |
target.resource.attribute.labels.value |
Il campo name all'interno di ogni oggetto dell'array affectedObjects è mappato a un'etichetta con la chiave "Name_[index]", dove [index] è la posizione dell'oggetto nell'array. |
affectedObjects.type |
target.resource.attribute.labels.value |
Il campo type all'interno di ogni oggetto dell'array affectedObjects viene mappato a un'etichetta con la chiave "Type_[index]", dove [index] è la posizione dell'oggetto nell'array. |
associatedItems.0.id |
target.user.userid |
Se associatedItems.0.typeName è "USER", questo campo viene mappato a target.user.userid . In caso contrario, viene mappato a un'etichetta con la chiave "ID elementi associati" in security_result.detection_fields . |
associatedItems.0.name |
target.user.user_display_name |
Se associatedItems.0.typeName è "USER", questo campo viene mappato a target.user.user_display_name . In caso contrario, viene mappato a un'etichetta con la chiave "Nome elementi associati" in security_result.detection_fields . |
associatedItems.0.parentId |
target.process.parent_process.pid |
Se associatedItems.0.typeName è "USER", questo campo viene mappato a target.process.parent_process.pid . |
associatedItems.0.parentName |
target.resource.parent |
Se associatedItems.0.typeName è "USER", questo campo viene mappato a target.resource.parent . |
associatedItems.0.typeName |
security_result.detection_fields.value |
Mappato a un'etichetta con la chiave "associatedItems TypeName" in security_result.detection_fields . |
author.id |
principal.user.userid |
Mappato a principal.user.userid . |
author.name |
principal.user.user_display_name |
Mappato a principal.user.user_display_name . |
author.type |
principal.resource.attribute.labels.value |
Mappato a un'etichetta con la chiave "Tipo di autore" in principal.resource.attribute.labels . |
author.uri |
principal.url |
Mappato a principal.url . |
authorAccountId |
principal.user.userid |
Mappato a principal.user.userid . |
authorKey |
target.resource.attribute.labels.value |
Mappato a un'etichetta con la chiave "Author Key" in target.resource.attribute.labels . |
auditType.action |
security_result.summary |
Mappato a security_result.summary . Utilizzato anche per derivare security_result.action e metadata.event_type (USER_LOGIN se l'azione contiene "login", ALLOW se "successful", BLOCK se "failed"). |
auditType.area |
metadata.product_event_type |
Mappato a metadata.product_event_type . |
auditType.category |
security_result.category_details |
Mappato a security_result.category_details . |
category |
metadata.product_event_type |
Mappato a metadata.product_event_type . |
changedValues.changedFrom |
security_result.about.resource.attribute.labels.value |
Mappato a un'etichetta con la chiave "Changed From" (Modificato da) in security_result.about.resource.attribute.labels . |
changedValues.changedTo |
security_result.about.resource.attribute.labels.value |
Mappato a un'etichetta con la chiave "Changed To" (Modificato in) in security_result.about.resource.attribute.labels . |
changedValues.fieldName |
security_result.about.resource.attribute.labels.value |
Mappato a un'etichetta con la chiave "FieldName" in security_result.about.resource.attribute.labels . |
changedValues.i18nKey |
security_result.about.resource.attribute.labels.value |
Mappato a un'etichetta con la chiave "FieldName" in security_result.about.resource.attribute.labels . |
changedValues.key |
security_result.about.resource.attribute.labels.value |
Mappato a un'etichetta con la chiave "Changed From" (Modificato da) in security_result.about.resource.attribute.labels . |
changedValues.to |
security_result.about.resource.attribute.labels.value |
Mappato a un'etichetta con la chiave "Changed To" (Modificato in) in security_result.about.resource.attribute.labels . |
created |
metadata.event_timestamp |
Analizzato e mappato a metadata.event_timestamp . |
dst_ip |
target.ip |
Mappato a target.ip . |
extraAttributes.name |
principal.resource.attribute.labels.value |
Mappato a un'etichetta con la chiave "Name" in principal.resource.attribute.labels . |
extraAttributes.value |
principal.resource.attribute.labels.value |
Mappato a un'etichetta con la chiave "Valore" in principal.resource.attribute.labels . |
http_method |
network.http.method |
Mappato a network.http.method . |
http_referral_url |
network.http.referral_url |
Mappato a network.http.referral_url . |
id |
metadata.product_log_id |
Mappato a metadata.product_log_id . |
objectItem.id |
security_result.detection_fields.value |
Mappato a un'etichetta con la chiave "objectItem Id" in security_result.detection_fields . |
objectItem.name |
security_result.detection_fields.value |
Mappato a un'etichetta con la chiave "objectItem Name" in security_result.detection_fields . |
objectItem.typeName |
security_result.detection_fields.value |
Mappato a un'etichetta con la chiave "objectItem TypeName" in security_result.detection_fields . |
path |
principal.url |
Se non è "-" o "/status", viene mappato a principal.url . |
protocol |
network.ip_protocol |
Se "HTTP", mappato a network.ip_protocol . |
remoteAddress |
principal.ip |
Mappato a principal.ip . |
response_code |
network.http.response_code |
Mappato a network.http.response_code . |
sent_bytes |
network.sent_bytes |
Mappato a network.sent_bytes . |
source |
principal.ip |
Analizzato per estrarre gli indirizzi IP e unito a principal.ip . |
src_ip1 , src_ip2 , src_ip3 |
principal.ip |
Mappato a principal.ip . |
summary |
metadata.description |
Mappato a metadata.description . |
user_agent |
network.http.user_agent |
Mappato a network.http.user_agent . |
user_name |
principal.user.userid |
Mappato a principal.user.userid . Imposta su "MACHINE" se auditType.action contiene "login". Derivato da date_time se viene analizzato syslog o da created se viene analizzato JSON. Se timestamp è disponibile in JSON, viene utilizzato al posto di created . Se nessuno di questi è presente, viene utilizzato create_time dal batch. Derivato in base alla presenza di altri campi: NETWORK_HTTP se è presente dst_ip , USER_UNCATEGORIZED se è presente user_name o (associatedItems.0.typeName è "USER" ed è presente associatedItems.0.id ), STATUS_UPDATE se è presente src_ip1 , src_ip2 , src_ip3 o remoteAddress oppure GENERIC_EVENT in caso contrario. Eseguito l'override su USER_LOGIN se auditType.action contiene "login". Impostato sempre su "ATLASSIAN_JIRA". Impostato sempre su "ATLASSIAN_JIRA". Imposta "ALLOW" se auditType.action contiene "login successful" (accesso riuscito) e "BLOCK" (BLOCCO) se auditType.action contiene "login failed" (accesso non riuscito). |
Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.