Coletar registros do Cloudflare

Compatível com:

Este documento explica como ingerir registros do Cloudflare no Google Security Operations usando webhook (destino HTTP) ou o Google Cloud Storage. O Cloudflare gera dados operacionais na forma de registros para DNS, HTTP, auditoria, Zero Trust e CASB. Com essa integração, é possível enviar esses registros ao Google SecOps para análise e monitoramento. O analisador primeiro inicializa um conjunto de campos vazios e depois analisa os registros do Cloudflare formatados em JSON, descartando as mensagens que não são JSON válidos. Em seguida, o código usa uma lógica condicional com base na presença e nos valores de campos específicos para determinar o produto e o tipo de evento do Cloudflare, preenchendo os campos do modelo de dados unificado (UDM) de acordo.

Antes de começar

Verifique se você tem os pré-requisitos a seguir:

  • Instância do Google SecOps.
  • Conta do Cloudflare Enterprise com o LogPush ativado.
  • Para o método webhook: acesso privilegiado ao console Google Cloud .
  • Para o método do Google Cloud Storage: acesso privilegiado ao Google Cloud Storage.

Método 1: configurar a exportação de registros do Cloudflare usando webhook (destino HTTP)

Esse método permite transmitir registros do Cloudflare diretamente para o Google SecOps sem armazenamento intermediário.

Configurar um feed de webhook no Google SecOps

  1. Acesse Configurações do SIEM > Feeds.
  2. Clique em Adicionar novo.
  3. No campo Nome do feed, insira um nome para o feed (por exemplo, Cloudflare Webhook).
  4. Selecione Webhook como o Tipo de origem.
  5. Selecione Cloudflare como o Tipo de registro.
  6. Clique em Próxima.
  7. Especifique valores para os seguintes parâmetros de entrada:
    • Delimitador de divisão: \n.
    • Namespace do recurso: o namespace do recurso.
    • Rótulos de ingestão: o rótulo a ser aplicado aos eventos deste feed.
  8. Clique em Próxima.
  9. Revise a nova configuração do feed na tela Finalizar e clique em Enviar.
  10. Clique em Gerar chave secreta para autenticar o feed.
  11. Copie e salve a chave secreta, porque não será possível conferir esse Secret novamente.
  12. Acesse a guia Detalhes.
  13. Copie o URL do endpoint do feed no campo Informações do endpoint.
  14. Clique em Concluído.

Criar uma chave de API para o feed do webhook

  1. Acesse Google Cloud console > APIs e serviços > Credenciais.
  2. Clique em Criar credenciais e, em seguida, selecione Chave de API.
  3. Clique em Editar chave de API.
  4. Em Restrições de API, selecione Restringir chave.
  5. Selecione API Google SecOps na lista.
  6. Clique em Salvar.
  7. Copie o valor da chave de API.

Configurar o destino HTTP do LogPush do Cloudflare

  1. Faça login no painel do Cloudflare.
  2. Selecione a conta empresarial ou o domínio que você quer usar com o LogPush.
  3. Acesse Análise e registros > Logpush.
  4. Clique em Criar um job de Logpush.
  5. Em Selecionar um destino, escolha Destino HTTP.
  6. Insira o URL do endpoint HTTP com parâmetros de autenticação:

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

    Substitua:

    • <ENDPOINT_URL>: o URL do endpoint de feed do Google SecOps.
    • <API_KEY>: a chave de API do console Google Cloud (codificada por URL se contiver caracteres especiais).
    • <SECRET_KEY>: a chave secreta do feed de webhook (codificada por URL se contiver caracteres especiais).
  7. Clique em Continuar.

  8. Selecione o conjunto de dados a ser enviado (por exemplo, Solicitações HTTP, DNS, Auditoria, Confiança zero, CASB).

  9. Configure o job logpush:

    • Digite o Nome do job.
    • Opcional: em Se os registros corresponderem, configure os filtros.
    • Em Enviar os seguintes campos, selecione os campos que você quer incluir.
    • Escolha o formato do carimbo de data/hora (RFC3 339 recomendado).
    • Configure a taxa de amostragem, se necessário.
  10. Clique em Enviar para criar o job logpush.

