Raccogliere i log di Cloudflare
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, richieste HTTP, eventi firewall, Zero Trust e CASB. Questa integrazione ti consente di inviare questi log a Google SecOps per l'analisi e il monitoraggio.
Prima di iniziare
Assicurati di soddisfare i seguenti prerequisiti:
- Istanza Google SecOps.
- Account Cloudflare Enterprise con Logpush attivato.
- Per il metodo Webhook: accesso con privilegi alla console Google Cloud.
- Per il metodo GCS: accesso con privilegi a Google Cloud Storage.
Metodo 1: configura l'esportazione dei log di Cloudflare utilizzando il webhook (destinazione HTTP)
Questo metodo consente di trasmettere in streaming i log di Cloudflare direttamente a Google Security Operations senza spazio di archiviazione intermedio, riducendo i costi e semplificando la configurazione.
Configurare un feed webhook in Google SecOps
- Vai a Impostazioni SIEM > Feed.
- Fai clic su Aggiungi nuovo feed.
- Fai clic su Configura un singolo feed.
- Nel campo Nome feed, inserisci un nome per il feed (ad esempio,
Cloudflare Webhook). - Seleziona Webhook come Tipo di origine.
- Seleziona Cloudflare come Tipo di log.
- Fai clic su Avanti.
- 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.
- Delimitatore di divisione:
- Fai clic su Avanti.
- Controlla la nuova configurazione del feed nella schermata Finalizza e poi fai clic su Invia.
- Fai clic su Genera chiave segreta per generare una chiave segreta per autenticare questo feed.
- Copia e salva la chiave segreta, perché non potrai più visualizzarla.
- Vai alla scheda Dettagli.
- Copia l'URL dell'endpoint del feed dal campo Endpoint Information (Informazioni sull'endpoint).
- Fai clic su Fine.
Crea una chiave API per il feed Webhook
- Vai alla pagina Credenziali della console Google Cloud.
- Seleziona il tuo progetto (quello associato alla tua istanza di Google SecOps).
- Fai clic su Crea credenziali > Chiave API.
- Fai clic su Modifica chiave API.
- In Restrizioni delle API, seleziona Limita chiave.
- Nel menu a discesa Seleziona API, cerca e seleziona API Chronicle.
- Fai clic su Salva.
- Copia il valore della chiave API.
Configura la destinazione HTTP Cloudflare Logpush
- Accedi alla dashboard di Cloudflare.
- Seleziona l'account aziendale o il dominio che vuoi utilizzare con Logpush.
- Vai ad Analytics e log > Log.
- Fai clic su Crea un job Logpush.
- In Seleziona una destinazione, scegli Destinazione HTTP.
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 (codificata tramite URL se contiene caratteri speciali).<SECRET_KEY>: la chiave segreta del feed webhook (con codifica URL se contiene caratteri speciali).
Fai clic su Continua.
Seleziona il set di dati da inviare (ad esempio Richieste HTTP, Log DNS, Eventi firewall, Log di controllo, Log Zero Trust, Risultati CASB).
Configura il job Logpush:
- Inserisci il Nome del job.
- In Se i log corrispondono, configura facoltativamente i filtri.
- In Invia i seguenti campi, seleziona i campi da includere.
- Scegli il formato del timestamp:
- RFC 3339 (consigliato per Google SecOps)
- Unix (secondi dall'epoca)
- UnixNano (nanosecondi dall'epoca)
- Configura la frequenza di campionamento, se necessario.
Fai clic su Invia per creare il job Logpush.
Verificare l'integrazione webhook
Dopo la configurazione, i log dovrebbero essere visualizzati in Google SecOps entro pochi minuti. Per verificare:
- Vai a Indagine > Ricerca SIEM.
- Cerca i log con l'etichetta di importazione configurata.
- Verifica che i log di Cloudflare vengano analizzati correttamente.
Metodo 2: configura l'esportazione dei log di Cloudflare utilizzando Google Cloud Storage
Crea un bucket Google Cloud Storage
- Accedi alla console Google Cloud.
- Vai alla pagina Cloud Storage > Bucket.
- Fai clic su Crea.
- 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.
- Nome: inserisci un nome univoco che soddisfi i requisiti del nome del bucket (ad esempio
- Fai clic su Crea.
Concedere le autorizzazioni Cloudflare al bucket
- Nella console Cloud Storage, seleziona il bucket GCS (ad esempio
cloudflare-data). - Fai clic sulla scheda Autorizzazioni.
- Fai clic su Concedi l'accesso.
- Nel campo Aggiungi entità, inserisci
logpush@cloudflare-data.iam.gserviceaccount.com. - Nel menu a discesa Assegna i ruoli, seleziona Storage Object Admin.
- Fai clic su Salva.
Configurare Cloudflare Logpush in Cloud Storage
- Accedi alla dashboard di Cloudflare.
- Seleziona l'account aziendale o il dominio che vuoi utilizzare con Logpush.
- Vai ad Analytics e log > Log.
- Fai clic su Crea un job Logpush.
- In Seleziona una destinazione, scegli Google Cloud Storage.
- Inserisci il percorso del bucket GCS (ad esempio,
cloudflare-data/logs/). Fai clic su Continua.
Inserisci il token di proprietà e fai clic su Continua.
Seleziona il set di dati da trasferire allo spazio di archiviazione.
Configura il job Logpush:
- Inserisci il Nome del job.
- Nella sezione Se i log corrispondono, puoi selezionare gli eventi da includere e/o rimuovere dai log.
- In Invia i seguenti campi, scegli i campi da inviare.
- Scegli il formato del timestamp:
- RFC 3339 (consigliato per Google SecOps)
- Unix (secondi dall'epoca)
- UnixNano (nanosecondi dall'epoca)
- Configura la frequenza di campionamento, se necessario.
Fai clic su Invia.
Configura un feed in Google SecOps per importare i log Cloudflare da GCS
- Vai a Impostazioni SIEM > Feed.
- Fai clic su Aggiungi nuovo feed.
- Fai clic su Configura un singolo feed.
- Nel campo Nome feed, inserisci un nome per il feed (ad esempio,
Cloudflare GCS Logs). - Seleziona Google Cloud Storage V2 come Tipo di origine.
- Seleziona Cloudflare come Tipo di log.
- Fai clic su Ottieni service account.
- Fai clic su Avanti.
Specifica i valori per i seguenti parametri di input:
URI bucket Cloud Storage: URL del bucket Google Cloud Storage nel formato
gs://my-bucket/<value>/.Opzione di eliminazione dell'origine: seleziona l'opzione di eliminazione in base alle tue preferenze:
- Mai: non elimina mai i file dopo i trasferimenti (opzione consigliata per i test).
- Elimina file trasferiti: elimina i file dopo il trasferimento riuscito.
- Elimina file trasferiti e directory vuote: elimina i file e le directory vuote dopo il trasferimento riuscito.
Età massima del 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.
Fai clic su Avanti.
Controlla la nuova configurazione del feed nella schermata Finalizza e poi fai clic su Invia.
Concedi le autorizzazioni IAM al account di servizio Google SecOps
- Vai a Cloud Storage > Bucket.
- Fai clic sul nome del bucket (ad esempio,
cloudflare-data). - Vai alla scheda Autorizzazioni.
- Fai clic su Concedi l'accesso.
- Nel campo Aggiungi entità, incolla l'email dell'account di servizio Google SecOps.
- Nel menu a discesa Assegna i ruoli, seleziona Visualizzatore oggetti Storage.
- Fai clic su Salva.
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. |
Country |
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. |
Datetime |
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 preso 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 estratto dal campo HTTPMethod. |
HTTPHost |
read_only_udm.target.hostname |
Il valore viene estratto 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. |
Location |
read_only_udm.principal.location.name |
Il valore viene estratto 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. |
Policy |
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. |
Protocol |
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. |
Transport |
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 estratto 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 audit log 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 estratto 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.