Recopila registros de Cloudflare

Compatible con:

En este documento, se explica cómo transferir registros de Cloudflare a Google Security Operations con Webhook (destino HTTP) o Google Cloud Storage. Cloudflare genera datos operativos en forma de registros para DNS, HTTP, auditoría, Zero Trust y CASB. Esta integración te permite enviar estos registros a Google SecOps para su análisis y supervisión. Primero, el analizador inicializa un conjunto de campos vacíos y, luego, analiza los registros de Cloudflare con formato JSON, descartando los mensajes que no sean JSON válidos. Luego, el código usa lógica condicional basada en la presencia y los valores de campos específicos para determinar el producto y el tipo de evento de Cloudflare, y completa los campos del modelo de datos unificado (UDM) según corresponda.

Antes de comenzar

Asegúrate de cumplir con los siguientes requisitos previos:

  • Instancia de Google SecOps.
  • Cuenta de Cloudflare Enterprise con LogPush habilitado
  • Para el método de webhook, se requiere acceso privilegiado a la consola de Google Cloud .
  • Para el método de Google Cloud Storage: Acceso privilegiado a Google Cloud Storage.

Método 1: Configura la exportación de registros de Cloudflare con Webhook (destino HTTP)

Este método te permite transmitir registros de Cloudflare directamente a Google SecOps sin almacenamiento intermedio.

Configura un feed de webhook en Google SecOps

  1. Ve a Configuración de SIEM > Feeds.
  2. Haz clic en Agregar nueva.
  3. En el campo Nombre del feed, ingresa un nombre para el feed (por ejemplo, Cloudflare Webhook).
  4. Selecciona Webhook como el Tipo de origen.
  5. Selecciona Cloudflare como el Tipo de registro.
  6. Haz clic en Siguiente.
  7. Especifica valores para los siguientes parámetros de entrada:
    • Delimitador de división: \n.
    • 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.
  8. Haz clic en Siguiente.
  9. Revisa la nueva configuración del feed en la pantalla Finalizar y, luego, haz clic en Enviar.
  10. Haz clic en Generar clave secreta para generar una clave secreta que autentique este feed.
  11. Copia y guarda la clave secreta, ya que no podrás volver a verla.
  12. Ve a la pestaña Detalles.
  13. Copia la URL del extremo del feed desde el campo Información del extremo.
  14. Haz clic en Listo.

Crea una clave de API para el feed de webhook

  1. Ve a Google Cloud consola > APIs y servicios > Credenciales.
  2. Haz clic en Crear credenciales y selecciona Clave de API.
  3. Haz clic en Editar clave de API.
  4. En Restricciones de API, selecciona Restringir clave.
  5. Selecciona Google SecOps API en la lista.
  6. Haz clic en Guardar.
  7. Copia el valor de la clave de API.

Configura el destino HTTP de Cloudflare LogPush

  1. Accede al panel de Cloudflare.
  2. Selecciona la cuenta de Enterprise o el dominio que deseas usar con LogPush.
  3. Ve a Analytics & Logs > Logpush.
  4. Haz clic en Crear un trabajo de Logpush.
  5. En Selecciona un destino, elige Destino HTTP.
  6. Ingresa la URL del extremo HTTP con parámetros de autenticación:

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

    Reemplaza lo siguiente:

    • <ENDPOINT_URL>: Es la URL del extremo del feed de Google SecOps.
    • <API_KEY>: Es la clave de API de la consola de Google Cloud (con codificación URL si contiene caracteres especiales).
    • <SECRET_KEY>: Es la clave secreta del feed de webhook (codificada en URL si contiene caracteres especiales).
  7. Haz clic en Continuar.

  8. Selecciona el conjunto de datos que deseas enviar (por ejemplo, Solicitudes HTTP, DNS, Auditoría, Confianza cero, CASB).

  9. Configura tu trabajo de logpush:

    • Ingresa el Nombre del trabajo.
    • Opcional: En Si los registros coinciden, configura los filtros.
    • En Send the following fields, selecciona los campos que deseas incluir.
    • Elige el formato de marca de tiempo (se recomienda RFC3339).
    • Configura la tasa de muestreo si es necesario.
  10. Haz clic en Enviar para crear el trabajo de envío de registros.

