Raccogliere i log di Ansible AWX
Panoramica
Questo parser estrae i dati dei log in formato JSON da Ansible AWX, convertendoli nel modello Unified Data Model (UDM). Gestisce vari formati di log, estrae i campi pertinenti come timestamp, indirizzi IP, informazioni sull'host e dettagli dell'evento 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 soddisfare i seguenti prerequisiti:
- Istanza Google SecOps.
- Accesso privilegiato ad Ansible AWX.
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 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 suddivisione: il delimitatore utilizzato per separare le righe di log, ad esempio
\n
.
- 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.
Configura il webhook in Ansible AWX
- Accedi all'istanza AWX.
- Vai alla sezione Notifiche, che si trova nella sezione Amministrazione.
- Fai clic su Aggiungi.
Configura le impostazioni del 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 API Google SecOps.
- HTTP Method (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 connessione. Per requisiti specifici delle intestazioni, consulta la documentazione di Google SecOps.Fai clic su Salva per creare il webhook.
Vai a Progetti, che si trova nella sezione Risorse.
Seleziona i progetti a cui vuoi associare il webhook.
All'interno del progetto selezionato, vai alla scheda Notifiche.
Seleziona i trigger da attivare per la notifica webhook creata in precedenza Avvio | Operazione riuscita | Operazione non riuscita.
Le notifiche verranno ora applicate a tutti i modelli associati al progetto. Puoi disattivarle manualmente accedendo al campo Notifiche in ogni modello.
Tabella di mappatura UDM
Campo log | Mappatura UDM | Logic |
---|---|---|
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 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 riserva se host_name non è presente. Se è 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 |
"Host Id: " concatenato al valore di host.id dal log non elaborato. |
host.ip |
target.asset.ip |
I valori dell'array host.ip del log non elaborato. |
host.mac |
target.mac |
I valori dell'array host.mac del 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 è impostato su "TCP". |
level |
security_result.severity |
In base al valore di level : "DEBUG", "INFO", "AUDIT" viene mappato su "INFORMATIONAL"; "ERROR" viene mappato su "ERROR"; "WARNING" viene mappato su "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 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" altrimenti. |
metadata.log_type |
metadata.log_type |
Codificato su "ANSIBLE_AWX". |
metadata.product_name |
metadata.product_name |
Codificato su "ANSIBLE_AWX". |
metadata.vendor_name |
metadata.vendor_name |
Codificato 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 |
Codificato in modo permanente su "VIRTUAL_MACHINE" se è presente cloud.instance.name . |
observer.labels.key |
observer.labels.key |
Codificato come "ephemeral_id". |
principal.resource.attribute.labels.key |
principal.resource.attribute.labels.key |
Codificato come "machine_type", "provider" o "availability_zone" a seconda del campo mappato. |
security_result.detection_fields.key |
security_result.detection_fields.key |
Codificato in modo permanente su "parent_uuid", "task" o "task_uuid" a seconda del campo mappato. |
target.asset.attribute.labels.key |
target.asset.attribute.labels.key |
Codificato in modo permanente su "codename" o "os_name" 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. |
Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.