Recolha registos da Cloudflare

Compatível com:

Este documento explica como ingerir registos do Cloudflare no Google Security Operations através de um webhook (destino HTTP) ou do Google Cloud Storage. A Cloudflare gera dados operacionais sob a forma de registos para DNS, HTTP, auditoria, confiança zero e CASB. Esta integração permite-lhe enviar estes registos para o Google SecOps para análise e monitorização. O analisador inicializa primeiro um conjunto de campos vazios e, em seguida, analisa os registos do Cloudflare formatados em JSON, ignorando todas as mensagens que não sejam JSON válidos. Em seguida, o código usa a 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) em conformidade.

Antes de começar

Certifique-se de que tem os seguintes pré-requisitos:

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

Método 1: configure a exportação de registos do Cloudflare através do webhook (destino HTTP)

Este método permite-lhe fazer stream dos registos do Cloudflare diretamente para o Google SecOps sem armazenamento intermédio.

Configure um feed de webhook no Google SecOps

  1. Aceda a Definições do SIEM > Feeds.
  2. Clique em Adicionar novo.
  3. No campo Nome do feed, introduza um nome para o feed (por exemplo, Cloudflare Webhook).
  4. Selecione Webhook como o Tipo de origem.
  5. Selecione Cloudflare como o Tipo de registo.
  6. Clicar em Seguinte.
  7. Especifique valores para os seguintes parâmetros de entrada:
    • Delimitador de divisão: \n.
    • Espaço de nomes do recurso: o espaço de nomes do recurso.
    • Etiquetas de carregamento: a etiqueta a aplicar aos eventos deste feed.
  8. Clicar em Seguinte.
  9. Reveja a nova configuração do feed no ecrã Finalizar e, de seguida, clique em Enviar.
  10. Clique em Gerar chave secreta para gerar uma chave secreta para autenticar este feed.
  11. Copie e guarde a chave secreta, uma vez que não pode ver este segredo novamente.
  12. Aceda ao separador Detalhes.
  13. Copie o URL do ponto final do feed do campo Informações do ponto final.
  14. Clique em Concluído.

Crie uma chave da API para o feed de webhook

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

Configure o destino HTTP do Cloudflare LogPush

  1. Inicie sessão no painel de controlo da Cloudflare.
  2. Selecione a conta empresarial ou o domínio que quer usar com o LogPush.
  3. Aceda a Analytics e registos > Logpush.
  4. Clique em Criar uma tarefa Logpush.
  5. Em Selecionar um destino, escolha Destino HTTP.
  6. Introduza o URL do ponto final HTTP com parâmetros de autenticação:

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

    Substitua o seguinte:

    • <ENDPOINT_URL>: o URL do ponto final do feed do Google SecOps.
    • <API_KEY>: a chave da API da Google Cloud consola (codificada no URL se contiver carateres especiais).
    • <SECRET_KEY>: a chave secreta do feed do webhook (com URL codificado se contiver carateres especiais).
  7. Clique em Continuar.

  8. Selecione o conjunto de dados a enviar (por exemplo, pedidos HTTP, DNS, auditoria, confiança zero, CASB).

  9. Configure a tarefa logpush:

    • Introduza o Nome da tarefa.
    • Opcional: em Se os registos corresponderem, configure os filtros.
    • Em Enviar os seguintes campos, selecione os campos a incluir.
    • Escolha o formato de data/hora (RFC3339 recomendado).
    • Configure a taxa de amostragem, se necessário.
  10. Clique em Enviar para criar a tarefa logpush.

Valide a integração de webhook

Após a configuração, os registos devem aparecer no Google SecOps em poucos minutos. Para validar:

  1. Aceda a Investigação > Pesquisa SIEM.
  2. Pesquise registos com a etiqueta de carregamento configurada.
  3. Confirme se os registos do Cloudflare estão a ser analisados corretamente.

Método 2: configure a exportação de registos da Cloudflare através do Google Cloud Storage

Configure a Cloudflare para enviar registos para o mesmo, o que envolve conceder à Cloudflare as autorizações necessárias.

