Raccogli i log di Ansible AWX

Supportato in:

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

  1. Vai a Impostazioni SIEM > Feed.
  2. Fai clic su Aggiungi nuovo.
  3. Nel campo Nome feed, inserisci un nome per il feed (ad esempio Log Ansible AWX).
  4. Seleziona Webhook come Tipo di origine.
  5. Seleziona Ansible AWX come Tipo di log.
  6. Fai clic su Avanti.
  7. (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.
  8. Fai clic su Avanti.
  9. Controlla la configurazione del feed nella schermata Concludi e poi fai clic su Invia.
  10. Fai clic su Genera chiave segreta per generare una chiave segreta per autenticare questo feed.
  11. 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.
  12. Nella scheda Dettagli, copia l'URL dell'endpoint del feed dal campo Informazioni endpoint. Devi specificare questo URL endpoint nell'applicazione client.
  13. Fai clic su Fine.

Crea una chiave API per il feed webhook

  1. Vai alla console Google Cloud > Credenziali.

    Vai a credenziali

  2. Fai clic su Crea credenziali e poi seleziona Chiave API.

  3. Limita l'accesso alla chiave API all'API Google Security Operations.

Specifica l'URL dell'endpoint

  1. Nell'applicazione client, specifica l'URL dell'endpoint HTTPS fornito nel feed webhook.
  2. 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

  1. Accedi all'istanza AWX.
  2. Vai alla sezione Notifiche, in Amministrazione.
  3. Fai clic su Aggiungi.
  4. 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.

  5. Fai clic su Salva per creare l'webhook.

  6. Vai a Progetti, nella sezione Risorse.

  7. Seleziona i progetti a cui vuoi associare l'webhook.

  8. Nel progetto selezionato, vai alla scheda Notifiche.

  9. 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.