Verificar a integração do webhook

Após a configuração, os registros vão aparecer no Google SecOps em alguns minutos. Para verificar:

  1. Acesse Investigação > Pesquisa do SIEM.
  2. Pesquise registros com o rótulo de ingestão configurado.
  3. Confirme se os registros do Cloudflare estão sendo analisados corretamente.

Método 2: configurar a exportação de registros do Cloudflare usando o Google Cloud Storage

Configure o Cloudflare para enviar registros a ele, o que envolve conceder ao Cloudflare as permissões necessárias.

Criar um Google Cloud Bucket

  1. Faça login no console doGoogle Cloud .
  2. Acesse a página Buckets do Cloud Storage.
  3. Clique em Criar.
  4. Na página Criar um bucket, insira as informações do bucket:
    • Nome: insira um nome exclusivo que atenda aos requisitos de nomenclatura de bucket (por exemplo, cloudflare-data).
    • Tipo de local: selecione um tipo de local e uma região.
    • Para ativar o namespace hierárquico, clique na seta de expansão para abrir Otimizar para cargas de trabalho orientadas a arquivos e com uso intensivo de dados e selecione Ativar namespace hierárquico neste bucket.
  5. Clique em Criar.

Conceder permissões ao bucket

  1. No console do Cloud Storage, selecione o bucket que você criou anteriormente.
  2. Clique na guia Permissões.
  3. Clique em Conceder acesso.
  4. Adicione a conta logpush@cloudflare-data.iam.gserviceaccount.com com a permissão Administrador de objetos do Storage.
  5. Clique em Salvar.

