Coletar registros do Page Shield do Cloudflare

Compatível com:

Este documento explica como ingerir registros do Page Shield do Cloudflare no Google Security Operations usando o Amazon S3.

O Page Shield ajuda a gerenciar os recursos carregados pelos visitantes do seu site, incluindo scripts, conexões e cookies, e aciona notificações de alerta quando os recursos mudam ou são considerados maliciosos.

Antes de começar

  • Uma instância do Google SecOps
  • Conta do Cloudflare com o Page Shield ativado
  • Acesso privilegiado ao painel do Cloudflare
  • Acesso privilegiado à AWS (S3, IAM)

Essa opção usa o Cloudflare Logpush para exportar eventos do Page Shield para o Amazon S3, que o Google SecOps ingere.

Ativar o Page Shield

  1. Faça login no painel do Cloudflare.
  2. Selecione sua conta e domínio.
  3. Acesse Segurança > Page Shield.
  4. Clique em Ativar o Page Shield.

Criar um bucket do Amazon S3

  1. Abra o console do Amazon S3.
  2. Clique em Criar bucket.
  3. Informe os seguintes detalhes de configuração:
    • Nome do bucket: insira um nome significativo para o bucket (por exemplo, cloudflare-pageshield-logs).
    • Região: selecione sua região da AWS preferida (por exemplo, us-east-1).
  4. Clique em Criar.
  5. Salve o nome e a região do bucket para referência futura.

Criar um usuário do IAM com acesso ao S3

  1. Abra o console do IAM.
  2. Clique em Usuários > Adicionar usuário.
  3. Digite um nome de usuário (por exemplo, chronicle-s3-user).
  4. Selecione Acesso programático.
  5. Clique em Next: Permissions.
  6. Escolha Anexar políticas atuais diretamente.
  7. Pesquise e selecione a política AmazonS3FullAccess.
  8. Clique em Avançar: tags.
  9. Clique em PRÓXIMA: REVISAR.
  10. Clique em Criar usuário.
  11. Clique em Baixar arquivo .csv para salvar o ID da chave de acesso e a chave de acesso secreta.

Configurar a política do bucket do S3 para o Cloudflare

  1. No console do Amazon S3, selecione seu bucket.
  2. Clique em Permissões > Política do bucket.
  3. Clique em Editar.
  4. Cole a política a seguir, substituindo <BUCKET_NAME> pelo nome do seu bucket:

    {
      "Id": "Policy1506627184792",
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "Stmt1506627150918",
          "Action": ["s3:PutObject"],
          "Effect": "Allow",
          "Resource": "arn:aws:s3:::<BUCKET_NAME>/*",
          "Principal": {
            "AWS": ["arn:aws:iam::391854517948:user/cloudflare-logpush"]
          }
        }
      ]
    }
    
  5. Clique em Salvar alterações.

Criar um job de Logpush do Cloudflare

  1. Faça login no painel do Cloudflare.
  2. Selecione sua conta e domínio.
  3. Acesse Análise e registros > Registros.
  4. Clique em Criar um job de Logpush.
  5. Em Selecionar um destino, escolha Amazon S3.
  6. Insira as seguintes informações de destino:
    • Nome do bucket: insira o nome do bucket do S3 (por exemplo, cloudflare-pageshield-logs).
    • Região do bucket: selecione a região que corresponde ao seu bucket do S3.
    • Caminho do bucket (opcional): insira um prefixo de caminho (por exemplo, pageshield/).
  7. Clique em Continuar.
  8. Para comprovar a propriedade, o Cloudflare vai enviar um arquivo para o destino designado. Para encontrar o token, selecione o botão "Abrir" na guia "Visão geral" do arquivo de desafio de propriedade e cole-o no painel do Cloudflare para verificar seu acesso ao bucket. Insira o token de propriedade e selecione "Continuar".
  9. Em Selecionar um conjunto de dados, escolha Eventos do Page Shield.
  10. Clique em Próxima.
  11. Configure seu job logpush:
    • Nome do job: insira um nome descritivo. Por exemplo, pageshield-to-s3.
    • Se os registros corresponderem: deixe em branco para incluir todos os eventos ou configure os filtros conforme necessário.
    • Enviar os seguintes campos: selecione Todos os campos ou escolha campos específicos.
  12. Clique em Enviar.

Configurar um feed no Google SecOps para ingerir registros do Page Shield

  1. Acesse Configurações do SIEM > Feeds.
  2. Clique em Adicionar novo feed.
  3. Na próxima página, clique em Configurar um único feed.
  4. No campo Nome do feed, insira um nome para o feed (por exemplo, Cloudflare Page Shield S3).
  5. Selecione Amazon S3 V2 como o Tipo de origem.
  6. Selecione Cloudflare Page Shield como o Tipo de registro.
  7. Clique em Próxima.
  8. Especifique valores para os seguintes parâmetros de entrada:

    • URI do S3: insira o URI do bucket no formato: s3://<BUCKET_NAME>/<BUCKET_PATH>/

    • Opção de exclusão da fonte: selecione a opção de exclusão de acordo com sua preferência:

      • Nunca: nunca exclui arquivos após as transferências.
      • Excluir arquivos transferidos: exclui os arquivos após a transferência bem-sucedida.
      • Excluir arquivos transferidos e diretórios vazios: exclui arquivos e diretórios vazios após a transferência bem-sucedida.
    • Idade máxima do arquivo: inclui arquivos modificados no último número de dias. O padrão é de 180 dias.

    • ID da chave de acesso: chave de acesso do usuário com acesso ao bucket do S3.

    • Chave de acesso secreta: chave secreta do usuário com acesso ao bucket do S3.

    • 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