Verifica la integración del webhook

Después de la configuración, los registros deberían aparecer en Google SecOps en cuestión de minutos. Para verificar, haz lo siguiente:

  1. Ve a Investigación > Búsqueda en SIEM.
  2. Busca registros con la etiqueta de transferencia configurada.
  3. Confirma que los registros de Cloudflare se analicen correctamente.

Método 2: Configura la exportación de registros de Cloudflare con Google Cloud Storage

Configura Cloudflare para que envíe registros, lo que implica otorgarle los permisos necesarios.

Crea un bucket Google Cloud

  1. Accede a la consola deGoogle Cloud .
  2. Ve a la página Buckets de Cloud Storage.
  3. Haz clic en Crear.
  4. En la página Crear un bucket, ingresa la información de tu bucket:
    • Nombre: Ingresa un nombre único que cumpla con los requisitos de nomenclatura de bucket (por ejemplo, cloudflare-data).
    • Tipo de ubicación: Selecciona un tipo de ubicación y una región.
    • Para habilitar el espacio de nombres jerárquico, haz clic en la flecha de expansión para expandir Optimizar las cargas de trabajo orientadas a archivos y con uso intensivo de datos y, luego, selecciona Habilitar el espacio de nombres jerárquico en este bucket.
  5. Haz clic en Crear.

Otorga permisos al bucket

  1. En la consola de Cloud Storage, selecciona el bucket que creaste anteriormente.
  2. Haz clic en la pestaña Permisos.
  3. Haz clic en Otorgar acceso.
  4. Agrega la cuenta logpush@cloudflare-data.iam.gserviceaccount.com con permiso de administrador de objetos de almacenamiento.
  5. Haz clic en Guardar.