Configurar o LogPush do Cloudflare para o Google Cloud Storage

  1. Faça login no painel do Cloudflare.
  2. Selecione a conta empresarial ou o domínio que você quer usar com o LogPush.
  3. Acesse Análise e registros > Logpush.
  4. Clique em Criar um job de Logpush.
  5. Em Selecionar um destino, escolha Google Cloud Storage.
  6. Insira o caminho do bucket do Google Cloud Storage (por exemplo, gs://cloudflare-data/logs/).
  7. Clique em Continuar.

  8. Insira o token de propriedade e clique em Continuar.

  9. Selecione o conjunto de dados a ser enviado para o armazenamento.

  10. Configure o job logpush:

    • Digite o Nome do job.
    • Em Se os registros corresponderem, selecione os eventos que você quer incluir ou remover dos registros.
    • Em Enviar os seguintes campos, escolha quais registros enviar.
    • Escolha o formato do carimbo de data/hora (RFC 339 recomendado).
    • Configure a taxa de amostragem, se necessário.
  11. Clique em Enviar.

Configurar um feed no Google SecOps para ingerir registros do Cloudflare do Google Cloud Storage

  1. Acesse Configurações do SIEM > Feeds.
  2. Clique em Adicionar novo.
  3. No campo Nome do feed, insira um nome para o feed (por exemplo, Cloudflare GCS Logs).
  4. Selecione Google Cloud Storage V2 como o Tipo de origem.
  5. Selecione Cloudflare como o Tipo de registro.
  6. Clique em Receber conta de serviço.
  7. Clique em Próxima.
  8. Especifique valores para os seguintes parâmetros de entrada:

    • URI do bucket de armazenamento: Google Cloud URL do bucket no formato gs://my-bucket/<value>/. O URL precisa terminar com uma barra (/).
    • Opções de exclusão de fontes: selecione a opção de exclusão de acordo com sua preferência.
    • Idade máxima do arquivo: inclui arquivos modificados no último número de dias. O padrão é de 180 dias.
    • Namespace do recurso: o namespace do recurso.
    • Rótulos de ingestão: o rótulo a ser aplicado aos eventos deste feed.
  9. Clique em Próxima.

  10. Revise a nova configuração do feed na tela Finalizar e clique em Enviar.

Tabela de mapeamento do UDM

Campo de registro Mapeamento do UDM Lógica
ClientIP read_only_udm.principal.asset.ip
read_only_udm.principal.ip
O valor é extraído do campo "ClientIP".
ClientRequestHost read_only_udm.target.asset.hostname
read_only_udm.target.hostname
O valor é extraído do campo "ClientRequestHost".
ClientRequestMethod read_only_udm.network.http.method O valor é extraído do campo "ClientRequestMethod".
ClientRequestURI read_only_udm.target.url O valor é extraído do campo "ClientRequestURI". Se o campo "ClientRequestHost" não estiver vazio, o valor será concatenado com ele.
ClientSrcPort read_only_udm.principal.port O valor é extraído do campo "ClientSrcPort".
ClientRequestUserAgent read_only_udm.network.http.user_agent O valor é extraído do campo "ClientRequestUserAgent".
ClientSSLCipher read_only_udm.network.tls.cipher O valor é extraído do campo "ClientSSLCipher".
ClientSSLProtocol read_only_udm.network.tls.version O valor é extraído do campo "ClientSSLProtocol".
País read_only_udm.target.location.country_or_region O valor é extraído do campo "País".
CreatedAt read_only_udm.metadata.event_timestamp O valor é extraído do campo "CreatedAt".
Data/hora read_only_udm.metadata.event_timestamp O valor é extraído do campo "Data e hora".
DestinationIP read_only_udm.target.asset.ip
read_only_udm.target.ip
O valor é extraído do campo "DestinationIP".
DestinationPort read_only_udm.target.port O valor é extraído do campo "DestinationPort".
DeviceID read_only_udm.principal.asset_id O valor é extraído do campo "DeviceID" e tem o prefixo "Cloudflare:".
DeviceName read_only_udm.principal.asset.hostname
read_only_udm.principal.hostname
O valor é retirado do campo "DeviceName".
DstIP read_only_udm.target.asset.ip
read_only_udm.target.ip
O valor é extraído do campo "DstIP".
DstPort read_only_udm.target.port O valor é extraído do campo "DstPort".
EdgeResponseBytes read_only_udm.network.received_bytes O valor é extraído do campo "EdgeResponseBytes".
EdgeResponseStatus read_only_udm.network.http.response_code O valor é extraído do campo "EdgeResponseStatus".
EdgeServerIP read_only_udm.target.asset.ip
read_only_udm.target.ip
O valor é extraído do campo "EdgeServerIP".
E-mail read_only_udm.principal.user.email_addresses
read_only_udm.target.user.email_addresses
O valor é extraído do campo "E-mail".
FirewallMatchesActions read_only_udm.security_result.action O valor é definido como "ALLOW" se o campo "FirewallMatchesAction" for "allow", "Allow", "ALLOW", "skip", "SKIP" ou "Skip"; "ALLOW_WITH_MODIFICATION" se o campo "FirewallMatchesAction" for "challengeSolved" ou "jschallengeSolved"; "BLOCK" se o campo "FirewallMatchesAction" for "drop" ou "block"; "UNKNOWN_ACTION" se o campo "FirewallMatchesAction" não estiver vazio.
FirewallMatchesRuleIDs read_only_udm.security_result.rule_id O valor é extraído do campo "FirewallMatchesRuleIDs".
FirewallMatchesSources read_only_udm.security_result.rule_name O valor é extraído do campo "FirewallMatchesSources".
HTTPMethod read_only_udm.network.http.method O valor é extraído do campo "HTTPMethod".
HTTPHost read_only_udm.target.hostname O valor é extraído do campo HTTPHost.
HTTPVersion read_only_udm.network.application_protocol O valor é extraído do campo "HTTPVersion". Se o valor contiver "HTTP", ele será substituído por "HTTP".
IPAddress read_only_udm.target.asset.ip
read_only_udm.target.ip
O valor é extraído do campo "IPAddress".
IsIsolated read_only_udm.about.labels
read_only_udm.security_result.about.resource.attribute.labels
O valor é extraído do campo "IsIsolated" e convertido em uma string.
Local read_only_udm.principal.location.name O valor é extraído do campo "Local".
OriginIP read_only_udm.intermediary.ip
read_only_udm.target.asset.ip
read_only_udm.target.ip
O valor é extraído do campo "OriginIP".
OriginPort read_only_udm.target.port O valor é extraído do campo "OriginPort".
OwnerID read_only_udm.target.user.product_object_id O valor é extraído do campo "OwnerID".
Política read_only_udm.security_result.rule_name O valor é extraído do campo "Política".
PolicyID read_only_udm.security_result.rule_id O valor é extraído do campo "PolicyID".
PolicyName read_only_udm.security_result.rule_name O valor é extraído do campo "PolicyName".
Protocolo read_only_udm.network.ip_protocol O valor é extraído do campo "Protocolo" e convertido para maiúsculas.
QueryCategoryIDs read_only_udm.security_result.about.labels
read_only_udm.security_result.about.resource.attribute.labels
O valor é extraído do campo "QueryCategoryIDs".
QueryName read_only_udm.network.dns.questions.name O valor é extraído do campo "QueryName".
QueryNameReversed read_only_udm.network.dns.questions.name O valor é extraído do campo "QueryNameReversed".
QuerySize read_only_udm.network.sent_bytes O valor é extraído do campo "QuerySize".
QueryType read_only_udm.network.dns.questions.type O valor é extraído do campo "QueryType". Se o valor for um dos tipos de registro DNS conhecidos, ele será mapeado para o valor numérico correspondente. Caso contrário, o valor é convertido em uma string.
RData read_only_udm.network.dns.answers O valor é extraído do campo RData. O campo "type" é convertido em um número inteiro sem sinal.
RayID read_only_udm.metadata.product_log_id O valor é extraído do campo "RayID".
Referenciador read_only_udm.network.http.referral_url O valor é extraído do campo "Referer".
RequestID read_only_udm.metadata.product_log_id O valor é extraído do campo RequestID.
ResolverDecision read_only_udm.security_result.summary O valor é extraído do campo "ResolverDecision".
ResourceID read_only_udm.target.resource.id
read_only_udm.target.resource.product_object_id
O valor é extraído do campo "ResourceID".
ResourceType read_only_udm.target.resource.resource_subtype O valor é extraído do campo "ResourceType".
SNI read_only_udm.network.tls.client.server_name O valor é extraído do campo SNI.
SecurityAction read_only_udm.security_result.action O valor é definido como "ALLOW" se o campo "SecurityAction" ou "sec_action" estiver vazio, "ALLOW_WITH_MODIFICATION" se o campo "SecurityAction" for "challengeSolved" ou "jschallengeSolved", e "BLOCK" se o campo "SecurityAction" for "drop" ou "block".
SecurityLevel read_only_udm.security_result.severity O valor é extraído do campo "SecurityLevel" e mapeado para o valor de gravidade correspondente do UDM.
SessionID read_only_udm.network.session_id O valor é extraído do campo "SessionID".
SessionStartTime read_only_udm.metadata.event_timestamp O valor é extraído do 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
O valor é extraído do campo "SourceIP".
SourcePort read_only_udm.principal.port
read_only_udm.src.port
O valor é extraído do campo "SourcePort".
SrcIP read_only_udm.principal.asset.ip
read_only_udm.principal.ip
O valor é extraído do campo "SrcIP".
SrcPort read_only_udm.principal.port O valor é extraído do campo "SrcPort".
TemporaryAccessDuration read_only_udm.network.session_duration.seconds O valor é extraído do campo "TemporaryAccessDuration".
Carimbo de data/hora read_only_udm.metadata.event_timestamp O valor é extraído do campo "Timestamp".
Transporte read_only_udm.network.ip_protocol O valor é extraído do campo "Transporte" e convertido para maiúsculas.
URL read_only_udm.target.url O valor é extraído do campo "URL".
UserAgent read_only_udm.network.http.user_agent O valor é extraído do campo UserAgent.
UserID read_only_udm.principal.user.product_object_id O valor é extraído do campo "UserID".
UserUID read_only_udm.target.user.product_object_id O valor é extraído do campo UserUID.
VirtualNetworkID read_only_udm.principal.resource.product_object_id O valor é extraído do campo "VirtualNetworkID".
WAFAction read_only_udm.security_result.about.labels
read_only_udm.security_result.about.resource.attribute.labels
O valor é extraído do campo "WAFAction".
WAFAttackScore read_only_udm.security_result.about.resource.attribute.labels O valor é extraído do campo "WAFAttackScore".
WAFFlags read_only_udm.security_result.about.resource.attribute.labels O valor é extraído do campo WAFFlags.
WAFProfile read_only_udm.security_result.about.labels
read_only_udm.security_result.about.resource.attribute.labels
O valor é extraído do campo "WAFProfile".
WAFRCEAttackScore read_only_udm.security_result.about.resource.attribute.labels O valor é extraído do 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
O valor é extraído do campo "WAFRuleID".
WAFRuleMessage read_only_udm.security_result.rule_name
read_only_udm.security_result.threat_name
O valor é extraído do campo WAFRuleMessage.
WAFSQLiAttackScore read_only_udm.security_result.about.resource.attribute.labels O valor é extraído do campo "WAFSQLiAttackScore".
WAFXSSAttackScore read_only_udm.security_result.about.resource.attribute.labels O valor é extraído do campo WAFXSSAttackScore.
ZoneID read_only_udm.additional.fields O valor é extraído do campo "ZoneID".
read_only_udm.metadata.log_type O valor é definido como "CLOUDFLARE".
read_only_udm.metadata.product_name O valor é definido como "DNS do Cloudflare Gateway" se o registro for de DNS, "HTTP do Cloudflare Gateway" se for de HTTP do Gateway, "Auditoria do Cloudflare" se for de auditoria ou "Firewall de aplicativos da Web" caso contrário.
read_only_udm.metadata.vendor_name O valor é definido como "Cloudflare".
read_only_udm.network.application_protocol O valor é definido como "DNS" se o registro for de DNS, "HTTP" se o campo "HTTPVersion" contiver "HTTP" ou o valor do campo "Protocol" convertido para maiúsculas se o campo "Protocol" não estiver vazio e não for "tls" ou "TLS".
read_only_udm.network.direction O valor é definido como "OUTBOUND" se o campo "EgressIP" não estiver vazio.
read_only_udm.network.http.parsed_user_agent O valor é extraído do campo UserAgent ou ClientRequestUserAgent e analisado usando o filtro parseduseragent.
read_only_udm.extensions.auth.type O valor é definido como "MACHINE" se o campo "Action" for "login" ou "logout".
read_only_udm.metadata.event_type O valor é definido como "NETWORK_DNS" se o registro for de DNS, "NETWORK_CONNECTION" se for um registro HTTP do gateway, "USER_RESOURCE_ACCESS" se for um registro de auditoria e os campos "ActorIP" e "ActorEmail" estiverem vazios, "USER_RESOURCE_UPDATE_CONTENT" se for um registro de auditoria e os campos "ResourceType" e "newvalue" não estiverem vazios, "USER_LOGIN" se o campo "Action" for "login", "USER_LOGOUT" se o campo "Action" for "logout", "USER_RESOURCE_ACCESS" se o campo "Email" não estiver vazio e corresponder ao formato de endereço de e-mail ou "NETWORK_CONNECTION" se os campos "EgressIP" e "SourceIP" ou "OriginIP" e "SourceIP" não estiverem vazios.
read_only_udm.target.file.mime_type O valor é extraído do campo "EdgeResponseContentType".
read_only_udm.target.location.country_or_region O valor é extraído do campo "País".
read_only_udm.target.resource.id O valor é extraído do campo "AccountID" ou "ResourceID".
read_only_udm.target.resource.product_object_id O valor é extraído dos campos AccountID, AppUUID ou ResourceID.
read_only_udm.target.user.product_object_id O valor é extraído do campo "OwnerID" ou "UserUID".

Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.