ANSIBLE_AWX
Questo documento spiega come importare i log di Ansible AWX in Google Security Operations utilizzando Bindplane. Il parser estrae i campi dai log Ansible AWX in formato JSON. Utilizza l'analisi JSON per estrarre i campi di log e poi mappa questi valori al Unified Data Model (UDM). Imposta anche i valori predefiniti dei metadati per l'origine e il tipo di evento.
Prima di iniziare
Assicurati di soddisfare i seguenti prerequisiti:
- Un'istanza Google SecOps.
- Un host Windows 2016 o versioni successive oppure Linux con
systemd
. - Se l'agente viene eseguito tramite un proxy, assicurati che le porte del firewall siano aperte in base ai requisiti dell'agente Bindplane.
- Accesso privilegiato alla console di gestione o all'appliance Ansible AWX con autorizzazioni di amministratore.
Recuperare il file di autenticazione importazione di Google SecOps
- Accedi alla console Google SecOps.
- Vai a Impostazioni SIEM > Agenti di raccolta.
- Scarica il file di autenticazione importazione. Salva il file in modo sicuro sul sistema in cui verrà installato Bindplane.
Recuperare l'ID cliente Google SecOps
- Accedi alla console Google SecOps.
- Vai a Impostazioni SIEM > Profilo.
- Copia e salva l'ID cliente dalla sezione Dettagli dell'organizzazione.
Installa l'agente Bindplane
Installa l'agente Bindplane sul sistema operativo Windows o Linux seguendo le istruzioni riportate di seguito.
Installazione di Windows
- Apri il prompt dei comandi o PowerShell come amministratore.
Esegui questo comando:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
Installazione di Linux
- Apri un terminale con privilegi root o sudo.
Esegui questo comando:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
Risorse aggiuntive per l'installazione
Per ulteriori opzioni di installazione, consulta la guida all'installazione.
Configura l'agente Bindplane per importare Syslog e inviarlo a Google SecOps
- Accedi al file di configurazione:
- Individua il file
config.yaml
. In genere, si trova nella directory/opt/observiq-otel-collector/
su Linux o nella directoryC:Program FilesobservIQ OpenTelemetry Collector
su Windows. - Apri il file utilizzando un editor di testo (ad esempio
nano
,vi
o Blocco note).
- Individua il file
Modifica il file
config.yaml
come segue:receivers: udplog: # Using high port to avoid requiring root privileges listen_address: "0.0.0.0:514" exporters: chronicle/awx: endpoint: malachiteingestion-pa.googleapis.com creds_file_path: '/path/to/ingestion-authentication-file.json' customer_id: YOUR_CUSTOMER_ID log_type: 'ANSIBLE_AWX' raw_log_field: body service: pipelines: logs/awx: receivers: - udplog exporters: - chronicle/awx
- Sostituisci la porta e l'indirizzo IP in base alle esigenze della tua infrastruttura.
- Sostituisci
YOUR_CUSTOMER_ID
con l'ID cliente effettivo. - Aggiorna
/path/to/ingestion-authentication-file.json
al percorso in cui è stato salvato il file di autenticazione nel passaggio 1.
Riavvia l'agente Bindplane per applicare le modifiche
Per riavviare l'agente BindPlane in Linux, esegui questo comando:
sudo systemctl restart observiq-otel-collector
Per riavviare l'agente Bindplane in Windows, puoi utilizzare la console Servizi o inserire il seguente comando:
sc stop observiq-otel-collector && sc start observiq-otel-collector
Configura la registrazione esterna su Ansible AWX
- Accedi alla console di gestione Ansible AWX.
- Vai a Impostazioni dalla barra di navigazione.
- Seleziona Impostazioni di registrazione dalle opzioni Sistema.
- Fornisci i seguenti dettagli di configurazione:
- Aggregatore di logging: inserisci l'indirizzo IP dell'agente Bindplane.
- Logging Aggregator Port (Porta dell'aggregatore di logging): inserisci il numero di porta dell'agente Bindplane (ad esempio,
514
). - Tipo di aggregatore di log: seleziona Altro dall'elenco.
- Logging Aggregator Username (Nome utente dell'aggregatore di logging): lascia vuoto (non necessario per syslog).
- Logging Aggregator Password/Token (Password/token dell'aggregatore di log): lascia vuoto (non necessario per syslog).
- Protocollo di aggregazione dei log: seleziona UDP (opzione consigliata per syslog).
- Soglia del livello di aggregatore di logging: seleziona Info o il livello di log che preferisci.
- Attiva logging esterno: fai clic sul pulsante di attivazione/disattivazione ON.
- Registratori da cui inviare i dati all'aggregatore di log: seleziona i tipi di log pertinenti:
awx
: Log del server genericiactivity_stream
: Record delle modifiche agli oggetti AWXjob_events
: dati del modulo di callback Ansiblesystem_tracking
: Dati di configurazione e fatti del sistema
- Registra singolarmente i dati di monitoraggio del sistema: disattiva l'opzione (impostazione predefinita).
- Fai clic su Salva per applicare le impostazioni.
- (Facoltativo) Fai clic su Test per verificare la connessione all'agente Bindplane.
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. |
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 del log non elaborato, utilizzato se event1_data.host e host_name non sono presenti. |
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 |
Concatenazione di "Host Id: " e del valore di host.id dal log non elaborato. |
host.ip |
target.asset.ip |
I valori di host.ip dal log non elaborato. |
host.mac |
target.mac |
I valori di 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 |
Imposta su "LINUX" se host.os.platform è "debian". |
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 del log non elaborato, utilizzato se event1_data.host non è presente. |
input.type |
network.ip_protocol |
Imposta su "TCP" se input.type è "tcp". |
level |
security_result.severity |
Mappato in base al valore di level : "DEBUG", "INFO", "AUDIT" mappano su "INFORMATIONAL"; "ERROR" mappa su "ERROR"; "WARNING" mappa 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 del log non elaborato, utilizzato come riserva se event1 non è presente. |
parent_uuid |
security_result.detection_fields.value |
Il valore di parent_uuid dal log non elaborato. |
timestamp |
metadata.event_timestamp |
Il valore di timestamp dal log non elaborato, analizzato utilizzando il filtro per data. Determinato dalla logica: "NETWORK_CONNECTION" se log.source.address esiste e host.ip esiste nel JSON; "STATUS_UPDATE" se esiste principal_hostname o event1_data.remote_addr ; "GENERIC_EVENT" altrimenti. Codificato in modo permanente su "ANSIBLE_AWX". Codificato in modo permanente su "ANSIBLE_AWX". Codificato in modo permanente su "ANSIBLE_AWX". Codificato come "ephemeral_id". Codificato come "machine_type", "provider" o "availability_zone" a seconda del campo mappato. Codificato in modo permanente su "VIRTUAL_MACHINE". Codificato in modo permanente su "parent_uuid", "task" o "task_uuid" a seconda del campo mappato. Codificato in modo permanente su "codename" o "os_name" a seconda del campo mappato. |
Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.