Raccogliere i log di Cloudflare

Supportato in:

Questo documento spiega come importare i log di Cloudflare in Google Security Operations utilizzando Webhook (destinazione HTTP) o Google Cloud Storage. Cloudflare produce dati operativi sotto forma di log per DNS, HTTP, audit, Zero Trust e CASB. Questa integrazione ti consente di inviare questi log a Google SecOps per l'analisi e il monitoraggio. Il parser inizializza innanzitutto un insieme di campi vuoti e poi analizza i log Cloudflare in formato JSON, eliminando tutti i messaggi che non sono JSON validi. Il codice utilizza quindi la logica condizionale in base alla presenza e ai valori di campi specifici per determinare il prodotto e il tipo di evento Cloudflare, compilando i campi Unified Data Model (UDM) di conseguenza.

Prima di iniziare

Assicurati di soddisfare i seguenti prerequisiti:

  • Istanza Google SecOps.
  • Account Cloudflare Enterprise con LogPush attivato.
  • Per il metodo Webhook: accesso privilegiato alla console Google Cloud .
  • Per il metodo Google Cloud Storage: accesso con privilegi a Google Cloud Storage.

Metodo 1: configura l'esportazione dei log di Cloudflare utilizzando il webhook (destinazione HTTP)

Questo metodo ti consente di trasmettere i log di Cloudflare direttamente a Google SecOps senza spazio di archiviazione intermedio.

