Recopila registros de los servicios de F5 Distributed Cloud

Compatible con:

En este documento, se explica cómo transferir registros de F5 Distributed Cloud Services a Google Security Operations con Google Cloud Storage V2.

F5 Distributed Cloud Services es una plataforma de seguridad, redes y administración de aplicaciones basada en SaaS que proporciona infraestructura de nube distribuida, entrega de aplicaciones, seguridad de APIs y capacidades de firewall de aplicación web en ubicaciones perimetrales y de múltiples nubes.

Antes de comenzar

Asegúrate de cumplir con los siguientes requisitos previos:

  • Una instancia de Google SecOps
  • Un proyecto de Google Cloud con la API de Cloud Storage habilitada
  • Permisos para crear y administrar buckets de GCS
  • Permisos para administrar políticas de IAM en buckets de GCS
  • Acceso privilegiado a la consola de F5 Distributed Cloud
  • Permisos para crear objetos Global Log Receiver en F5 Distributed Cloud

Crear un bucket de Google Cloud Storage

  1. Ve a la consola de Google Cloud.
  2. Selecciona tu proyecto o crea uno nuevo.
  3. En el menú de navegación, ve a Cloud Storage > Buckets.
  4. Haz clic en Crear bucket.
  5. Proporciona los siguientes detalles de configuración:

    Configuración Valor
    Asigna un nombre a tu bucket Ingresa un nombre global único (por ejemplo, f5-dcs-logs).
    Tipo de ubicación Elige según tus necesidades (región, birregional, multirregional)
    Ubicación Selecciona la ubicación (por ejemplo, us-central1).
    Clase de almacenamiento Estándar (recomendado para los registros a los que se accede con frecuencia)
    Control de acceso Uniforme (recomendado)
    Herramientas de protección Opcional: Habilita el control de versiones de objetos o la política de retención
  6. Haz clic en Crear.

Configura F5 Distributed Cloud para exportar a GCS

Agrega el bucket de GCS a la lista de entidades permitidas del firewall

  1. El receptor de registros global de F5 Distributed Cloud requiere que se agreguen los siguientes rangos de direcciones IP a la lista de entidades permitidas del firewall:

    • 193.16.236.64/29
    • 185.160.8.152/29
  2. Si tu bucket de GCS usa Controles del servicio de VPC o reglas de firewall, agrega estos rangos de IP a tu lista de entidades permitidas.

Crea una cuenta de servicio de Google Cloud para F5 Distributed Cloud

  1. En la consola de Google Cloud, ve a IAM y administración > Cuentas de servicio.
  2. Haz clic en Crear cuenta de servicio.
  3. Proporciona los siguientes detalles de configuración:

    • Nombre de la cuenta de servicio: Ingresa f5-dcs-log-writer (o un nombre descriptivo).
    • Descripción de la cuenta de servicio: Ingresa Service account for F5 Distributed Cloud to write logs to GCS.
  4. Haz clic en Crear y continuar.

  5. En la sección Otorga a esta cuenta de servicio acceso al proyecto, haz lo siguiente:

    1. Haz clic en Selecciona un rol.
    2. Busca y selecciona Administrador de objetos de almacenamiento.
  6. Haz clic en Continuar.

  7. Haz clic en Listo.

Crea una clave de cuenta de servicio

  1. En la lista Cuentas de servicio, haz clic en la cuenta de servicio que creaste (por ejemplo, f5-dcs-log-writer).
  2. Ve a la pestaña Claves.
  3. Haz clic en Agregar clave > Crear clave nueva.
  4. Seleccione JSON como tipo de clave.
  5. Haz clic en Crear.
  6. El archivo de clave JSON se descargará en tu computadora.
  7. Guarda este archivo de forma segura. La necesitarás en los próximos pasos.

Otorga permisos de IAM en el bucket de GCS

  1. Ve a Cloud Storage > Buckets.
  2. Haz clic en el nombre de tu bucket (por ejemplo, f5-dcs-logs).
  3. Ve a la pestaña Permisos.
  4. Haz clic en Otorgar acceso.
  5. Proporciona los siguientes detalles de configuración:
    • Agregar principales: Ingresa el correo electrónico de la cuenta de servicio (por ejemplo, f5-dcs-log-writer@PROJECT_ID.iam.gserviceaccount.com).
    • Asignar roles: Selecciona Administrador de objetos de almacenamiento.
  6. Haz clic en Guardar.

