Raccogli i log di Ansible AWX
Panoramica
Questo parser estrae i dati dei log in formato JSON da Ansible AWX, convertendoli in Unified Data Model (UDM). Gestisce vari formati di log, estrae campi pertinenti come timestamp, indirizzi IP, informazioni sull'host e dettagli sugli eventi e li mappa ai campi UDM corrispondenti, gestendo anche casi limite specifici e arricchendo i dati con etichette e metadati.
Prima di iniziare
- Assicurati di avere un'istanza Google SecOps.
- Assicurati di disporre dell'accesso privilegiato ad Ansible AWX.
Configurare un feed in Google SecOps per importare i log di Ansible AWX
- Vai a Impostazioni SIEM > Feed.
- Fai clic su Aggiungi nuovo.
- Nel campo Nome feed, inserisci un nome per il feed (ad esempio Log Ansible AWX).
- Seleziona Webhook come Tipo di origine.
- Seleziona Ansible AWX 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.
Configurare il webhook in Ansible AWX
- Accedi all'istanza AWX.
- Vai alla sezione Notifiche, in Amministrazione.
- Fai clic su Aggiungi.
Configura le impostazioni webhook:
- Nome: fornisci un nome descrittivo per il webhook (ad esempio Webhook Google SecOps).
- Tipo: seleziona Webhook dall'elenco.
- URL di destinazione: inserisci l'URL dell'endpoint dell'API Google SecOps.
- Metodo HTTP: seleziona POST.
(Facoltativo) Intestazioni HTTP: aggiungi le intestazioni necessarie per l'autenticazione o il tipo di contenuti. Ad esempio, potresti dover includere un'intestazione
Authorization
con un token di accesso. Per requisiti specifici per gli header, consulta la documentazione di Google SecOps.Fai clic su Salva per creare l'webhook.
Vai a Progetti, nella sezione Risorse.
Seleziona i progetti a cui vuoi associare l'webhook.
Nel progetto selezionato, vai alla scheda Notifiche.
Seleziona gli attivatori da attivare per la notifica webhook creata in precedenza Avvio | Successo | Errore.
Le notifiche verranno ora applicate a tutti i modelli associati al progetto. Puoi disattivarle manualmente andando al campo Notifiche in ogni modello.
Tabella di mappatura UDM
Campo log | Mappatura UDM | Logica |
---|---|---|
agent.ephemeral_id |
observer.labels.value |
Il valore di agent.ephemeral_id dal log non elaborato. |
agent.hostname |
observer.hostname |
Il valore di agent.hostname dal log non elaborato. |
agent.id |
observer.asset_id |
Concatenazione di "filebeat:" e del valore di agent.id dal log non elaborato. |
agent.name |
observer.user.userid |
Il valore di agent.name dal log non elaborato. |
agent.type |
observer.application |
Il valore di agent.type dal log non elaborato. |
agent.version |
observer.platform_version |
Il valore di agent.version dal log non elaborato. |
cloud.availability_zone |
principal.resource.attribute.labels.value |
Il valore di cloud.availability_zone dal log non elaborato. |
cloud.instance.id |
principal.resource.product_object_id |
Il valore di cloud.instance.id dal log non elaborato. |
cloud.instance.name |
principal.resource.name |
Il valore di cloud.instance.name dal log non elaborato. |
cloud.machine.type |
principal.resource.attribute.labels.value |
Il valore di cloud.machine.type dal log non elaborato. |
cloud.provider |
principal.resource.attribute.labels.value |
Il valore di cloud.provider dal log non elaborato. |
event1 |
metadata.description |
Il valore di event1 dal log non elaborato. Se event1 non è presente, viene utilizzato il valore di message . |
event1_data.host |
principal.hostname |
Il valore di event1_data.host dal log non elaborato. Utilizzato come opzione di riserva se host_name e host non sono presenti. |
event1_data.remote_addr |
principal.ip |
L'indirizzo IP estratto da event1_data.remote_addr utilizzando un pattern grok. |
event1_data.task |
security_result.detection_fields.value |
Il valore di event1_data.task dal log non elaborato. |
event1_data.task_path |
principal.process.file.full_path |
Il valore di event1_data.task_path dal log non elaborato. |
event1_data.task_uuid |
security_result.detection_fields.value |
Il valore di event1_data.task_uuid dal log non elaborato. |
event1_data.uuid |
metadata.product_log_id |
Il valore di event1_data.uuid dal log non elaborato. |
event1_display |
security_result.description |
Il valore di event1_display dal log non elaborato. |
host |
principal.hostname |
Il valore di host dal log non elaborato. Utilizzato come opzione di riserva se host_name non è presente. Se si tratta di un numero, viene convertito in una stringa. |
host.architecture |
target.asset.hardware.cpu_platform |
Il valore di host.architecture dal log non elaborato. |
host.fqdn |
target.administrative_domain |
Il valore di host.fqdn dal log non elaborato. |
host.hostname |
target.hostname |
Il valore di host.hostname dal log non elaborato. |
host.id |
target.asset.asset_id |
"ID host: " concatenato con il valore di host.id dal log non elaborato. |
host.ip |
target.asset.ip |
I valori dell'array host.ip dal log non elaborato. |
host.mac |
target.mac |
I valori dell'array host.mac dal log non elaborato. |
host.os.codename |
target.asset.attribute.labels.value |
Il valore di host.os.codename dal log non elaborato. |
host.os.kernel |
target.platform_patch_level |
Il valore di host.os.kernel dal log non elaborato. |
host.os.name |
target.asset.attribute.labels.value |
Il valore di host.os.name dal log non elaborato. |
host.os.platform |
target.platform |
Se il valore di host.os.platform è "debian", il campo UDM è impostato su "LINUX". |
host.os.version |
target.platform_version |
Il valore di host.os.version dal log non elaborato. |
host_name |
principal.hostname |
Il valore di host_name dal log non elaborato. |
input.type |
network.ip_protocol |
Se il valore di input.type è "tcp", il campo UDM viene impostato su "TCP". |
level |
security_result.severity |
In base al valore di level : "DEBUG", "INFO", "AUDIT" mappano a "INFORMATIONAL"; "ERROR" mappa a "ERROR"; "WARNING" mappa a "MEDIUM". |
level |
security_result.severity_details |
Il valore di level dal log non elaborato. |
log.source.address |
principal.ip |
L'indirizzo IP estratto da log.source.address utilizzando un pattern Grok. |
log.source.address |
principal.port |
La porta estratta da log.source.address utilizzando un pattern grok. |
logger_name |
intermediary.application |
Il valore di logger_name dal log non elaborato. |
message |
metadata.description |
Il valore di message dal log non elaborato. Utilizzato come opzione di riserva se event1 non è presente. |
metadata.event_type |
metadata.event_type |
Determinato dalla logica del parser in base alla presenza di determinati campi. "NETWORK_CONNECTION" se sono presenti log.source.address e host.ip . "STATUS_UPDATE" se sono presenti principal_hostname o event1_data.remote_addr . "GENERIC_EVENT" in caso contrario. |
metadata.log_type |
metadata.log_type |
Hardcoded su "ANSIBLE_AWX". |
metadata.product_name |
metadata.product_name |
Hardcoded su "ANSIBLE_AWX". |
metadata.vendor_name |
metadata.vendor_name |
Hardcoded su "ANSIBLE_AWX". |
parent_uuid |
security_result.detection_fields.value |
Il valore di parent_uuid dal log non elaborato. |
principal.resource.resource_type |
principal.resource.resource_type |
Hardcoded su "VIRTUAL_MACHINE" se è presente cloud.instance.name . |
observer.labels.key |
observer.labels.key |
Hardcoded su "ephemeral_id". |
principal.resource.attribute.labels.key |
principal.resource.attribute.labels.key |
Hardcoded su "machine_type", "provider" o "availability_zone" a seconda del campo mappato. |
security_result.detection_fields.key |
security_result.detection_fields.key |
Hardcoded su "parent_uuid", "task" o "task_uuid" a seconda del campo mappato. |
target.asset.attribute.labels.key |
target.asset.attribute.labels.key |
Hardcoded su "nome_codice" o "nome_os" a seconda del campo mappato. |
timestamp |
metadata.event_timestamp |
Il valore di timestamp dal log non elaborato, analizzato e convertito in un timestamp. |
timestamp |
timestamp |
Il valore di timestamp dal log non elaborato, analizzato e convertito in un timestamp. |
Modifiche
2022-11-09
- Parser appena creato.
Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.