Configurare un feed webhook in Google SecOps

  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, Cloudflare Webhook).
  4. Seleziona Webhook come Tipo di origine.
  5. Seleziona Cloudflare come Tipo di log.
  6. Fai clic su Avanti.
  7. Specifica i valori per i seguenti parametri di input:
    • Delimitatore di divisione: \n.
    • Spazio dei nomi dell'asset: lo spazio dei nomi dell'asset.
    • Etichette di importazione: l'etichetta da applicare agli eventi di questo feed.
  8. Fai clic su Avanti.
  9. Controlla la nuova configurazione del feed nella schermata Finalizza 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 salva la chiave segreta, perché non potrai più visualizzarla.
  12. Vai alla scheda Dettagli.
  13. Copia l'URL dell'endpoint del feed dal campo Endpoint Information (Informazioni sull'endpoint).
  14. Fai clic su Fine.

Crea una chiave API per il feed Webhook

  1. Vai alla consoleGoogle Cloud > API e servizi > Credenziali.
  2. Fai clic su Crea credenziali e poi seleziona Chiave API.
  3. Fai clic su Modifica chiave API.
  4. In Restrizioni delle API, seleziona Limita chiave.
  5. Seleziona API Google SecOps dall'elenco.
  6. Fai clic su Salva.
  7. Copia il valore della chiave API.

Configura la destinazione HTTP Cloudflare LogPush

  1. Accedi alla dashboard di Cloudflare.
  2. Seleziona l'account aziendale o il dominio che vuoi utilizzare con LogPush.
  3. Vai ad Analytics e log > Logpush.
  4. Fai clic su Crea un job Logpush.
  5. In Seleziona una destinazione, scegli Destinazione HTTP.
  6. Inserisci l'URL dell'endpoint HTTP con i parametri di autenticazione:

    <ENDPOINT_URL>?header_X-goog-api-key=<API_KEY>&header_X-Webhook-Access-Key=<SECRET_KEY>
    

    Sostituisci quanto segue:

    • <ENDPOINT_URL>: l'URL dell'endpoint del feed di Google SecOps.
    • <API_KEY>: la chiave API della console Google Cloud (con codifica URL se contiene caratteri speciali).
    • <SECRET_KEY>: la chiave segreta del feed webhook (con codifica URL se contiene caratteri speciali).
  7. Fai clic su Continua.

  8. Seleziona il set di dati da inviare (ad esempio Richieste HTTP, DNS, Audit, Zero Trust, CASB).

  9. Configura il job di logpush:

    • Inserisci il Nome del job.
    • (Facoltativo) In Se i log corrispondono, configura i filtri.
    • In Invia i seguenti campi, seleziona i campi da includere.
    • Scegli il formato del timestamp (consigliato RFC3 339).
    • Configura la frequenza di campionamento, se necessario.
  10. Fai clic su Invia per creare il job di push dei log.

Verificare l'integrazione webhook

Dopo la configurazione, i log dovrebbero essere visualizzati in Google SecOps entro pochi minuti. Per verificare:

  1. Vai a Indagine > Ricerca SIEM.
  2. Cerca i log con l'etichetta di importazione configurata.
  3. Verifica che i log di Cloudflare vengano analizzati correttamente.

Metodo 2: configura l'esportazione dei log di Cloudflare utilizzando Google Cloud Storage

Configura Cloudflare per il push dei log, il che comporta la concessione delle autorizzazioni necessarie.

Crea un bucket Google Cloud

  1. Accedi alla consoleGoogle Cloud .
  2. Vai alla pagina Bucket Cloud Storage.
  3. Fai clic su Crea.
  4. Nella pagina Crea un bucket, inserisci le informazioni del bucket:
    • Nome: inserisci un nome univoco che soddisfi i requisiti del nome del bucket (ad esempio cloudflare-data).
    • Tipo di località: seleziona un tipo di località e una regione.
    • Per attivare lo spazio dei nomi gerarchico, fai clic sulla freccia di espansione per espandere Ottimizza per workload orientati ai file e con uso intensivo dei dati, poi seleziona Abilita uno spazio dei nomi gerarchico in questo bucket.
  5. Fai clic su Crea.

Concedi le autorizzazioni al bucket

  1. Nella console Cloud Storage, seleziona il bucket creato in precedenza.
  2. Fai clic sulla scheda Autorizzazioni.
  3. Fai clic su Concedi accesso.
  4. Aggiungi l'account logpush@cloudflare-data.iam.gserviceaccount.com con l'autorizzazione Amministratore oggetti Storage.
  5. Fai clic su Salva.

Configurare Cloudflare LogPush in Google Cloud Storage

  1. Accedi alla dashboard di Cloudflare.
  2. Seleziona l'account aziendale o il dominio che vuoi utilizzare con LogPush.
  3. Vai ad Analytics e log > Logpush.
  4. Fai clic su Crea un job Logpush.
  5. In Seleziona una destinazione, scegli Google Cloud Storage.
  6. Inserisci il percorso del bucket Google Cloud Storage (ad esempio, gs://cloudflare-data/logs/).
  7. Fai clic su Continua.

  8. Inserisci il token di proprietà e fai clic su Continua.

  9. Seleziona il set di dati da inviare allo spazio di archiviazione.

  10. Configura il job di logpush:

    • Inserisci il Nome del job.
    • In Se i log corrispondono, puoi selezionare gli eventi da includere o rimuovere dai log.
    • In Invia i seguenti campi, scegli i log da inviare.
    • Scegli il formato del timestamp (consigliato RFC 339).
    • Configura la frequenza di campionamento, se necessario.
  11. Fai clic su Invia.

Configura un feed in Google SecOps per importare i log Cloudflare da Google Cloud Storage

  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, Cloudflare GCS Logs).
  4. Seleziona Google Cloud Storage V2 come Tipo di origine.
  5. Seleziona Cloudflare come Tipo di log.
  6. Fai clic su Ottieni account di servizio.
  7. Fai clic su Avanti.
  8. Specifica i valori per i seguenti parametri di input:

    • URI bucket di archiviazione:URL del bucket in formato gs://my-bucket/<value>/. Google Cloud Questo URL deve terminare con una barra (/).
    • Opzioni di eliminazione dell'origine: seleziona l'opzione di eliminazione in base alle tue preferenze.
    • Età massima dei file: include i file modificati nell'ultimo numero di giorni. Il valore predefinito è 180 giorni.
    • Spazio dei nomi dell'asset: lo spazio dei nomi dell'asset.
    • Etichette di importazione: l'etichetta da applicare agli eventi di questo feed.
  9. Fai clic su Avanti.

  10. Controlla la nuova configurazione del feed nella schermata Finalizza e poi fai clic su Invia.

Tabella di mappatura UDM

Campo log Mappatura UDM Logic
ClientIP read_only_udm.principal.asset.ip
read_only_udm.principal.ip
Il valore viene estratto dal campo ClientIP.
ClientRequestHost read_only_udm.target.asset.hostname
read_only_udm.target.hostname
Il valore viene estratto dal campo ClientRequestHost.
ClientRequestMethod read_only_udm.network.http.method Il valore viene estratto dal campo ClientRequestMethod.
ClientRequestURI read_only_udm.target.url Il valore viene estratto dal campo ClientRequestURI. Se il campo ClientRequestHost non è vuoto, il valore viene concatenato al campo ClientRequestHost.
ClientSrcPort read_only_udm.principal.port Il valore viene estratto dal campo ClientSrcPort.
ClientRequestUserAgent read_only_udm.network.http.user_agent Il valore viene estratto dal campo ClientRequestUserAgent.
ClientSSLCipher read_only_udm.network.tls.cipher Il valore viene estratto dal campo ClientSSLCipher.
ClientSSLProtocol read_only_udm.network.tls.version Il valore viene estratto dal campo ClientSSLProtocol.
Paese read_only_udm.target.location.country_or_region Il valore viene estratto dal campo Paese.
CreatedAt read_only_udm.metadata.event_timestamp Il valore viene estratto dal campo CreatedAt.
Data/ora read_only_udm.metadata.event_timestamp Il valore viene estratto dal campo Data/ora.
DestinationIP read_only_udm.target.asset.ip
read_only_udm.target.ip
Il valore viene estratto dal campo DestinationIP.
DestinationPort read_only_udm.target.port Il valore viene estratto dal campo DestinationPort.
DeviceID read_only_udm.principal.asset_id Il valore viene estratto dal campo DeviceID e ha il prefisso "Cloudflare:".
DeviceName read_only_udm.principal.asset.hostname
read_only_udm.principal.hostname
Il valore viene estratto dal campo DeviceName.
DstIP read_only_udm.target.asset.ip
read_only_udm.target.ip
Il valore viene tratto dal campo DstIP.
DstPort read_only_udm.target.port Il valore viene estratto dal campo DstPort.
EdgeResponseBytes read_only_udm.network.received_bytes Il valore viene estratto dal campo EdgeResponseBytes.
EdgeResponseStatus read_only_udm.network.http.response_code Il valore viene tratto dal campo EdgeResponseStatus.
EdgeServerIP read_only_udm.target.asset.ip
read_only_udm.target.ip
Il valore viene estratto dal campo EdgeServerIP.
Email read_only_udm.principal.user.email_addresses
read_only_udm.target.user.email_addresses
Il valore viene estratto dal campo Email.
FirewallMatchesActions read_only_udm.security_result.action Il valore è impostato su "ALLOW" se il campo FirewallMatchesAction è "allow", "Allow", "ALLOW", "skip", "SKIP" o "Skip", "ALLOW_WITH_MODIFICATION" se il campo FirewallMatchesAction è "challengeSolved" o "jschallengeSolved", "BLOCK" se il campo FirewallMatchesAction è "drop" o "block", "UNKNOWN_ACTION" se il campo FirewallMatchesAction non è vuoto.
FirewallMatchesRuleIDs read_only_udm.security_result.rule_id Il valore viene estratto dal campo FirewallMatchesRuleIDs.
FirewallMatchesSources read_only_udm.security_result.rule_name Il valore viene estratto dal campo FirewallMatchesSources.
HTTPMethod read_only_udm.network.http.method Il valore viene preso dal campo HTTPMethod.
HTTPHost read_only_udm.target.hostname Il valore viene preso dal campo HTTPHost.
HTTPVersion read_only_udm.network.application_protocol Il valore viene estratto dal campo HTTPVersion. Se il valore contiene "HTTP", viene sostituito con "HTTP".
IPAddress read_only_udm.target.asset.ip
read_only_udm.target.ip
Il valore viene estratto dal campo IPAddress.
IsIsolated read_only_udm.about.labels
read_only_udm.security_result.about.resource.attribute.labels
Il valore viene estratto dal campo IsIsolated e convertito in una stringa.
Località read_only_udm.principal.location.name Il valore viene preso dal campo Località.
OriginIP read_only_udm.intermediary.ip
read_only_udm.target.asset.ip
read_only_udm.target.ip
Il valore viene estratto dal campo OriginIP.
OriginPort read_only_udm.target.port Il valore viene estratto dal campo OriginPort.
OwnerID read_only_udm.target.user.product_object_id Il valore viene estratto dal campo OwnerID.
Norme read_only_udm.security_result.rule_name Il valore viene estratto dal campo Policy.
PolicyID read_only_udm.security_result.rule_id Il valore viene estratto dal campo PolicyID.
PolicyName read_only_udm.security_result.rule_name Il valore viene estratto dal campo PolicyName.
Protocollo read_only_udm.network.ip_protocol Il valore viene estratto dal campo Protocollo e convertito in maiuscolo.
QueryCategoryIDs read_only_udm.security_result.about.labels
read_only_udm.security_result.about.resource.attribute.labels
Il valore viene estratto dal campo QueryCategoryIDs.
QueryName read_only_udm.network.dns.questions.name Il valore viene estratto dal campo QueryName.
QueryNameReversed read_only_udm.network.dns.questions.name Il valore viene estratto dal campo QueryNameReversed.
QuerySize read_only_udm.network.sent_bytes Il valore viene estratto dal campo QuerySize.
QueryType read_only_udm.network.dns.questions.type Il valore viene estratto dal campo QueryType. Se il valore è uno dei tipi di record DNS noti, viene mappato al valore numerico corrispondente. In caso contrario, il valore viene convertito in una stringa.
RData read_only_udm.network.dns.answers Il valore viene estratto dal campo RData. Il campo del tipo viene convertito in un numero intero senza segno.
RayID read_only_udm.metadata.product_log_id Il valore viene estratto dal campo RayID.
Referer read_only_udm.network.http.referral_url Il valore viene estratto dal campo Referer.
RequestID read_only_udm.metadata.product_log_id Il valore viene estratto dal campo RequestID.
ResolverDecision read_only_udm.security_result.summary Il valore viene estratto dal campo ResolverDecision.
ResourceID read_only_udm.target.resource.id
read_only_udm.target.resource.product_object_id
Il valore viene estratto dal campo ResourceID.
ResourceType read_only_udm.target.resource.resource_subtype Il valore viene estratto dal campo ResourceType.
SNI read_only_udm.network.tls.client.server_name Il valore viene estratto dal campo SNI.
SecurityAction read_only_udm.security_result.action Il valore è impostato su "ALLOW" se il campo SecurityAction è vuoto o se il campo sec_action è vuoto, su "ALLOW_WITH_MODIFICATION" se il campo SecurityAction è "challengeSolved" o "jschallengeSolved", su "BLOCK" se il campo SecurityAction è "drop" o "block".
SecurityLevel read_only_udm.security_result.severity Il valore viene estratto dal campo SecurityLevel e mappato al valore di gravità UDM corrispondente.
SessionID read_only_udm.network.session_id Il valore viene estratto dal campo SessionID.
SessionStartTime read_only_udm.metadata.event_timestamp Il valore viene estratto dal campo SessionStartTime.
SourceIP read_only_udm.principal.asset.ip
read_only_udm.principal.ip
read_only_udm.src.asset.ip
read_only_udm.src.ip
Il valore viene estratto dal campo SourceIP.
SourcePort read_only_udm.principal.port
read_only_udm.src.port
Il valore viene estratto dal campo SourcePort.
SrcIP read_only_udm.principal.asset.ip
read_only_udm.principal.ip
Il valore viene estratto dal campo SrcIP.
SrcPort read_only_udm.principal.port Il valore viene preso dal campo SrcPort.
TemporaryAccessDuration read_only_udm.network.session_duration.seconds Il valore viene estratto dal campo TemporaryAccessDuration.
Timestamp read_only_udm.metadata.event_timestamp Il valore viene estratto dal campo Timestamp.
Trasporto read_only_udm.network.ip_protocol Il valore viene estratto dal campo Trasporto e convertito in maiuscolo.
URL read_only_udm.target.url Il valore viene estratto dal campo URL.
UserAgent read_only_udm.network.http.user_agent Il valore viene estratto dal campo UserAgent.
UserID read_only_udm.principal.user.product_object_id Il valore viene estratto dal campo UserID.
UserUID read_only_udm.target.user.product_object_id Il valore viene estratto dal campo UserUID.
VirtualNetworkID read_only_udm.principal.resource.product_object_id Il valore viene estratto dal campo VirtualNetworkID.
WAFAction read_only_udm.security_result.about.labels
read_only_udm.security_result.about.resource.attribute.labels
Il valore viene estratto dal campo WAFAction.
WAFAttackScore read_only_udm.security_result.about.resource.attribute.labels Il valore viene estratto dal campo WAFAttackScore.
WAFFlags read_only_udm.security_result.about.resource.attribute.labels Il valore viene preso dal campo WAFFlags.
WAFProfile read_only_udm.security_result.about.labels
read_only_udm.security_result.about.resource.attribute.labels
Il valore viene preso dal campo WAFProfile.
WAFRCEAttackScore read_only_udm.security_result.about.resource.attribute.labels Il valore viene estratto dal campo WAFRCEAttackScore.
WAFRuleID read_only_udm.security_result.about.labels
read_only_udm.security_result.about.resource.attribute.labels
read_only_udm.security_result.threat_id
Il valore viene estratto dal campo WAFRuleID.
WAFRuleMessage read_only_udm.security_result.rule_name
read_only_udm.security_result.threat_name
Il valore viene estratto dal campo WAFRuleMessage.
WAFSQLiAttackScore read_only_udm.security_result.about.resource.attribute.labels Il valore viene estratto dal campo WAFSQLiAttackScore.
WAFXSSAttackScore read_only_udm.security_result.about.resource.attribute.labels Il valore viene estratto dal campo WAFXSSAttackScore.
ZoneID read_only_udm.additional.fields Il valore viene estratto dal campo ZoneID.
read_only_udm.metadata.log_type Il valore è impostato su "CLOUDFLARE".
read_only_udm.metadata.product_name Il valore è impostato su "Cloudflare Gateway DNS" se il log è un log DNS, "Cloudflare Gateway HTTP" se il log è un log HTTP di Gateway, "Cloudflare Audit" se il log è un log di controllo o "Web Application Firewall" in caso contrario.
read_only_udm.metadata.vendor_name Il valore è impostato su "Cloudflare".
read_only_udm.network.application_protocol Il valore è impostato su "DNS" se il log è un log DNS, su "HTTP" se il campo HTTPVersion contiene "HTTP" o sul valore del campo Protocollo convertito in maiuscolo se il campo Protocollo non è vuoto e non è "tls" o "TLS".
read_only_udm.network.direction Il valore è impostato su "OUTBOUND" se il campo EgressIP non è vuoto.
read_only_udm.network.http.parsed_user_agent Il valore viene estratto dal campo UserAgent o ClientRequestUserAgent e analizzato utilizzando il filtro parseduseragent.
read_only_udm.extensions.auth.type Il valore è impostato su "MACHINE" se il campo Azione è "login" o "logout".
read_only_udm.metadata.event_type Il valore è impostato su "NETWORK_DNS" se il log è un log DNS, "NETWORK_CONNECTION" se il log è un log HTTP del gateway, "USER_RESOURCE_ACCESS" se il log è un audit log e i campi ActorIP e ActorEmail sono vuoti, "USER_RESOURCE_UPDATE_CONTENT" se il log è un audit log e i campi ResourceType e newvalue non sono vuoti, "USER_LOGIN" se il campo Action è "login", "USER_LOGOUT" se il campo Action è "logout", "USER_RESOURCE_ACCESS" se il campo Email non è vuoto e corrisponde al formato dell'indirizzo email o "NETWORK_CONNECTION" se i campi EgressIP e SourceIP non sono vuoti o se i campi OriginIP e SourceIP non sono vuoti.
read_only_udm.target.file.mime_type Il valore viene preso dal campo EdgeResponseContentType.
read_only_udm.target.location.country_or_region Il valore viene estratto dal campo Paese.
read_only_udm.target.resource.id Il valore viene estratto dal campo AccountID o dal campo ResourceID.
read_only_udm.target.resource.product_object_id Il valore viene estratto dal campo AccountID, AppUUID o ResourceID.
read_only_udm.target.user.product_object_id Il valore viene estratto dal campo OwnerID o UserUID.

Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.