Configura Cloudflare LogPush en Google Cloud Storage

  1. Accede al panel de Cloudflare.
  2. Selecciona la cuenta de Enterprise o el dominio que deseas usar con LogPush.
  3. Ve a Analytics & Logs > Logpush.
  4. Haz clic en Crear un trabajo de Logpush.
  5. En Selecciona un destino, elige Google Cloud Storage.
  6. Ingresa la ruta de acceso a tu bucket de Google Cloud Storage (por ejemplo, gs://cloudflare-data/logs/).
  7. Haz clic en Continuar.

  8. Ingresa el token de propiedad y haz clic en Continuar.

  9. Selecciona el conjunto de datos que se enviará al almacenamiento.

  10. Configura tu trabajo de logpush:

    • Ingresa el Nombre del trabajo.
    • En Si los registros coinciden, puedes seleccionar los eventos que deseas incluir o quitar de tus registros.
    • En Send the following fields, elige qué registros enviar.
    • Elige el formato de marca de tiempo (se recomienda RFC 339).
    • Configura la tasa de muestreo si es necesario.
  11. Haz clic en Enviar.

Configura un feed en Google SecOps para transferir registros de Cloudflare desde Google Cloud Storage

  1. Ve a Configuración de SIEM > Feeds.
  2. Haz clic en Agregar nueva.
  3. En el campo Nombre del feed, ingresa un nombre para el feed (por ejemplo, Cloudflare GCS Logs).
  4. Selecciona Google Cloud Storage V2 como el Tipo de fuente.
  5. Selecciona Cloudflare como el Tipo de registro.
  6. Haz clic en Obtener cuenta de servicio.
  7. Haz clic en Siguiente.
  8. Especifica valores para los siguientes parámetros de entrada:

    • URI del bucket de almacenamiento:URL del bucket en formato gs://my-bucket/<value>/. Google Cloud Esta URL debe terminar con una barra diagonal final (/).
    • Opciones de borrado de la fuente: Selecciona la opción de borrado según tu preferencia.
    • Antigüedad máxima del archivo: Incluye los archivos modificados en la cantidad de días más reciente. El valor predeterminado es de 180 días.
    • 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
ClientIP read_only_udm.principal.asset.ip
read_only_udm.principal.ip
El valor se toma del campo ClientIP.
ClientRequestHost read_only_udm.target.asset.hostname
read_only_udm.target.hostname
El valor se toma del campo ClientRequestHost.
ClientRequestMethod read_only_udm.network.http.method El valor se toma del campo ClientRequestMethod.
ClientRequestURI read_only_udm.target.url El valor se toma del campo ClientRequestURI. Si el campo ClientRequestHost no está vacío, el valor se concatena con el campo ClientRequestHost.
ClientSrcPort read_only_udm.principal.port El valor se toma del campo ClientSrcPort.
ClientRequestUserAgent read_only_udm.network.http.user_agent El valor se toma del campo ClientRequestUserAgent.
ClientSSLCipher read_only_udm.network.tls.cipher El valor se toma del campo ClientSSLCipher.
ClientSSLProtocol read_only_udm.network.tls.version El valor se toma del campo ClientSSLProtocol.
País read_only_udm.target.location.country_or_region El valor se toma del campo País.
CreatedAt read_only_udm.metadata.event_timestamp El valor se toma del campo CreatedAt.
Fecha y hora read_only_udm.metadata.event_timestamp El valor se toma del campo Fecha y hora.
DestinationIP read_only_udm.target.asset.ip
read_only_udm.target.ip
El valor se toma del campo DestinationIP.
DestinationPort read_only_udm.target.port El valor se toma del campo DestinationPort.
DeviceID read_only_udm.principal.asset_id El valor se toma del campo DeviceID y tiene el prefijo "Cloudflare:".
DeviceName read_only_udm.principal.asset.hostname
read_only_udm.principal.hostname
El valor se toma del campo DeviceName.
DstIP read_only_udm.target.asset.ip
read_only_udm.target.ip
El valor se toma del campo DstIP.
DstPort read_only_udm.target.port El valor se toma del campo DstPort.
EdgeResponseBytes read_only_udm.network.received_bytes El valor se toma del campo EdgeResponseBytes.
EdgeResponseStatus read_only_udm.network.http.response_code El valor se toma del campo EdgeResponseStatus.
EdgeServerIP read_only_udm.target.asset.ip
read_only_udm.target.ip
El valor se toma del campo EdgeServerIP.
Correo electrónico read_only_udm.principal.user.email_addresses
read_only_udm.target.user.email_addresses
El valor se toma del campo Correo electrónico.
FirewallMatchesActions read_only_udm.security_result.action El valor se establece en "ALLOW" si el campo FirewallMatchesAction es "allow", "Allow", "ALLOW", "skip", "SKIP" o "Skip"; en "ALLOW_WITH_MODIFICATION" si el campo FirewallMatchesAction es "challengeSolved" o "jschallengeSolved"; en "BLOCK" si el campo FirewallMatchesAction es "drop" o "block"; y en "UNKNOWN_ACTION" si el campo FirewallMatchesAction no está vacío.
FirewallMatchesRuleIDs read_only_udm.security_result.rule_id El valor se toma del campo FirewallMatchesRuleIDs.
FirewallMatchesSources read_only_udm.security_result.rule_name El valor se toma del campo FirewallMatchesSources.
HTTPMethod read_only_udm.network.http.method El valor se toma del campo HTTPMethod.
HTTPHost read_only_udm.target.hostname El valor se toma del campo HTTPHost.
HTTPVersion read_only_udm.network.application_protocol El valor se toma del campo HTTPVersion. Si el valor contiene "HTTP", se reemplaza por "HTTP".
IPAddress read_only_udm.target.asset.ip
read_only_udm.target.ip
El valor se toma del campo IPAddress.
IsIsolated read_only_udm.about.labels
read_only_udm.security_result.about.resource.attribute.labels
El valor se toma del campo IsIsolated y se convierte en una cadena.
Ubicación read_only_udm.principal.location.name El valor se toma del campo Ubicación.
OriginIP read_only_udm.intermediary.ip
read_only_udm.target.asset.ip
read_only_udm.target.ip
El valor se toma del campo OriginIP.
OriginPort read_only_udm.target.port El valor se toma del campo OriginPort.
ID del propietario read_only_udm.target.user.product_object_id El valor se toma del campo OwnerID.
Política read_only_udm.security_result.rule_name El valor se toma del campo Política.
PolicyID read_only_udm.security_result.rule_id El valor se toma del campo PolicyID.
PolicyName read_only_udm.security_result.rule_name El valor se toma del campo PolicyName.
Protocolo read_only_udm.network.ip_protocol El valor se toma del campo Protocolo y se convierte a mayúsculas.
QueryCategoryIDs read_only_udm.security_result.about.labels
read_only_udm.security_result.about.resource.attribute.labels
El valor se toma del campo QueryCategoryIDs.
QueryName read_only_udm.network.dns.questions.name El valor se toma del campo QueryName.
QueryNameReversed read_only_udm.network.dns.questions.name El valor se toma del campo QueryNameReversed.
QuerySize read_only_udm.network.sent_bytes El valor se toma del campo QuerySize.
QueryType read_only_udm.network.dns.questions.type El valor se toma del campo QueryType. Si el valor es uno de los tipos de registros DNS conocidos, se asigna a su valor numérico correspondiente. De lo contrario, el valor se convierte en una cadena.
RData read_only_udm.network.dns.answers El valor se toma del campo RData. El campo de tipo se convierte en un número entero sin signo.
RayID read_only_udm.metadata.product_log_id El valor se toma del campo RayID.
Referencia read_only_udm.network.http.referral_url El valor se toma del campo Referer.
RequestID read_only_udm.metadata.product_log_id El valor se toma del campo RequestID.
ResolverDecision read_only_udm.security_result.summary El valor se toma del campo ResolverDecision.
ResourceID read_only_udm.target.resource.id
read_only_udm.target.resource.product_object_id
El valor se toma del campo ResourceID.
ResourceType read_only_udm.target.resource.resource_subtype El valor se toma del campo ResourceType.
SNI read_only_udm.network.tls.client.server_name El valor se toma del campo SNI.
SecurityAction read_only_udm.security_result.action El valor se establece en "ALLOW" si el campo SecurityAction está vacío o si el campo sec_action está vacío, en "ALLOW_WITH_MODIFICATION" si el campo SecurityAction es "challengeSolved" o "jschallengeSolved", y en "BLOCK" si el campo SecurityAction es "drop" o "block".
SecurityLevel read_only_udm.security_result.severity El valor se toma del campo SecurityLevel y se asigna a su valor de gravedad de UDM correspondiente.
SessionID read_only_udm.network.session_id El valor se toma del campo SessionID.
SessionStartTime read_only_udm.metadata.event_timestamp El valor se toma del 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
El valor se toma del campo SourceIP.
SourcePort read_only_udm.principal.port
read_only_udm.src.port
El valor se toma del campo SourcePort.
SrcIP read_only_udm.principal.asset.ip
read_only_udm.principal.ip
El valor se toma del campo SrcIP.
SrcPort read_only_udm.principal.port El valor se toma del campo SrcPort.
TemporaryAccessDuration read_only_udm.network.session_duration.seconds El valor se toma del campo TemporaryAccessDuration.
Marca de tiempo read_only_udm.metadata.event_timestamp El valor se toma del campo Timestamp.
Transporte read_only_udm.network.ip_protocol El valor se toma del campo Transporte y se convierte a mayúsculas.
URL read_only_udm.target.url El valor se toma del campo URL.
UserAgent read_only_udm.network.http.user_agent El valor se toma del campo UserAgent.
UserID read_only_udm.principal.user.product_object_id El valor se toma del campo UserID.
UserUID read_only_udm.target.user.product_object_id El valor se toma del campo UserUID.
VirtualNetworkID read_only_udm.principal.resource.product_object_id El valor se toma del campo VirtualNetworkID.
WAFAction read_only_udm.security_result.about.labels
read_only_udm.security_result.about.resource.attribute.labels
El valor se toma del campo WAFAction.
WAFAttackScore read_only_udm.security_result.about.resource.attribute.labels El valor se toma del campo WAFAttackScore.
WAFFlags read_only_udm.security_result.about.resource.attribute.labels El valor se toma del campo WAFFlags.
WAFProfile read_only_udm.security_result.about.labels
read_only_udm.security_result.about.resource.attribute.labels
El valor se toma del campo WAFProfile.
WAFRCEAttackScore read_only_udm.security_result.about.resource.attribute.labels El valor se toma del 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
El valor se toma del campo WAFRuleID.
WAFRuleMessage read_only_udm.security_result.rule_name
read_only_udm.security_result.threat_name
El valor se toma del campo WAFRuleMessage.
WAFSQLiAttackScore read_only_udm.security_result.about.resource.attribute.labels El valor se toma del campo WAFSQLiAttackScore.
WAFXSSAttackScore read_only_udm.security_result.about.resource.attribute.labels El valor se toma del campo WAFXSSAttackScore.
ZoneID read_only_udm.additional.fields El valor se toma del campo ZoneID.
read_only_udm.metadata.log_type El valor se establece en "CLOUDFLARE".
read_only_udm.metadata.product_name El valor se establece en "DNS de Cloudflare Gateway" si el registro es un registro de DNS, "HTTP de Cloudflare Gateway" si el registro es un registro de HTTP de Gateway, "Auditoría de Cloudflare" si el registro es un registro de auditoría o "Firewall de aplicaciones web" en otros casos.
read_only_udm.metadata.vendor_name El valor se establece en "Cloudflare".
read_only_udm.network.application_protocol El valor se establece en "DNS" si el registro es un registro de DNS, en "HTTP" si el campo HTTPVersion contiene "HTTP" o en el valor del campo Protocol convertido a mayúsculas si el campo Protocol no está vacío y no es "tls" ni "TLS".
read_only_udm.network.direction El valor se establece en "OUTBOUND" si el campo EgressIP no está vacío.
read_only_udm.network.http.parsed_user_agent El valor se toma del campo UserAgent o ClientRequestUserAgent y se analiza con el filtro parseduseragent.
read_only_udm.extensions.auth.type El valor se establece en "MACHINE" si el campo Acción es "login" o "logout".
read_only_udm.metadata.event_type El valor se establece en "NETWORK_DNS" si el registro es un registro de DNS, "NETWORK_CONNECTION" si el registro es un registro HTTP de Gateway, "USER_RESOURCE_ACCESS" si el registro es un registro de auditoría y los campos ActorIP y ActorEmail están vacíos, "USER_RESOURCE_UPDATE_CONTENT" si el registro es un registro de auditoría y los campos ResourceType y newvalue no están vacíos, "USER_LOGIN" si el campo Action es "login", "USER_LOGOUT" si el campo Action es "logout", "USER_RESOURCE_ACCESS" si el campo Email no está vacío y coincide con el formato de dirección de correo electrónico, o "NETWORK_CONNECTION" si los campos EgressIP y SourceIP no están vacíos o si los campos OriginIP y SourceIP no están vacíos.
read_only_udm.target.file.mime_type El valor se toma del campo EdgeResponseContentType.
read_only_udm.target.location.country_or_region El valor se toma del campo País.
read_only_udm.target.resource.id El valor se toma del campo AccountID o del campo ResourceID.
read_only_udm.target.resource.product_object_id El valor se toma del campo AccountID, AppUUID o ResourceID.
read_only_udm.target.user.product_object_id El valor se toma del campo OwnerID o del campo UserUID.

¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.