Recopila registros de Page Shield de Cloudflare

Se admite en los siguientes sistemas operativos:

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

  1. Accede al panel de Cloudflare.
  2. Selecciona tu cuenta y dominio.
  3. Ve a Seguridad > Protección de páginas.
  4. Haz clic en Habilitar Page Shield.

Crea un bucket de Amazon S3

  1. Abre la consola de Amazon S3.
  2. Haga clic en Crear bucket.
  3. 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).
  4. Haz clic en Crear.
  5. Guarda el nombre y la región del bucket para futuras referencias.

Crea un usuario de IAM con acceso a S3

  1. Abre la consola de IAM.
  2. Haz clic en Usuarios > Agregar usuario.
  3. Ingresa un nombre de usuario (por ejemplo, chronicle-s3-user).
  4. Selecciona Acceso programático.
  5. Haz clic en Next: Permissions.
  6. Elige Adjuntar las políticas existentes de forma directa.
  7. Busca y selecciona la política AmazonS3FullAccess.
  8. Haz clic en Siguiente: Etiquetas.
  9. Haz clic en Siguiente: Revisar.
  10. Haz clic en Crear usuario.
  11. 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

  1. En la consola de Amazon S3, selecciona tu bucket.
  2. Haz clic en Permisos > Política de bucket.
  3. Haz clic en Editar.
  4. 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"]
          }
        }
      ]
    }
    
  5. Haz clic en Guardar cambios.

Crea un trabajo de Cloudflare Logpush

  1. Accede al panel de Cloudflare.
  2. Selecciona tu cuenta y dominio.
  3. Ve a Analytics & Logs > Logs.
  4. Haz clic en Crear un trabajo de Logpush.
  5. En Selecciona un destino, elige Amazon S3.
  6. 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/).
  7. Haz clic en Continuar.
  8. 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.
  9. En Seleccionar un conjunto de datos, elige Eventos de Page Shield.
  10. Haz clic en Siguiente.
  11. 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.
  12. Haz clic en Enviar.

Configura un feed en Google SecOps para transferir registros de Page Shield

  1. Ve a Configuración de SIEM > Feeds.
  2. Haz clic en Agregar feed nuevo.
  3. En la siguiente página, haz clic en Configurar un solo feed.
  4. En el campo Nombre del feed, ingresa un nombre para el feed (por ejemplo, Cloudflare Page Shield S3).
  5. Selecciona Amazon S3 V2 como el Tipo de fuente.
  6. Selecciona Cloudflare Page Shield como el Tipo de registro.
  7. Haz clic en Siguiente.
  8. 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.

  9. Haz clic en Siguiente.

  10. 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.