Raccogliere i log del WAF di Cloudflare
Questo parser estrae i campi dai log JSON del firewall delle applicazioni web (WAF) di Cloudflare, li trasforma e li mappa all'Unified Data Model (UDM). Gestisce varie azioni di Cloudflare, arricchendo i dati con metadati e informazioni di rete prima di strutturare l'output nel formato UDM.
Prima di iniziare
- Assicurati di avere un'istanza Google SecOps.
- Assicurati di disporre dell'accesso con privilegi a Google Cloud.
- Assicurati di avere un piano Cloudflare Enterprise.
- Assicurati di disporre dell'accesso con privilegi a Cloudflare.
Crea un Google Cloud bucket di archiviazione
- Accedi alla Google Cloud console
Vai alla pagina Bucket Cloud Storage.
Fai clic su Crea.
Configura il bucket:
- Nome: inserisci un nome univoco che soddisfi i requisiti per i nomi dei bucket (ad esempio cloudflare-waf).
- Scegli dove archiviare i tuoi dati: seleziona una località.
- Scegli una classe di archiviazione per i tuoi dati: seleziona una classe di archiviazione predefinita per il bucket oppure Autoclass per la gestione automatica della classe di archiviazione.
- Scegli come controllare l'accesso agli oggetti: seleziona No per applicare la prevenzione dell'accesso pubblico e seleziona un modello di controllo dell'accesso per gli oggetti del bucket.
- Classe di archiviazione: scegli in base alle tue esigenze (ad esempio Standard).
Fai clic su Crea.
Concedi le autorizzazioni del bucket all'utente IAM di Cloudflare
- In Google Cloud, vai a Spazio di archiviazione > Browser > Bucket > Autorizzazioni.
- Aggiungi l'account logpush@cloudflare-data.iam.gserviceaccount.com con l'autorizzazione Amministratore oggetti Storage.
Creare un job Logpush per i log WAF utilizzando l'interfaccia utente di Cloudflare
- Accedi a Cloudflare.
- Vai ad Analytics e log > Logpush.
- Seleziona Crea un job Logpush.
- In Seleziona una destinazione, scegli Google Cloud Archiviazione.
- Inserisci i seguenti dettagli della destinazione:
- Bucket: Google Cloud nome del bucket di archiviazione
- Percorso: posizione del bucket all'interno del contenitore di archiviazione
- Seleziona Organizza i log in sottocartelle giornaliere.
- Fai clic su Continua.
- Seleziona il set di dati Sicurezza (WAF) da inviare allo spazio di archiviazione.
- Configura il job logpush:
- Inserisci il nome del job.
- In Se i log corrispondono, puoi selezionare gli eventi da includere e/o rimuovere dai log. Per ulteriori informazioni, consulta la sezione Filtri. Questa opzione non è disponibile per tutti i set di dati.
- Nei campi Invia quanto segue, puoi scegliere di inviare tutti i log alla destinazione di archiviazione o scegliere in modo selettivo i log da inviare.
- Fai clic su Invia.
Configura un feed in Google SecOps per importare i log WAF di Cloudflare
- Vai a Impostazioni SIEM > Feed.
- Fai clic su Aggiungi nuovo.
- Nel campo Nome feed, inserisci un nome per il feed (ad esempio Log WAF di Cloudflare).
- Seleziona Google Cloud Storage come Tipo di origine.
- Seleziona Cloudflare WAF come Tipo di log.
- Fai clic su Ottieni account di servizio.
- Fai clic su Avanti.
Specifica i valori per i seguenti parametri di input:
- URI GCS: l'URL Cloud Storage.
- L'URI è una: seleziona Directory che include sottodirectory.
- Opzioni di eliminazione dell'origine: seleziona l'opzione di eliminazione in base alle tue preferenze.
- Spazio dei nomi degli asset: lo spazio dei nomi degli asset.
- Etichette di importazione: l'etichetta da applicare agli eventi di questo feed.
Fai clic su Avanti.
Rivedi la configurazione del nuovo feed nella schermata Concludi e poi fai clic su Invia.
Tabella di mappatura UDM
Campo log | Mappatura UDM | Logica |
---|---|---|
Action |
security_result.action_details |
Il valore di Action dal log non elaborato viene assegnato direttamente a questo campo UDM. |
Action |
security_result.action |
Il valore di questo campo è ricavato dal campo Action nel log non elaborato. Se Action è "allow", il campo UDM è impostato su ALLOW . Se Action è "challengeSolved", "jschallengeSolved", "managedchallengenoninteractivesolved" o "managedchallengeinteractivesolved", il campo UDM è impostato su ALLOW_WITH_MODIFICATION . Se Action è "drop", "block" o "connectionclose", il campo UDM è impostato su BLOCK . Se Action è "challengefailed" o "jschallengefailed", il campo UDM viene impostato su FAIL . In caso contrario, viene impostato su UNKNOWN_ACTION . |
ClientASN |
network.asn |
Il valore di ClientASN dal log non elaborato viene assegnato direttamente a questo campo UDM dopo la conversione in stringa. |
ClientASNDescription |
additional.fields.key |
La chiave è impostata in modo statico su "ClientASNDescription". |
ClientASNDescription |
additional.fields.value.string_value |
Il valore di ClientASNDescription dal log non elaborato viene assegnato direttamente a questo campo UDM. |
ClientCountry |
principal.location.country_or_region |
Il valore di ClientCountry dal log non elaborato viene assegnato direttamente a questo campo UDM. |
ClientIP |
principal.ip |
Il valore di ClientIP dal log non elaborato viene assegnato direttamente a questo campo UDM. |
ClientRefererHost |
intermediary.hostname |
Il valore di ClientRefererHost dal log non elaborato viene assegnato direttamente a questo campo UDM. |
ClientRefererPath |
network.http.referral_url |
Il valore di ClientRefererPath dal log non elaborato viene assegnato direttamente a questo campo UDM. |
ClientRequestHost |
target.hostname |
Il valore di ClientRequestHost dal log non elaborato viene assegnato direttamente a questo campo UDM. |
ClientRequestMethod |
network.http.method |
Il valore di ClientRequestMethod dal log non elaborato viene assegnato direttamente a questo campo UDM. |
ClientRequestPath |
target.file.full_path |
Il valore di ClientRequestPath dal log non elaborato viene assegnato direttamente a questo campo UDM. |
ClientRequestProtocol |
network.application_protocol |
La parte di protocollo di ClientRequestProtocol (ad es. "HTTP" da "HTTP/1.1") viene estratto utilizzando grok, convertito in lettere maiuscole e assegnato a questo campo UDM. |
ClientRequestUserAgent |
network.http.user_agent |
Il valore di ClientRequestUserAgent dal log non elaborato viene assegnato direttamente a questo campo UDM. |
Datetime |
metadata.event_timestamp |
Il valore di Datetime dal log non elaborato viene analizzato come timestamp RFC 3339 e assegnato a questo campo UDM. |
EdgeColoCode |
additional.fields.key |
La chiave è impostata in modo statico su "EdgeColoCode". |
EdgeColoCode |
additional.fields.value.string_value |
Il valore di EdgeColoCode dal log non elaborato viene assegnato direttamente a questo campo UDM. |
EdgeResponseStatus |
network.http.response_code |
Il valore EdgeResponseStatus del log non elaborato viene assegnato direttamente a questo campo UDM e convertito in un numero intero. |
Kind |
metadata.product_event_type |
Il valore di Kind dal log non elaborato viene assegnato direttamente a questo campo UDM. |
Metadata.filter |
target.resource.attribute.labels.value |
Il valore Metadata.filter del log non elaborato viene assegnato al campo value di un'etichetta in target.resource.attribute.labels . Il valore key per questa etichetta è impostato in modo statico su "Filtro metadati". |
Metadata.type |
target.resource.attribute.labels.value |
Il valore Metadata.type del log non elaborato viene assegnato al campo value di un'etichetta in target.resource.attribute.labels . Il valore key per questa etichetta è impostato in modo statico su "Tipo di metadati". Il valore di questo campo viene dedotto in base alla presenza e ai valori di ClientIP , ClientRequestHost e app_protocol . Consulta il codice del parser per la logica specifica. Impostato in modo statico su "Cloudflare". Impostato in modo statico su "Cloudflare Log Aggregator". Impostato in modo statico su "CLOUDFLARE_WAF". |
RayID |
metadata.product_log_id |
Il valore di RayID dal log non elaborato viene assegnato direttamente a questo campo UDM. |
RuleID |
security_result.rule_id |
Il valore di RuleID dal log non elaborato viene assegnato direttamente a questo campo UDM. |
Source |
security_result.rule_name |
Il valore di Source dal log non elaborato viene assegnato direttamente a questo campo UDM. |
timestamp |
metadata.event_timestamp , events.timestamp |
Il valore di timestamp dal log non elaborato viene assegnato direttamente a questi campi UDM. |
Modifiche
2024-08-08
- Ho estratto i dati da "ClientRequestHost" e "ClientRequestURI", li ho uniti e ho mappato il risultato a "target.url".
2023-08-30
- Campo "ClientRequestPath" inizializzato.
2023-02-02
- Il valore "security_result" è stato convalidato prima di essere unito all'evento.
2022-09-16
- È stato mappato il campo "Azione" a "security_result.action_details".
- È stata mappata la colonna "security_result.action" a "ALLOW_WITH_MODIFICATION" quando l'azione contiene "challengeSolved", "jschallengeSolved", "managedchallengenoninteractivesolved", "managedchallengeinteractivesolved".
- "security_result.action" è stato mappato a "BLOCK" quando l'azione contiene "drop", "block", "connectionclose".
- "security_result.action" è stato mappato a "FAIL" quando l'azione contiene "challengefailed", "jschallengefailed".
2022-07-25
- Analizzatore appena creato
Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.