Crea credenciales de Google Cloud en la consola de F5 Distributed Cloud

  1. Accede a la consola de F5 Distributed Cloud en https://<tenant>.console.ves.volterra.io.
  2. Selecciona el servicio Multi-Cloud Network Connect en la página principal.
  3. Ve a Administrar > Administración del sitio > Credenciales de Cloud.
  4. Haz clic en Agregar credenciales de nube.
  5. En la sección Metadatos, haz lo siguiente:
    • Nombre: Ingresa un nombre descriptivo (por ejemplo, gcp-chronicle-logs).
    • Descripción (opcional): Ingresa Cloud Storage credentials for Google SecOps log export.
  6. En la sección Cloud Credentials Type, selecciona GCP Credentials.
  7. Haz clic en Configurar en el campo Credenciales de GCP.
  8. En el menú desplegable Tipo de credencial, selecciona Archivo de credenciales de cuenta de servicio.
  9. Haz clic en Subir archivo y selecciona el archivo de clave JSON que descargaste en los pasos anteriores.
  10. Haz clic en Aplicar.
  11. Haz clic en Guardar y salir.

Crea un receptor de registros global

  1. En la consola de F5 Distributed Cloud, asegúrate de estar en el servicio Multi-Cloud Network Connect.
  2. Ve a Administrar > Administración de registros > Receptor de registros global.
  3. Haz clic en Add Global Log Receiver.
  4. En la sección Metadatos, haz lo siguiente:

    • Nombre: Ingresa un nombre descriptivo (por ejemplo, chronicle-gcs-receiver).
    • Descripción (opcional): Ingresa Global log receiver for Google SecOps SIEM.
  5. En el menú desplegable Tipo de registro, selecciona los tipos de registro que deseas exportar:

    • Registros de solicitudes: Registros de solicitudes y respuestas HTTP con el usuario, la ruta de acceso, el método y los códigos de respuesta
    • Eventos de seguridad: Eventos de WAF, DSD, protección de API y defensa contra bots
    • Registros de auditoría: Cambios de configuración a través de APIs públicas
    • Registros de solicitudes de DNS: Registros de consultas de DNS
  6. En el menú desplegable Log Message Selection, selecciona una de las siguientes opciones:

    • Select logs from current namespace: Envía registros solo desde el espacio de nombres actual.
    • Seleccionar registros de todos los espacios de nombres: Envía registros de todos los espacios de nombres (se recomienda para una visibilidad integral).
    • Seleccionar registros en espacios de nombres específicos: Envía registros de los espacios de nombres especificados (haz clic en Agregar elemento para agregar nombres de espacios de nombres).
  7. En el menú desplegable Configuración del receptor, selecciona Receptor de bucket de GCP.

  8. En el campo Nombre del bucket de GCP, ingresa el nombre de tu bucket de GCS (por ejemplo, f5-dcs-logs).

  9. En el menú desplegable GCP Cloud Credentials, selecciona las credenciales de nube que creaste antes (por ejemplo, gcp-chronicle-logs).

  10. Opcional: Expande Mostrar campos avanzados para configurar las opciones de lotes:

    • Opciones de tiempo de espera por lotes: Selecciona Segundos de tiempo de espera y, luego, ingresa un valor (el valor predeterminado es 300 segundos).
    • Batch Max Events: Selecciona Max Events y, luego, ingresa un valor entre 32 y 2,000 (déjalo sin configurar para que no haya límite).
    • Bytes por lote: Selecciona Bytes máx. y, luego, ingresa un valor entre 4,096 y 1,048,576 (el valor predeterminado es 10485760 bytes / 10 MB).
  11. Haz clic en Guardar y salir.

Prueba la conexión

  1. En la lista Global Log Receiver, busca el receptor que creaste (por ejemplo, chronicle-gcs-receiver).
  2. Haz clic en los tres puntos () de la columna Acciones.
  3. Selecciona Test Connection.
  4. Espera a que se complete la prueba.
  5. Debería aparecer un mensaje que indique que la conexión se realizó correctamente.

Verifica los registros en el bucket de GCS

  1. Ve a Cloud Storage > Buckets en la consola de GCP.
  2. Haz clic en el nombre de tu bucket (por ejemplo, f5-dcs-logs).
  3. Verifica que se estén creando archivos de registro en el bucket.
  4. F5 Distributed Cloud organiza los registros en la siguiente estructura de carpetas:

    YYYY/MM/DD/HH/
    
    • Se crea una carpeta para cada día (AAAA/MM/DD)
    • Dentro de cada carpeta de día, se crea una subcarpeta para cada hora (HH).
    • Cada 5 minutos, se escriben nuevos archivos comprimidos con gzip en la subcarpeta por hora.
    • Los archivos están en formato NDJSON (JSON delimitado por saltos de línea).
  5. Haz clic en un archivo gzip para descargar y revisar el formato de registro.

Recupera la cuenta de servicio de Google SecOps

