Raccogliere i log del WAF di Cloudflare
Questo documento descrive come raccogliere i log WAF di Cloudflare impostando un feed di Google Security Operations.
Per ulteriori informazioni, consulta Importazione dei dati in Google Security Operations.
Un'etichetta di importazione identifica l'analizzatore sintattico che normalizza i dati dei log non elaborati
in formato UDM strutturato. Le informazioni contenute in questo documento si applicano al parser con l'etichetta di importazione CLOUDFLARE_WAF
.
Configurare Cloudflare WAF utilizzando l'API
Dopo aver attivato il log di Cloudflare, utilizza i seguenti parametri per attivare l'integrazione:
Email di autenticazione: l'indirizzo email dell'account Cloudflare.
Chiave di autenticazione: il token API di Cloudflare.
ID zona: l'ID zona Cloudflare.
Per ottenere l'ID zona e la chiave di autenticazione, svolgi i seguenti passaggi:
- Accedi alla dashboard di Cloudflare.
- Fai clic sul sito web da monitorare.
- Fai clic su Visualizza la chiave API per ottenere la chiave di autenticazione.
- Seleziona Token API.
- Fai clic su Crea token.
- Nella pagina Crea token, fornisci i seguenti valori:
- Nel campo Nome token, fornisci il nome del token.
- Nella sezione Autorizzazioni:
- Seleziona Zona, Log e Lettura rispettivamente nel primo, nel secondo e nel terzo elenco.
- Fai clic su Aggiungi altro. Seleziona Zona, Analytics e Lettura rispettivamente nel primo, secondo e terzo elenco.
- Fai clic su Aggiungi altro. Seleziona Zona, Servizi firewall e Lettura rispettivamente nel primo, secondo e terzo elenco.
- Nella sezione Risorse zona, seleziona Includi e Tutte le zone rispettivamente nel primo e nel secondo elenco.
- Fai clic su Vai al riepilogo.
- Fai clic su Crea token.
- Copia il token visualizzato, necessario per configurare il feed di Google Security Operations.
Configurare il WAF di Cloudflare utilizzando la dashboard di Cloudflare
- Accedi alla dashboard di Cloudflare.
- Fai clic sul sito web da monitorare.
- Vai ad Analytics e log > Logpush.
- Seleziona Crea un job Logpush.
- In Seleziona una destinazione, scegli Google Cloud Storage.
- Inserisci o seleziona i seguenti dettagli della destinazione:
- Bucket: il nome del bucket Google Cloud
- Percorso: posizione del bucket all'interno del contenitore di archiviazione
- Organizza i log in sottocartelle giornaliere (opzione consigliata)
- Per Concedi a Cloudflare l'accesso per caricare file nel tuo bucket, assicurati che il bucket abbia aggiunto Cloudflare IAM come utente con un ruolo Amministratore oggetti Storage.
- Dopo aver inserito i dettagli della destinazione, seleziona Continua.
- Per dimostrare la proprietà, Cloudflare invierà un file alla destinazione designata. Per trovare il token, seleziona il pulsante Apri nella scheda Panoramica del file della verifica della proprietà, quindi incollalo nella dashboard di Cloudflare per verificare il tuo accesso al bucket. Inserisci il token di proprietà e seleziona Continua.
- Seleziona il set di dati da inviare al servizio di archiviazione.
- Configura il job Logpush:
- Inserisci il nome del job.
- In Se i log corrispondono, seleziona gli eventi da includere o rimuovere dai log. Questa opzione non è disponibile per tutti i set di dati.
- In Invia i seguenti campi, scegli se inviare tutti i log alla destinazione di archiviazione o seleziona i log che vuoi inviare.
- Seleziona Invia al termine della configurazione del job Logpush.
Configura un feed in Google Security Operations per importare i log WAF di Cloudflare
- Seleziona Impostazioni SIEM > Feed.
- Fai clic su Aggiungi nuovo.
- Inserisci un nome univoco per il nome del feed.
- Seleziona Google Cloud Storage come Tipo di origine.
- Seleziona Cloudflare WAF come Tipo di log.
- Fai clic su Ottieni account di servizio. Google Security Operations fornisce un account di servizio univoco utilizzato da Google Security Operations per importare i dati.
- Configura l'accesso per l'account di servizio in modo che possa accedere agli oggetti Cloud Storage. Per ulteriori informazioni, vedi Concedere l'accesso all'account di servizio Google Security Operations.
- Fai clic su Avanti.
- Configura i seguenti parametri di input:
- URI del bucket di archiviazione
- L'URI è un
- Opzione di eliminazione dell'origine
- Fai clic su Avanti e poi su Invia.
Per saperne di più sui feed di Google Security Operations, consulta la documentazione dei feed di Google Security Operations. Per informazioni sui requisiti per ciascun tipo di feed, consulta Configurazione dei feed per tipo.
Se riscontri problemi durante la creazione dei feed, contatta l'assistenza di Google Security Operations.
Riferimento alla mappatura dei campi
Questo parser estrae i campi dai log JSON del firewall delle applicazioni web (WAF) di Cloudflare, trasformandoli nel modello di dati unificato (UDM). Gestisce vari campi di log, tra cui informazioni di rete, dettagli HTTP, risultati di sicurezza e metadati, mappandoli ai campi UDM corrispondenti per una rappresentazione e un'analisi coerenti all'interno di Google Security Operations.
Tabella di mappatura UDM
Campo log | Mappatura UDM | Logic |
---|---|---|
Azione | security_result.action_details | Il valore del campo "Azione" del log non elaborato è mappato a security_result.action_details . |
Azione | security_result.action | Il campo security_result.action viene dedotto in base al valore del campo "Azione". "allow" mappa a ALLOW. "challengeSolved", "jschallengeSolved", "managedchallengenoninteractivesolved" e "managedchallengeinteractivesolved" corrispondono a ALLOW_WITH_MODIFICATION. "drop", "block" e "connectionclose" mappano a BLOCCO. "challengefailed" e "jschallengefailed" corrispondono a FAIL. Qualsiasi altro valore non vuoto o "sconosciuto" viene mappato a UNKNOWN_ACTION. |
ClientASN | network.asn | Il valore del campo "ClientASN" del log non elaborato viene convertito in una stringa e mappato a network.asn . |
ClientASNDescription | additional.fields.key | Impostato su "ClientASNDescription". |
ClientASNDescription | additional.fields.value.string_value | Il valore del campo del log non elaborato "ClientASNDescription" è mappato a additional.fields.value.string_value . |
ClientCountry | principal.location.country_or_region | Il valore del campo del log non elaborato "ClientCountry" è mappato a principal.location.country_or_region . |
ClientIP | principal.ip | Il valore del campo "ClientIP" del log non elaborato è mappato a principal.ip . |
ClientRefererHost | intermediary.hostname | Il valore del campo del log non elaborato "ClientRefererHost" è mappato a intermediary.hostname . |
ClientRefererPath | network.http.referral_url | Il valore del campo del log non elaborato "ClientRefererPath" è mappato a network.http.referral_url . |
ClientRequestMethod | network.http.method | Il valore del campo del log non elaborato "ClientRequestMethod" è mappato a network.http.method . |
ClientRequestHost | target.hostname | Il valore del campo del log non elaborato "ClientRequestHost" è mappato a target.hostname . |
ClientRequestPath | target.file.full_path | Il valore del campo del log non elaborato "ClientRequestPath" viene mappato a target.file.full_path se non è vuoto o "/". |
ClientRequestProtocol | network.application_protocol | La parte del protocollo del valore del campo "ClientRequestProtocol" (ad es. "HTTP" da "HTTP/1.1") viene estratto, convertito in maiuscolo e mappato a network.application_protocol . |
ClientRequestUserAgent | network.http.user_agent | Il valore del campo del log non elaborato "ClientRequestUserAgent" è mappato a network.http.user_agent . |
Data/ora | metadata.event_timestamp | Il valore del campo "Data e ora" del log non elaborato viene analizzato come timestamp RFC 3339 e mappato a metadata.event_timestamp . |
EdgeColoCode | additional.fields.key | Imposta su "EdgeColoCode". |
EdgeColoCode | additional.fields.value.string_value | Il valore del campo del log non elaborato "EdgeColoCode" è mappato a additional.fields.value.string_value . |
EdgeResponseStatus | network.http.response_code | Il valore del campo del log non elaborato "EdgeResponseStatus" viene convertito in un numero intero e mappato a network.http.response_code . |
Tipo | metadata.product_event_type | Il valore del campo "Tipo" del log non elaborato è mappato a metadata.product_event_type . |
Metadata.filter | target.resource.attribute.labels.key | Imposta su "Filtro metadati". |
Metadata.filter | target.resource.attribute.labels.value | Il valore del campo del log non elaborato "Metadata.filter" è mappato a target.resource.attribute.labels.value . |
Metadata.type | target.resource.attribute.labels.key | Imposta su "Tipo di metadati". |
Metadata.type | target.resource.attribute.labels.value | Il valore del campo del log non elaborato "Metadata.type" è mappato a target.resource.attribute.labels.value . |
RayID | metadata.product_log_id | Il valore del campo "RayID" del log non elaborato è mappato a metadata.product_log_id . |
RuleID | security_result.rule_id | Il valore del campo "RuleID" del log non elaborato è mappato a security_result.rule_id . |
Origine | security_result.rule_name | Il valore del campo "Origine" del log non elaborato è mappato a security_result.rule_name . |
N/D | metadata.vendor_name | Hardcoded su "Cloudflare". |
N/D | metadata.product_name | Hardcoded su "Cloudflare Log Aggregator". |
N/D | metadata.log_type | Hardcoded su "CLOUDFLARE_WAF". |
N/D | metadata.event_type | Determinato dalla logica del parser in base alla presenza di "ClientIP", "ClientRequestHost" e del valore di "app_protocol". I valori possibili sono NETWORK_HTTP, NETWORK_CONNECTION, STATUS_UPDATE e GENERIC_EVENT. |
Modifiche
2023-08-30
- Campo "ClientRequestPath" inizializzato.
2023-02-02
- È stato convalidato il valore "security_result" prima che venga 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
- Descrizione: parser appena creato