Crie um Google Cloud recipiente

  1. Inicie sessão na Google Cloud consola.
  2. Aceda à página Contentores do Cloud Storage.
  3. Clique em Criar.
  4. Na página Criar um contentor, introduza as informações do contentor:
    • Nome: introduza um nome exclusivo que cumpra os requisitos do nome do contentor (por exemplo, cloudflare-data).
    • Tipo de localização: selecione um tipo de localização e uma região.
    • Para ativar o espaço de nomes hierárquico, clique na seta de expansão para expandir Otimizar para cargas de trabalho orientadas para ficheiros e com grande volume de dados e, de seguida, selecione Ativar espaço de nomes hierárquico neste contentor.
  5. Clique em Criar.

Conceda autorizações ao contentor

  1. Na consola do Cloud Storage, selecione o contentor que criou anteriormente.
  2. Clique no separador Autorizações.
  3. Clique em Conceder acesso.
  4. Adicione a conta logpush@cloudflare-data.iam.gserviceaccount.com com a autorização Administrador de objetos de armazenamento.
  5. Clique em Guardar.

Configure o LogPush da Cloudflare para o Google Cloud Storage

  1. Inicie sessão no painel de controlo da Cloudflare.
  2. Selecione a conta empresarial ou o domínio que quer usar com o LogPush.
  3. Aceda a Analytics e registos > Logpush.
  4. Clique em Criar uma tarefa Logpush.
  5. Em Selecionar um destino, escolha Google Cloud Storage.
  6. Introduza o caminho do contentor do Google Cloud Storage (por exemplo, gs://cloudflare-data/logs/).
  7. Clique em Continuar.

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

  9. Selecione o conjunto de dados a enviar para o armazenamento.

  10. Configure a tarefa logpush:

    • Introduza o Nome da tarefa.
    • Em Se os registos corresponderem, pode selecionar os eventos a incluir ou remover dos seus registos.
    • Em Enviar os seguintes campos, escolha os registos a enviar.
    • Escolha o formato da data/hora (RFC 339 recomendado).
    • Configure a taxa de amostragem, se necessário.
  11. Clique em Enviar.

Configure um feed no Google SecOps para carregar registos da Cloudflare a partir do Google Cloud Storage

  1. Aceda a Definições do SIEM > Feeds.
  2. Clique em Adicionar novo.
  3. No campo Nome do feed, introduza um nome para o feed (por exemplo, Cloudflare GCS Logs).
  4. Selecione Google Cloud Storage V2 como Tipo de origem.
  5. Selecione Cloudflare como o Tipo de registo.
  6. Clique em Obter conta de serviço.
  7. Clicar em Seguinte.
  8. Especifique valores para os seguintes parâmetros de entrada:

    • URI do contentor de armazenamento: Google Cloud URL do contentor no formato gs://my-bucket/<value>/. Este URL tem de terminar com uma barra invertida (/).
    • Opções de eliminação de origens: selecione a opção de eliminação de acordo com a sua preferência.
    • Idade máxima do ficheiro: inclui ficheiros modificados no último número de dias. A predefinição é 180 dias.
    • Espaço de nomes do recurso: o espaço de nomes do recurso.
    • Etiquetas de carregamento: a etiqueta a aplicar aos eventos deste feed.
  9. Clicar em Seguinte.

  10. Reveja a nova configuração do feed no ecrã Finalizar e, de seguida, clique em Enviar.

Tabela de mapeamento do UDM

Campo de registo Mapeamento do UDM Lógica
ClientIP read_only_udm.principal.asset.ip
read_only_udm.principal.ip
O valor é retirado do campo ClientIP.
ClientRequestHost read_only_udm.target.asset.hostname
read_only_udm.target.hostname
O valor é retirado do campo ClientRequestHost.
ClientRequestMethod read_only_udm.network.http.method O valor é retirado do campo ClientRequestMethod.
ClientRequestURI read_only_udm.target.url O valor é retirado do campo ClientRequestURI. Se o campo ClientRequestHost não estiver vazio, o valor é concatenado com o campo ClientRequestHost.
ClientSrcPort read_only_udm.principal.port O valor é retirado do campo ClientSrcPort.
ClientRequestUserAgent read_only_udm.network.http.user_agent O valor é retirado do campo ClientRequestUserAgent.
ClientSSLCipher read_only_udm.network.tls.cipher O valor é retirado do campo ClientSSLCipher.
ClientSSLProtocol read_only_udm.network.tls.version O valor é retirado do campo ClientSSLProtocol.
País read_only_udm.target.location.country_or_region O valor é retirado do campo País.
CreatedAt read_only_udm.metadata.event_timestamp O valor é retirado do campo CreatedAt.
Data/hora read_only_udm.metadata.event_timestamp O valor é retirado do campo Datetime.
DestinationIP read_only_udm.target.asset.ip
read_only_udm.target.ip
O valor é retirado do campo DestinationIP.
DestinationPort read_only_udm.target.port O valor é retirado do campo DestinationPort.
DeviceID read_only_udm.principal.asset_id O valor é retirado 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 é retirado do campo DstIP.
DstPort read_only_udm.target.port O valor é retirado do campo DstPort.
EdgeResponseBytes read_only_udm.network.received_bytes O valor é retirado do campo EdgeResponseBytes.
EdgeResponseStatus read_only_udm.network.http.response_code O valor é retirado do campo EdgeResponseStatus.
EdgeServerIP read_only_udm.target.asset.ip
read_only_udm.target.ip
O valor é retirado do campo EdgeServerIP.
Email read_only_udm.principal.user.email_addresses
read_only_udm.target.user.email_addresses
O valor é retirado do campo Email.
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" e "UNKNOWN_ACTION" se o campo FirewallMatchesAction não estiver vazio.
FirewallMatchesRuleIDs read_only_udm.security_result.rule_id O valor é retirado do campo FirewallMatchesRuleIDs.
FirewallMatchesSources read_only_udm.security_result.rule_name O valor é retirado do campo FirewallMatchesSources.
HTTPMethod read_only_udm.network.http.method O valor é retirado do campo HTTPMethod.
HTTPHost read_only_udm.target.hostname O valor é retirado do campo HTTPHost.
HTTPVersion read_only_udm.network.application_protocol O valor é retirado do campo HTTPVersion. Se o valor contiver "HTTP", é substituído por "HTTP".
IPAddress read_only_udm.target.asset.ip
read_only_udm.target.ip
O valor é retirado do campo IPAddress.
IsIsolated read_only_udm.about.labels
read_only_udm.security_result.about.resource.attribute.labels
O valor é retirado do campo IsIsolated e é convertido numa string.
Localização read_only_udm.principal.location.name O valor é retirado do campo Localização.
OriginIP read_only_udm.intermediary.ip
read_only_udm.target.asset.ip
read_only_udm.target.ip
O valor é retirado do campo OriginIP.
OriginPort read_only_udm.target.port O valor é retirado do campo OriginPort.
OwnerID read_only_udm.target.user.product_object_id O valor é retirado do campo OwnerID.
Política read_only_udm.security_result.rule_name O valor é retirado do campo Policy.
PolicyID read_only_udm.security_result.rule_id O valor é retirado do campo PolicyID.
PolicyName read_only_udm.security_result.rule_name O valor é retirado do campo PolicyName.
Protocolo read_only_udm.network.ip_protocol O valor é retirado do campo Protocolo e convertido em letras maiúsculas.
QueryCategoryIDs read_only_udm.security_result.about.labels
read_only_udm.security_result.about.resource.attribute.labels
O valor é retirado do campo QueryCategoryIDs.
QueryName read_only_udm.network.dns.questions.name O valor é retirado do campo QueryName.
QueryNameReversed read_only_udm.network.dns.questions.name O valor é retirado do campo QueryNameReversed.
QuerySize read_only_udm.network.sent_bytes O valor é retirado 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 registos DNS conhecidos, é mapeado para o respetivo valor numérico. Caso contrário, o valor é convertido numa string.
RData read_only_udm.network.dns.answers O valor é retirado do campo RData. O campo de tipo é convertido num número inteiro sem sinal.
RayID read_only_udm.metadata.product_log_id O valor é retirado do campo RayID.
Referenciador read_only_udm.network.http.referral_url O valor é retirado do campo Referer.
RequestID read_only_udm.metadata.product_log_id O valor é retirado do campo RequestID.
ResolverDecision read_only_udm.security_result.summary O valor é retirado do campo ResolverDecision.
ResourceID read_only_udm.target.resource.id
read_only_udm.target.resource.product_object_id
O valor é retirado do campo ResourceID.
ResourceType read_only_udm.target.resource.resource_subtype O valor é retirado do campo ResourceType.
SNI read_only_udm.network.tls.client.server_name O valor é retirado do campo SNI.
SecurityAction read_only_udm.security_result.action O valor é definido como "ALLOW" se o campo SecurityAction estiver vazio ou o campo sec_action estiver vazio, "ALLOW_WITH_MODIFICATION" se o campo SecurityAction for "challengeSolved" ou "jschallengeSolved", "BLOCK" se o campo SecurityAction for "drop" ou "block".
SecurityLevel read_only_udm.security_result.severity O valor é retirado do campo SecurityLevel e é mapeado para o respetivo valor de gravidade da UDM.
SessionID read_only_udm.network.session_id O valor é retirado do campo SessionID.
SessionStartTime read_only_udm.metadata.event_timestamp O valor é retirado 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 é retirado do campo SourceIP.
SourcePort read_only_udm.principal.port
read_only_udm.src.port
O valor é retirado do campo SourcePort.
SrcIP read_only_udm.principal.asset.ip
read_only_udm.principal.ip
O valor é retirado do campo SrcIP.
SrcPort read_only_udm.principal.port O valor é retirado do campo SrcPort.
TemporaryAccessDuration read_only_udm.network.session_duration.seconds O valor é retirado do campo TemporaryAccessDuration.
Indicação de tempo read_only_udm.metadata.event_timestamp O valor é retirado do campo Timestamp.
Transporte read_only_udm.network.ip_protocol O valor é retirado do campo Transport e é convertido em letras maiúsculas.
URL read_only_udm.target.url O valor é retirado do campo URL.
UserAgent read_only_udm.network.http.user_agent O valor é retirado do campo UserAgent.
UserID read_only_udm.principal.user.product_object_id O valor é retirado do campo UserID.
UserUID read_only_udm.target.user.product_object_id O valor é retirado do campo UserUID.
VirtualNetworkID read_only_udm.principal.resource.product_object_id O valor é retirado do campo VirtualNetworkID.
WAFAction read_only_udm.security_result.about.labels
read_only_udm.security_result.about.resource.attribute.labels
O valor é retirado do campo WAFAction.
WAFAttackScore read_only_udm.security_result.about.resource.attribute.labels O valor é retirado do campo WAFAttackScore.
WAFFlags read_only_udm.security_result.about.resource.attribute.labels O valor é retirado do campo WAFFlags.
WAFProfile read_only_udm.security_result.about.labels
read_only_udm.security_result.about.resource.attribute.labels
O valor é retirado do campo WAFProfile.
WAFRCEAttackScore read_only_udm.security_result.about.resource.attribute.labels O valor é retirado 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 é retirado do campo WAFRuleID.
WAFRuleMessage read_only_udm.security_result.rule_name
read_only_udm.security_result.threat_name
O valor é retirado do campo WAFRuleMessage.
WAFSQLiAttackScore read_only_udm.security_result.about.resource.attribute.labels O valor é retirado do campo WAFSQLiAttackScore.
WAFXSSAttackScore read_only_udm.security_result.about.resource.attribute.labels O valor é retirado do campo WAFXSSAttackScore.
ZoneID read_only_udm.additional.fields O valor é retirado do campo ZoneID.
read_only_udm.metadata.log_type O valor é definido como "CLOUDFLARE".
read_only_udm.metadata.product_name O valor é definido como "Cloudflare Gateway DNS" se o registo for um registo de DNS, "Cloudflare Gateway HTTP" se o registo for um registo HTTP de gateway, "Cloudflare Audit" se o registo for um registo de auditoria ou "Web Application Firewall" 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 registo for um registo DNS, "HTTP" se o campo HTTPVersion contiver "HTTP" ou o valor do campo Protocol convertido em 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 é retirado do campo UserAgent ou ClientRequestUserAgent e é analisado através do 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 registo for um registo de DNS, "NETWORK_CONNECTION" se o registo for um registo HTTP de gateway, "USER_RESOURCE_ACCESS" se o registo for um registo de auditoria e os campos ActorIP e ActorEmail estiverem vazios, "USER_RESOURCE_UPDATE_CONTENT" se o registo for um registo 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 email, ou "NETWORK_CONNECTION" se os campos EgressIP e SourceIP não estiverem vazios ou os campos OriginIP e SourceIP não estiverem vazios.
read_only_udm.target.file.mime_type O valor é retirado do campo EdgeResponseContentType.
read_only_udm.target.location.country_or_region O valor é retirado do campo País.
read_only_udm.target.resource.id O valor é retirado do campo AccountID ou do campo ResourceID.
read_only_udm.target.resource.product_object_id O valor é retirado do campo AccountID, do campo AppUUID ou do campo ResourceID.
read_only_udm.target.user.product_object_id O valor é retirado do campo OwnerID ou do campo UserUID.

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