Recopila registros de Page Shield de Cloudflare
En este documento, se explica cómo transferir registros de Page Shield de Cloudflare a Google Security Operations con Amazon S3.
Page Shield ayuda a administrar los recursos que cargan los visitantes de tu sitio web, incluidos los secuencias de comandos, sus conexiones y las cookies, y activa notificaciones de alerta cuando los recursos cambian o se consideran maliciosos.
Antes de comenzar
- Una instancia de Google SecOps
- Cuenta de Cloudflare con Page Shield habilitado
- Acceso privilegiado al panel de Cloudflare
- Acceso con privilegios a AWS (S3, IAM)
Esta opción usa Cloudflare Logpush para exportar eventos de Page Shield a Amazon S3, que luego Google SecOps ingiere.
Habilita Page Shield
- Accede al panel de Cloudflare.
- Selecciona tu cuenta y dominio.
- Ve a Seguridad > Protección de páginas.
- Haz clic en Habilitar Page Shield.
Crea un bucket de Amazon S3
- Abre la consola de Amazon S3.
- Haga clic en Crear bucket.
- Proporciona los siguientes detalles de configuración:
- Nombre del bucket: Ingresa un nombre significativo para el bucket (por ejemplo,
cloudflare-pageshield-logs). - Región: Selecciona tu región de AWS preferida (por ejemplo,
us-east-1).
- Nombre del bucket: Ingresa un nombre significativo para el bucket (por ejemplo,
- Haz clic en Crear.
- Guarda el nombre y la región del bucket para futuras referencias.
Crea un usuario de IAM con acceso a S3
- Abre la consola de IAM.
- Haz clic en Usuarios > Agregar usuario.
- Ingresa un nombre de usuario (por ejemplo,
chronicle-s3-user). - Selecciona Acceso programático.
- Haz clic en Next: Permissions.
- Elige Adjuntar las políticas existentes de forma directa.
- Busca y selecciona la política AmazonS3FullAccess.
- Haz clic en Siguiente: Etiquetas.
- Haz clic en Siguiente: Revisar.
- Haz clic en Crear usuario.
- Haz clic en Descargar archivo .csv para guardar el ID de clave de acceso y la clave de acceso secreta.
Configura la política del bucket de S3 para Cloudflare
- En la consola de Amazon S3, selecciona tu bucket.
- Haz clic en Permisos > Política de bucket.
- Haz clic en Editar.
Pega la siguiente política y reemplaza
<BUCKET_NAME>por el nombre de tu 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"] } } ] }Haz clic en Guardar cambios.
Crea un trabajo de Cloudflare Logpush
- Accede al panel de Cloudflare.
- Selecciona tu cuenta y dominio.
- Ve a Analytics & Logs > Logs.
- Haz clic en Crear un trabajo de Logpush.
- En Selecciona un destino, elige Amazon S3.
- Ingresa la siguiente información de destino:
- Nombre del bucket: Ingresa el nombre de tu bucket de S3 (por ejemplo,
cloudflare-pageshield-logs). - Región del bucket: Selecciona la región que coincida con tu bucket de S3.
- Ruta de acceso al bucket (opcional): Ingresa un prefijo de ruta de acceso (por ejemplo,
pageshield/).
- Nombre del bucket: Ingresa el nombre de tu bucket de S3 (por ejemplo,
- Haz clic en Continuar.
- Para demostrar la propiedad, Cloudflare enviará un archivo al destino designado. Para encontrar el token, selecciona el botón Abrir en la pestaña Descripción general del archivo de desafío de propiedad y, luego, pégalo en el panel de Cloudflare para verificar tu acceso al bucket. Ingresa el token de propiedad y selecciona Continuar.
- En Seleccionar un conjunto de datos, elige Eventos de Page Shield.
- Haz clic en Siguiente.
- Configura tu trabajo de envío de registros:
- Nombre del trabajo: Ingresa un nombre descriptivo (por ejemplo,
pageshield-to-s3). - Si los registros coinciden: Deja este campo vacío para incluir todos los eventos o configura los filtros según sea necesario.
- Enviar los siguientes campos: Selecciona Todos los campos o elige campos específicos.
- Nombre del trabajo: Ingresa un nombre descriptivo (por ejemplo,
- Haz clic en Enviar.
Configura un feed en Google SecOps para transferir registros de Page Shield
- Ve a Configuración de SIEM > Feeds.
- Haz clic en Agregar feed nuevo.
- En la siguiente página, haz clic en Configurar un solo feed.
- En el campo Nombre del feed, ingresa un nombre para el feed (por ejemplo,
Cloudflare Page Shield S3). - Selecciona Amazon S3 V2 como el Tipo de fuente.
- Selecciona Cloudflare Page Shield como el Tipo de registro.
- Haz clic en Siguiente.
Especifica valores para los siguientes parámetros de entrada:
URI de S3: Ingresa el URI del bucket en el formato
s3://<BUCKET_NAME>/<BUCKET_PATH>/.Opción de borrado de la fuente: Selecciona la opción de borrado según tu preferencia:
- Nunca: Nunca borra ningún archivo después de las transferencias.
- Borrar archivos transferidos: Borra los archivos después de la transferencia exitosa.
- Borrar los archivos transferidos y los directorios vacíos: Borra los archivos y los directorios vacíos después de la transferencia exitosa.
Antigüedad máxima del archivo: Incluye los archivos modificados en la cantidad de días especificada. El valor predeterminado es de 180 días.
ID de clave de acceso: Clave de acceso del usuario con acceso al bucket de S3.
Clave de acceso secreta: Clave secreta del usuario con acceso al bucket de S3.
Espacio de nombres del recurso: Es el espacio de nombres del recurso.
Etiquetas de transmisión: Es la etiqueta que se aplicará a los eventos de este feed.
Haz clic en Siguiente.
Revisa la nueva configuración del feed en la pantalla Finalizar y, luego, haz clic en Enviar.
Tabla de asignación de UDM
| Campo de registro | Asignación de UDM | Lógica |
|---|---|---|
| URLContainsCDNCGIPath | event.idm.read_only_udm.additional.fields.CGI_label | Valor tomado de URLContainsCDNCGIPath, establecido como string_value en la etiqueta con la clave "CGI" |
| Acción | event.idm.read_only_udm.additional.fields.action_label | Valor tomado de Action, establecido como string_value en la etiqueta con la clave "action" |
| resource.first_page_url | event.idm.read_only_udm.additional.fields.first_page_label | Valor tomado de resource.first_page_url, establecido como string_value en la etiqueta con la clave "first_page_url" |
| resource.last_page_url | event.idm.read_only_udm.additional.fields.last_page_label | Valor tomado de resource.last_page_url, establecido como string_value en la etiqueta con la clave "last_page_url" |
| nombre | event.idm.read_only_udm.additional.fields.name_label | Valor tomado del nombre y establecido como string_value en la etiqueta con la clave "name" |
| ts | event.idm.read_only_udm.metadata.event_timestamp | Se convirtió de ts (UNIX) a marca de tiempo. |
| event.idm.read_only_udm.metadata.event_type | Se deriva en función de has_principal, has_target y has_target_user: NETWORK_CONNECTION si hay principal y objetivo; USER_UNCATEGORIZED si hay objetivo_usuario; STATUS_UPDATE si hay principal; de lo contrario, GENERIC_EVENT | |
| resource.url | event.idm.read_only_udm.network.http.referral_url | Valor tomado de resource.url |
| Host | event.idm.read_only_udm.principal.asset.hostname | Valor tomado de Host o host.hostname |
| Host | event.idm.read_only_udm.principal.hostname | Valor tomado de Host o host.hostname |
| alert_type | event.idm.read_only_udm.principal.resource.attribute.labels.alert_type_label | Valor tomado de alert_type, establecido como valor en la etiqueta con la clave "alert_type" |
| resource.cryptomining_score | event.idm.read_only_udm.principal.resource.attribute.labels.crypto_label | Valor tomado de resource.cryptomining_score, establecido como valor en la etiqueta con la clave "cryptominingscore%{index2}" |
| resource.dataflow_score | event.idm.read_only_udm.principal.resource.attribute.labels.dataflow_label | Valor tomado de resource.dataflow_score, establecido como valor en la etiqueta con la clave "dataflowscore%{index2}" |
| policie.description | event.idm.read_only_udm.principal.resource.attribute.labels.desc_label | Valor tomado de policie.description, establecido como valor en la etiqueta con la clave "description_%{index}" |
| version.fetched_at | event.idm.read_only_udm.principal.resource.attribute.labels.fetched_at_label | Valor tomado de version.fetched_at, establecido como valor en la etiqueta con la clave "fetchedat%{index2}" |
| version.hash | event.idm.read_only_udm.principal.resource.attribute.labels.hash_label | Valor tomado de version.hash, establecido como valor en la etiqueta con la clave "hash_%{index2}" |
| policie.id | event.idm.read_only_udm.principal.resource.attribute.labels.id_label | Valor tomado de policy.id y establecido como valor en la etiqueta con la clave "policyid%{index}" |
| data.options.remove_dashboard_links | event.idm.read_only_udm.principal.resource.attribute.labels.remove_dash_label | Valor tomado de data.options.remove_dashboard_links, establecido como valor en la etiqueta con la clave "remove_dashboard_links" |
| resource.resource_type | event.idm.read_only_udm.principal.resource.attribute.labels.res_type_label | Valor tomado de resource.resource_type, establecido como valor en la etiqueta con la clave "resourcetype%{index2}" |
| data.type | event.idm.read_only_udm.principal.resource.attribute.labels.type_label | Valor tomado de data.type, establecido como valor en la etiqueta con la clave "type" |
| data.zones | event.idm.read_only_udm.principal.resource.attribute.labels.zones_label | Valor tomado de data.zones, establecido como valor en la etiqueta con la clave "zones" |
| resource.id | event.idm.read_only_udm.principal.resource.id | Valor tomado de resource.id |
| PageURL | event.idm.read_only_udm.principal.url | Valor tomado de PageURL |
| account_id | event.idm.read_only_udm.principal.user.product_object_id | Valor tomado de account_id |
| policy_id | event.idm.read_only_udm.security_result.detection_fields.policy_id_label | Valor tomado de policy_id, establecido como valor en la etiqueta con la clave "policy_id" |
| policy_name | event.idm.read_only_udm.security_result.detection_fields.policy_name_label | Valor tomado de policy_name, establecido como valor en la etiqueta con la clave "policy_name" |
| texto | event.idm.read_only_udm.security_result.description | Valor tomado del texto |
| resource.first_seen_at | event.idm.read_only_udm.security_result.first_discovered_time | Se convirtió de resource.first_seen_at a marca de tiempo ISO8601. |
| PolicyID | event.idm.read_only_udm.security_result.rule_name | Valor tomado de PolicyID |
| data.severity | event.idm.read_only_udm.security_result.severity | Se deriva de data.severity: si es "INFO" → "INFORMATIONAL"; si es "WARN" → "MEDIUM"; de lo contrario, "UNKNOWN_SEVERITY" |
| URL | event.idm.read_only_udm.target.url | Valor tomado de la URL |
| URLHost | event.idm.read_only_udm.target.user.email_addresses | Valor tomado de URLHost si coincide con el patrón de correo electrónico |
¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.