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. In caso di fallimento, 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 all'UDM. Il parser gestisce anche eventi di controllo Jira specifici, inclusi i successi e gli errori di accesso, e mappa i campi pertinenti agli attributi dei risultati di sicurezza all'interno dell'UDM.
Prima di iniziare
- Assicurati di avere un'istanza Google SecOps.
- Assicurati di disporre dell'accesso privilegiato ad Atlassian Jira.
Configura un feed in Google SecOps per importare i log di Atlassian Jira
- Vai a Impostazioni SIEM > Feed.
- Fai clic su Aggiungi nuovo.
- 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 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 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 i parametri di query 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 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 dell'API Google SecOps.
- Eventi: seleziona gli eventi Jira che devono attivare l'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. Questo è utile per concentrarsi su progetti, tipi di problemi o altri criteri specifici.
- Escludi corpo: lascia deselezionata questa opzione. Il webhook deve inviare i dati sugli eventi in formato JSON a Google SecOps.
- Fai clic su Crea per salvare la configurazione dell'webhook.
Tabella di mappatura UDM
Campo log | Mappatura UDM | Logica |
---|---|---|
affectedObjects.id |
target.resource.attribute.labels.value |
Il campo id all'interno di ogni oggetto dell'array affectedObjects è mappato a un'etichetta con 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 chiave "Nome_[indice]", dove [indice] è la posizione dell'oggetto nell'array. |
affectedObjects.type |
target.resource.attribute.labels.value |
Il campo type all'interno di ogni oggetto dell'array affectedObjects è mappato a un'etichetta con chiave "Tipo_[indice]", dove [indice] è la posizione dell'oggetto nell'array. |
associatedItems.0.id |
target.user.userid |
Se associatedItems.0.typeName è "USER", questo campo è mappato a target.user.userid . In caso contrario, viene mappato a un'etichetta con la chiave "associatedItems Id" in security_result.detection_fields . |
associatedItems.0.name |
target.user.user_display_name |
Se associatedItems.0.typeName è "USER", questo campo è mappato a target.user.user_display_name . In caso contrario, viene mappato a un'etichetta con la chiave "associatedItems Name" in security_result.detection_fields . |
associatedItems.0.parentId |
target.process.parent_process.pid |
Se associatedItems.0.typeName è "USER", questo campo è mappato a target.process.parent_process.pid . |
associatedItems.0.parentName |
target.resource.parent |
Se associatedItems.0.typeName è "USER", questo campo è mappato a target.resource.parent . |
associatedItems.0.typeName |
security_result.detection_fields.value |
Mappato a un'etichetta con chiave "associatedItems TypeName" in security_result.detection_fields . |
author.id |
principal.user.userid |
Mappatura a principal.user.userid . |
author.name |
principal.user.user_display_name |
Mappatura a principal.user.user_display_name . |
author.type |
principal.resource.attribute.labels.value |
Mappato a un'etichetta con chiave "Tipo di autore" in principal.resource.attribute.labels . |
author.uri |
principal.url |
Mappatura a principal.url . |
authorAccountId |
principal.user.userid |
Mappatura a principal.user.userid . |
authorKey |
target.resource.attribute.labels.value |
Mappato a un'etichetta con chiave "Author Key" in target.resource.attribute.labels . |
auditType.action |
security_result.summary |
Mappatura a security_result.summary . Viene utilizzato anche per dedurre 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 |
Mappatura a metadata.product_event_type . |
auditType.category |
security_result.category_details |
Mappatura a security_result.category_details . |
category |
metadata.product_event_type |
Mappatura a metadata.product_event_type . |
changedValues.changedFrom |
security_result.about.resource.attribute.labels.value |
Mappato a un'etichetta con chiave "Modificato da" in security_result.about.resource.attribute.labels . |
changedValues.changedTo |
security_result.about.resource.attribute.labels.value |
Mappato a un'etichetta con chiave "Modificato in" in security_result.about.resource.attribute.labels . |
changedValues.fieldName |
security_result.about.resource.attribute.labels.value |
Mappato a un'etichetta con chiave "FieldName" in security_result.about.resource.attribute.labels . |
changedValues.i18nKey |
security_result.about.resource.attribute.labels.value |
Mappato a un'etichetta con chiave "FieldName" in security_result.about.resource.attribute.labels . |
changedValues.key |
security_result.about.resource.attribute.labels.value |
Mappato a un'etichetta con chiave "Modificato da" in security_result.about.resource.attribute.labels . |
changedValues.to |
security_result.about.resource.attribute.labels.value |
Mappato a un'etichetta con chiave "Modificato in" in security_result.about.resource.attribute.labels . |
created |
metadata.event_timestamp |
Analizzati e mappati a metadata.event_timestamp . |
dst_ip |
target.ip |
Mappatura a target.ip . |
extraAttributes.name |
principal.resource.attribute.labels.value |
Mappato a un'etichetta con chiave "Name" in principal.resource.attribute.labels . |
extraAttributes.value |
principal.resource.attribute.labels.value |
Mappato a un'etichetta con chiave "Valore" in principal.resource.attribute.labels . |
http_method |
network.http.method |
Mappatura a network.http.method . |
http_referral_url |
network.http.referral_url |
Mappatura a network.http.referral_url . |
id |
metadata.product_log_id |
Mappatura a metadata.product_log_id . |
objectItem.id |
security_result.detection_fields.value |
Mappato a un'etichetta con chiave "objectItem Id" in security_result.detection_fields . |
objectItem.name |
security_result.detection_fields.value |
Mappato a un'etichetta con chiave "objectItem Name" in security_result.detection_fields . |
objectItem.typeName |
security_result.detection_fields.value |
Mappato a un'etichetta con chiave "objectItem TypeName" in security_result.detection_fields . |
path |
principal.url |
Se non "-" o "/status", mappato a principal.url . |
protocol |
network.ip_protocol |
Se "HTTP", mappato a network.ip_protocol . |
remoteAddress |
principal.ip |
Mappatura a principal.ip . |
response_code |
network.http.response_code |
Mappatura a network.http.response_code . |
sent_bytes |
network.sent_bytes |
Mappatura a network.sent_bytes . |
source |
principal.ip |
Analizzati per estrarre gli indirizzi IP e uniti in principal.ip . |
src_ip1 , src_ip2 , src_ip3 |
principal.ip |
Mappatura a principal.ip . |
summary |
metadata.description |
Mappatura a metadata.description . |
user_agent |
network.http.user_agent |
Mappatura a network.http.user_agent . |
user_name |
principal.user.userid |
Mappatura a principal.user.userid . Imposta su "MACCHINA" se auditType.action contiene "login". Dedotto 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 non sono presenti, viene utilizzato il valore create_time del batch. Dedotto in base alla presenza di altri campi: NETWORK_HTTP se è presente dst_ip , USER_UNCATEGORIZED se è presente user_name o (associatedItems.0.typeName è "USER" e associatedItems.0.id è presente), STATUS_UPDATE se è presente src_ip1 , src_ip2 , src_ip3 o remoteAddress oppure GENERIC_EVENT in caso contrario. Sostituito con USER_LOGIN se auditType.action contiene "login". Deve sempre essere impostato su "ATLASSIAN_JIRA". Deve sempre essere impostato su "ATLASSIAN_JIRA". Imposta su "ALLOW" se auditType.action contiene "login successful", "BLOCK" se auditType.action contiene "login failed". |
Modifiche
2023-12-12
- È stato aggiunto il supporto per la mappatura di più indirizzi IP da "source" a "principal.ip".
2023-11-10
- È stato aggiunto un nuovo pattern Grok per analizzare i log JSON con errori.
- "affectedObjects" è stato mappato a "target.resource.attribute.labels".
- "changedValues" è stato mappato a "security_result.about.resource.attribute.labels".
- "extraAttributes" è stato mappato a "principal.resource.attribute.labels".
- "source" è stato mappato a "principal.ip".
- Sono stati mappati "author.id", "author.name", "author.uri", "author.type", "auditType.area", "auditType.category" e "auditType.action" a "principal.user.userid", "principal.user.user_display_name", "principal.url", "principal.resource.attribute.labels", "metadata.product_event_type", "security_result.category_details" e "security_result.summary", rispettivamente.
2023-02-09
- È stato aggiunto un blocco "json" per recuperare i dati JSON.
2023-01-10
- Miglioramento: è stato aggiunto il supporto per i log in formato JSON.
- "authorAccountId" è stato mappato a "principal.user.userid".
- "id" è stato mappato a "metadata.product_log_id".
- "remoteAddress" è stato mappato a "principal.ip".
- "summary" è stato mappato a "metadata.description".
- "category" è stato mappato a "metadata.product_event_type".
- "authorKey" è stato mappato a "target.resource.attribute.labels".
- Sono stati mappati "objectItem.id", "objectItem.name", "objectItem.typeName" a "security_result.detection_fields".
- "associatedItems.0.id" è stato mappato a "target.user.userid" quando "associatedItems.0.typeName" è "USER".
- "associatedItems.0.name" è stato mappato a "target.user.user_display_name" quando "associatedItems.0.typeName" è "USER".
- "associatedItems.0.parentId" è stato mappato a "target.process.parent_process.pid" quando "associatedItems.0.typeName" è "USER".
- "associatedItems.0.parentName" è stato mappato a "target.resource.parent" quando "associatedItems.0.typeName" è "USER".
- "associatedItems.0.id" e "associatedItems.0.name" sono stati mappati a "security_result.detection_fields" quando "associatedItems.0.typeName" non è "USER".
- "associatedItems.0.typeName" è stato mappato a "security_result.detection_fields".
- Sono stati mappati "changedValues.fieldName", "changedValues.changedFrom", ""changedValues.changedTo" a "security_result.about.resource.attribute.labels".
- "STATUS_UPDATE" è stato mappato a "metadata.event_type" se è presente "remoteAddress".
- "USER_UNCATEGORIZED" è stato mappato a "metadata.event_type" se è presente "authorAccountId" o "associatedItems.0.typeName" è "USER" ed è presente "associatedItems.0.id".
2022-05-31
- Correzione di bug: è stata aggiunta una condizione per controllare la mappatura errata di principal.url se il valore dell'URL nei log contiene "/status".
Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.