Coletar registros do Page Shield do Cloudflare
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
- Faça login no painel do Cloudflare.
- Selecione sua conta e domínio.
- Acesse Segurança > Page Shield.
- Clique em Ativar o Page Shield.
Criar um bucket do Amazon S3
- Abra o console do Amazon S3.
- Clique em Criar bucket.
- 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).
- Nome do bucket: insira um nome significativo para o bucket (por exemplo,
- Clique em Criar.
- Salve o nome e a região do bucket para referência futura.
Criar um usuário do IAM com acesso ao S3
- Abra o console do IAM.
- Clique em Usuários > Adicionar usuário.
- Digite um nome de usuário (por exemplo,
chronicle-s3-user). - Selecione Acesso programático.
- Clique em Next: Permissions.
- Escolha Anexar políticas atuais diretamente.
- Pesquise e selecione a política AmazonS3FullAccess.
- Clique em Avançar: tags.
- Clique em PRÓXIMA: REVISAR.
- Clique em Criar usuário.
- 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
- No console do Amazon S3, selecione seu bucket.
- Clique em Permissões > Política do bucket.
- Clique em Editar.
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"] } } ] }Clique em Salvar alterações.
Criar um job de Logpush do Cloudflare
- Faça login no painel do Cloudflare.
- Selecione sua conta e domínio.
- Acesse Análise e registros > Registros.
- Clique em Criar um job de Logpush.
- Em Selecionar um destino, escolha Amazon S3.
- 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/).
- Nome do bucket: insira o nome do bucket do S3 (por exemplo,
- Clique em Continuar.
- 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".
- Em Selecionar um conjunto de dados, escolha Eventos do Page Shield.
- Clique em Próxima.
- 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.
- Nome do job: insira um nome descritivo. Por exemplo,
- Clique em Enviar.
Configurar um feed no Google SecOps para ingerir registros do Page Shield
- Acesse Configurações do SIEM > Feeds.
- Clique em Adicionar novo feed.
- Na próxima página, clique em Configurar um único feed.
- No campo Nome do feed, insira um nome para o feed (por exemplo,
Cloudflare Page Shield S3). - Selecione Amazon S3 V2 como o Tipo de origem.
- Selecione Cloudflare Page Shield como o Tipo de registro.
- Clique em Próxima.
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.
Clique em Próxima.
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.