URLContainsCDNCGIPath event.idm.read_only_udm.additional.fields.CGI_label Valor extraído de URLContainsCDNCGIPath, definido como string_value no rótulo com a chave "CGI"
Ação event.idm.read_only_udm.additional.fields.action_label Valor extraído da ação, definido como string_value no rótulo com a chave "action"
resource.first_page_url event.idm.read_only_udm.additional.fields.first_page_label Valor extraído de resource.first_page_url, definido como string_value no rótulo com a chave "first_page_url"
resource.last_page_url event.idm.read_only_udm.additional.fields.last_page_label Valor extraído de resource.last_page_url, definido como string_value no rótulo com a chave "last_page_url"
nome event.idm.read_only_udm.additional.fields.name_label Valor extraído do nome, definido como string_value no rótulo com a chave "name"
ts event.idm.read_only_udm.metadata.event_timestamp Convertido de ts (UNIX) para carimbo de data/hora
event.idm.read_only_udm.metadata.event_type Derivado com base em has_principal, has_target, has_target_user: NETWORK_CONNECTION se principal e destino; USER_UNCATEGORIZED se target_user; STATUS_UPDATE se principal; caso contrário, GENERIC_EVENT
resource.url event.idm.read_only_udm.network.http.referral_url Valor extraído de resource.url
Host event.idm.read_only_udm.principal.asset.hostname Valor extraído de "Host" ou "host.hostname"
Host event.idm.read_only_udm.principal.hostname Valor extraído de "Host" ou "host.hostname"
alert_type event.idm.read_only_udm.principal.resource.attribute.labels.alert_type_label Valor extraído de "alert_type" e definido como valor no rótulo com a chave "alert_type".
resource.cryptomining_score event.idm.read_only_udm.principal.resource.attribute.labels.crypto_label Valor extraído de resource.cryptomining_score, definido como valor no rótulo com a chave "cryptominingscore%{index2}"
resource.dataflow_score event.idm.read_only_udm.principal.resource.attribute.labels.dataflow_label Valor extraído de resource.dataflow_score, definido como valor no rótulo com a chave "dataflowscore%{index2}"
policie.description event.idm.read_only_udm.principal.resource.attribute.labels.desc_label Valor extraído de "policie.description", definido como valor no rótulo com a chave "description_%{index}"
version.fetched_at event.idm.read_only_udm.principal.resource.attribute.labels.fetched_at_label Valor extraído de version.fetched_at, definido como valor no rótulo com a chave "fetchedat%{index2}"
version.hash event.idm.read_only_udm.principal.resource.attribute.labels.hash_label Valor extraído de version.hash, definido como valor no rótulo com a chave "hash_%{index2}"
policie.id event.idm.read_only_udm.principal.resource.attribute.labels.id_label Valor extraído de policie.id, definido como valor no rótulo com a chave "policyid%{index}"
data.options.remove_dashboard_links event.idm.read_only_udm.principal.resource.attribute.labels.remove_dash_label Valor extraído de data.options.remove_dashboard_links, definido como valor no rótulo com a chave "remove_dashboard_links"
resource.resource_type event.idm.read_only_udm.principal.resource.attribute.labels.res_type_label Valor extraído de resource.resource_type, definido como valor no rótulo com a chave "resourcetype%{index2}"
data.type event.idm.read_only_udm.principal.resource.attribute.labels.type_label Valor extraído de data.type, definido como valor no rótulo com a chave "type".
data.zones event.idm.read_only_udm.principal.resource.attribute.labels.zones_label Valor extraído de "data.zones", definido como valor no rótulo com a chave "zones".
resource.id event.idm.read_only_udm.principal.resource.id Valor extraído de resource.id
PageURL event.idm.read_only_udm.principal.url Valor extraído de PageURL
account_id event.idm.read_only_udm.principal.user.product_object_id Valor extraído de account_id
policy_id event.idm.read_only_udm.security_result.detection_fields.policy_id_label Valor extraído de policy_id, definido como valor no rótulo com a chave "policy_id"
policy_name event.idm.read_only_udm.security_result.detection_fields.policy_name_label Valor extraído de policy_name, definido como valor no rótulo com a chave "policy_name"
texto event.idm.read_only_udm.security_result.description Valor extraído do texto
resource.first_seen_at event.idm.read_only_udm.security_result.first_discovered_time Convertido de resource.first_seen_at para carimbo de data/hora ISO8601
PolicyID event.idm.read_only_udm.security_result.rule_name Valor extraído de PolicyID
data.severity event.idm.read_only_udm.security_result.severity Derivado de data.severity: se "INFO" → "INFORMATIONAL"; se "WARN" → "MEDIUM"; caso contrário, "UNKNOWN_SEVERITY"
URL event.idm.read_only_udm.target.url Valor extraído do URL
URLHost event.idm.read_only_udm.target.user.email_addresses Valor extraído de URLHost se corresponder ao padrão de e-mail

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