Las Operaciones de seguridad de Google usan una cuenta de servicio única para leer datos de tu bucket de GCS. Debes otorgar acceso a tu bucket a esta cuenta de servicio.

Obtén el correo electrónico de la cuenta de servicio

  1. Ve a Configuración de SIEM > Feeds.
  2. Haz clic en Agregar feed nuevo.
  3. Haz clic en Configura un feed único.
  4. En el campo Nombre del feed, ingresa un nombre para el feed (por ejemplo, F5 DCS Logs).
  5. Selecciona Google Cloud Storage V2 como el Tipo de fuente.
  6. Selecciona F5 Distributed Cloud Services como el Tipo de registro.
  7. Haz clic en Obtener cuenta de servicio. Se mostrará un correo electrónico único de la cuenta de servicio, por ejemplo:

    chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com
    
  8. Copia esta dirección de correo electrónico para usarla en el siguiente paso.

  9. Haz clic en Siguiente.

  10. Especifica valores para los siguientes parámetros de entrada:

    • URL del bucket de almacenamiento: Ingresa el URI del bucket de GCS:

      gs://f5-dcs-logs/
      

      Reemplaza f5-dcs-logs por el nombre de tu bucket de GCS.

    • 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 (se recomienda para las pruebas).
      • 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 más reciente (el valor predeterminado es 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.

  11. Haz clic en Siguiente.

  12. Revisa la nueva configuración del feed en la pantalla Finalizar y, luego, haz clic en Enviar.

Otorga permisos de IAM a la cuenta de servicio de Google SecOps

La cuenta de servicio de Google SecOps necesita el rol de visualizador de objetos de almacenamiento en tu bucket de GCS.

  1. Ve a Cloud Storage > Buckets.
  2. Haz clic en el nombre de tu bucket (por ejemplo, f5-dcs-logs).
  3. Ve a la pestaña Permisos.
  4. Haz clic en Otorgar acceso.
  5. Proporciona los siguientes detalles de configuración:

    • Agregar principales: Pega el correo electrónico de la cuenta de servicio de Google SecOps.
    • Asignar roles: Selecciona Visualizador de objetos de Storage.
  6. Haz clic en Guardar.

Tabla de asignación de UDM

Campo de registro Asignación de UDM Lógica
_id metadata.product_log_id Valor copiado directamente
src principal.namespace Valor copiado directamente
kubernetes_labels_app target.resource.attribute.labels Se fusionó de app_label (derivado de kubernetes_labels_app)
kubernetes_host target.hostname Valor copiado directamente
kubernetes_container_name target.resource.product_object_id Valor copiado directamente
bot_info.classification security_result.detection_fields Se fusionó desde bot_info_classification_label (derivado de bot_info.classification)
bot_info.name security_result.detection_fields Se combinó desde bot_info_name_label (derivado de bot_info.name)
bot_info.type security_result.detection_fields Se fusionó de bot_info_type_label (derivado de bot_info.type)
timestamp @timestamp Se analizó con el filtro de fecha con RFC3339, UNIX, ISO8601
visitor_id security_result.detection_fields Se fusionó de visitor_id_label (derivado de visitor_id)
etiqueta security_result.detection_fields Se fusionó desde tag_label (derivado de tag)
acción security_result.action Se establece en ALLOW si las coincidencias permiten el acceso y en BLOCK si las coincidencias lo rechazan.
gravedad, security_result.severity Se establece en HIGH si hay un error o una advertencia, en CRITICAL si es crítico, en MEDIUM si es un aviso y en LOW si es información.
gravedad, security_result.severity_details Valor copiado directamente
api_endpoint target.labels Se fusionó de api_endpoint_label (derivado de api_endpoint)
app_firewall_name principal.process.command_line Valor copiado directamente
app_type security_result.detection_fields Se combinó desde about_app_type (derivado de app_type)
as_org security_result.detection_fields Se combinó desde about_as_org (derivado de as_org)
asn security_result.detection_fields Se combinó desde about_asn (derivado de asn)
kubernetes.pod_id security_result.detection_fields Se fusionó de about_pod_id (derivado de kubernetes.pod_id)
kubernetes.pod_name security_result.detection_fields Se fusionó de about_pod_name (derivado de kubernetes.pod_name)
latitud principal.location.region_latitude Se convirtió en un número de punto flotante
longitude principal.location.region_longitude Se convirtió en un número de punto flotante
req_params additional.fields Se combinó desde about_req_params (derivado de req_params)
as_number additional.fields Se fusionó de about_as_number (se convirtió en cadena de as_number)
x_forwarded_for intermediary.ip Se combina si la IP es válida
x_forwarded_for security_result.about.resource.attribute.labels Se fusionó de x_forwarded_for_label si no es una IP
policy_hit.malicious_user_mitigate_action security_result.detection_fields Se combinó desde malicious_user_label (derivado de policy_hit.malicious_user_mitigate_action)
policy_hit.policy security_result.about.resource.attribute.labels Se combinó de policy_label (derivado de policy_hit.policy)
policy_hit.policy_namespace additional.fields Se combinó desde policy_namespace_label (derivado de policy_hit.policy_namespace)
policy_hit.policy_rule security_result.rule_name Valor copiado directamente
policy_hit.policy_rule_description security_result.description Valor copiado directamente
policy_hit.policy_set target.resource.name Valor copiado directamente
policy_hit.result additional.fields Se combinó de result_label (derivado de policy_hit.result)
vhost_id security_result.detection_fields Se fusionó de vhostlabel (derivado de vhost_id)
messageid security_result.detection_fields Se fusionó de messageid_label (derivado de messageid)
sec_event_name security_result.detection_fields Se fusionó de sec_event_name_label (derivado de sec_event_name)
sec_event_type security_result.detection_fields Se combinó de sec_event_type_label (derivado de sec_event_type)
vh_name security_result.detection_fields Se fusionó de vhost_name_label (derivado de vh_name)
tls_fingerprint security_result.detection_fields Se combinó de tls_fingerprint_label (derivado de tls_fingerprint)
hora additional.fields Se fusionó de time_label (derivado de time)
kubernetes.namespace_name additional.fields Se combinó desde namespace_name_label (derivado de kubernetes.namespace_name)
src_instance additional.fields Se fusionó de src_instance_label (derivado de src_instance)
violation_rating additional.fields Se combinó de violation_rating_label (derivado de violation_rating)
req_size additional.fields Se combinó desde req_size_label (se convirtió en cadena a partir de req_size)
rsp_code additional.fields Se fusionó de rsp_code_label (se convirtió en cadena de rsp_code)
rsp_code_class additional.fields Se fusionó desde rsp_code_class_label (se convirtió en cadena desde rsp_code_class)
rsp_size additional.fields Se fusionó de rsp_size_label (se convirtió en cadena de rsp_size)
original_path additional.fields Se fusionó de original_path_label (derivado de original_path)
req_path target.url Valor copiado directamente
req_headers_size additional.fields Se combinó desde req_headers_size_label (derivado de req_headers_size)
recommended_action additional.fields Se fusionó de recommended_action_label (derivado de recommended_action)
enforcement_mode additional.fields Se combinó de enforcement_mode_label (derivado de enforcement_mode)
src_ip principal.ip, principal.asset.ip Se combina si coincide con la regex de IPv4
host principal.ip, principal.asset.ip Se combina si coincide con la regex de IPv4
Nombre de host principal.hostname, principal.asset.hostname El valor se copia directamente si no está vacío o si es "-".
http_version network.application_protocol_version Valor copiado directamente
http_version network.application_protocol Se establece en HTTP si contiene HTTP y en HTTPS si contiene HTTPS.
red principal.nat_ip Se combina si coincide con la regex de IPv4
dst_ip target.ip, target.asset.ip Se combina si coincide con la regex de IPv4
dst_port target.port Se convirtió a número entero
src_port principal.port Se convirtió a número entero
src_site additional.fields Se combinó desde src_site_field (derivado de src_site)
sitio additional.fields Se combinó desde site_field (derivado de site)
cluster_name additional.fields Se fusionó de cluster_name_field (derivado de cluster_name)
dominio principal.administrative_domain Valor copiado directamente
método network.http.method El valor se copia directamente si no está vacío o es N/A.
espacio de nombres target.namespace Valor copiado directamente
ciudad principal.location.city Valor copiado directamente
transmisión security_result.detection_fields Se fusionó de stream_label (derivado de stream)
región principal.location.country_or_region Valor copiado directamente
usuario principal.user.userid Se extrae del usuario con el patrón de grok para user_id.
user_ip target.ip, target.asset.ip Se combinó a partir de user_ip extraído
Cookie additional.fields Se combinó a partir de la cookie (derivada de la cookie en req_headers)
X-F5-Request-Id security_result.detection_fields Se combinó de x_f5_request_id (derivado de X-F5-Request-Id en req_headers)
X-Request-Id security_result.detection_fields Se combinó desde request_id (derivado de X-Request-Id en req_headers)
security_result security_result Se combinó directamente
has_network, has_principal, has_target metadata.event_type Se establece en NETWORK_CONNECTION si todo es verdadero; STATUS_UPDATE si has_principal es verdadero; de lo contrario, se establece en GENERIC_EVENT.
metadata.vendor_name Se establece en "F5_DCS".
metadata.product_name Se estableció en "F5 DCS".
intermediario intermediario Se combinó directamente

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