Recopila registros de los servicios de F5 Distributed Cloud

Versión del analizador: 6.0

Se admite en los siguientes sistemas operativos:

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 administración de aplicaciones, redes y seguridad 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 de múltiples nubes y perimetrales.

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 de receptor de registros global en F5 Distributed Cloud

Crea 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:

    Parámetro de 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 (regional, birregional o 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 acceso al proyecto a esta cuenta de servicio, haz lo siguiente:

    1. Haz clic en Selecciona un rol.
    2. Busca y selecciona Administrador de objetos de Storage.
  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 claves JSON se descargará en tu computadora.
  7. Guarda este archivo de forma segura. La necesitarás en los siguientes 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 entidades: 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 Storage.
  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 Cloud.
  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 Tipo de credenciales de Cloud, selecciona Credenciales de GCP.
  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 claves 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 Log Type, selecciona los tipos de registros 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 anteriormente (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).
    • Batch Bytes: Selecciona Max Bytes 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 gzip comprimidos 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 del registro.

Recupera la cuenta de servicio de Google SecOps

Google SecOps usa 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 Add New Feed.
  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 eliminación del código fuente: Selecciona la opción de eliminación 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 que se transfirieron correctamente.
      • Borrar los archivos transferidos y los directorios vacíos: Borra los archivos y los directorios vacíos después de que se transfirieron correctamente.

    • Antigüedad máxima del archivo: Incluye los archivos modificados en la cantidad de días especificada (el valor predeterminado es 180 días).

    • Espacio de nombres del recurso: Es el espacio de nombres del recurso.

    • Etiquetas de transferencia: 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 Storage 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 entidades: 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 El valor se copió directamente.
src principal.namespace El valor se copió directamente.
kubernetes_labels_app target.resource.attribute.labels Se fusionó de app_label (derivado de kubernetes_labels_app)
kubernetes_host target.hostname El valor se copió directamente.
kubernetes_container_name target.resource.product_object_id El valor se copió directamente.
bot_info.classification security_result.detection_fields Se combinó desde bot_info_classification_label (derivado de bot_info.classification)
bot_info.name security_result.detection_fields Se combinó de 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 RFC 3339, UNIX y ISO8601.
visitor_id security_result.detection_fields Se fusionó de visitor_id_label (derivado de visitor_id)
etiqueta security_result.detection_fields Se combinó a partir de 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 El valor se copió directamente.
api_endpoint target.labels Se fusionó de api_endpoint_label (derivado de api_endpoint)
app_firewall_name principal.process.command_line El valor se copió 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 fusionó de policy_namespace_label (derivado de policy_hit.policy_namespace)
policy_hit.policy_rule security_result.rule_name El valor se copió directamente.
policy_hit.policy_rule_description security_result.description El valor se copió directamente.
policy_hit.policy_set target.resource.name El valor se copió 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 combinó 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 combinó desde vhost_name_label (derivado de vh_name)
tls_fingerprint security_result.detection_fields Se combinó desde tls_fingerprint_label (derivado de tls_fingerprint)
hora additional.fields Se fusionó de time_label (derivado de time)
kubernetes.namespace_name additional.fields Se fusionó de namespace_name_label (derivado de kubernetes.namespace_name)
src_instance additional.fields Se combinó de src_instance_label (derivado de src_instance)
violation_rating additional.fields Se combinó a partir de violation_rating_label (derivado de violation_rating)
req_size additional.fields Se fusionó desde req_size_label (se convirtió en cadena desde req_size)
rsp_code additional.fields Se combinó desde rsp_code_label (se convirtió en cadena a partir de rsp_code)
rsp_code_class additional.fields Se fusionó de rsp_code_class_label (se convirtió en cadena de rsp_code_class)
rsp_size additional.fields Se combinó desde rsp_size_label (se convirtió en cadena desde rsp_size)
original_path additional.fields Se fusionó desde original_path_label (derivado de original_path)
req_path target.url El valor se copió 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 expresión regular de IPv4
host principal.ip, principal.asset.ip Se combina si coincide con la expresión regular de IPv4
Nombre de host principal.hostname, principal.asset.hostname El valor se copia directamente si no está vacío o si es un guion.
http_version network.application_protocol_version El valor se copió 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 expresión regular de IPv4
dst_ip target.ip, target.asset.ip Se combina si coincide con la expresión regular de IPv4
dst_port target.port Se convirtió en un número entero
src_port principal.port Se convirtió en un número entero
src_site additional.fields Se combinó desde src_site_field (derivado de src_site)
sitio additional.fields Se combinó de site_field (derivado de site)
cluster_name additional.fields Se fusionó de cluster_name_field (derivado de cluster_name)
dominio principal.administrative_domain El valor se copió 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 El valor se copió directamente.
ciudad principal.location.city El valor se copió directamente.
transmisión security_result.detection_fields Se fusionó de stream_label (derivado de stream)
región principal.location.country_or_region El valor se copió directamente.
usuario principal.user.userid Se extrajo 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 fusionó a partir de la cookie (derivada de 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; en STATUS_UPDATE si has_principal es verdadero; de lo contrario, en GENERIC_EVENT.
metadata.vendor_name Se establece en "F5_DCS".
metadata.product_name Se estableció en "F5 DCS".
intermediario intermediario Se combinó directamente
rsp_size event.idm.read_only_udm.network.received_bytes Se asignó desde el registro de cambios
dst event.idm.read_only_udm.target.ip y event.idm.read_only_udm.target.asset.ip Se asignó desde el registro de cambios
has_sec_event event.idm.read_only_udm.additional.fields Se asignó desde el registro de cambios
app event.idm.read_only_udm.target.application Se asignó desde el registro de cambios
node_id event.idm.read_only_udm.additional.fields Se asignó desde el registro de cambios
sample_rate event.idm.read_only_udm.additional.fields Se asignó desde el registro de cambios
time_to_first_downstream_tx_byte event.idm.read_only_udm.additional.fields Se asignó desde el registro de cambios
time_to_first_upstream_rx_byte event.idm.read_only_udm.additional.fields Se asignó desde el registro de cambios
time_to_first_upstream_tx_byte event.idm.read_only_udm.additional.fields Se asignó desde el registro de cambios
time_to_last_downstream_tx_byte event.idm.read_only_udm.additional.fields Se asignó desde el registro de cambios
time_to_last_rx_byte event.idm.read_only_udm.additional.fields Se asignó desde el registro de cambios
time_to_last_upstream_rx_byte event.idm.read_only_udm.additional.fields Se asignó desde el registro de cambios
time_to_last_upstream_tx_byte event.idm.read_only_udm.additional.fields Se asignó desde el registro de cambios
timeseries_enabled event.idm.read_only_udm.additional.fields Se asignó desde el registro de cambios
sni event.idm.read_only_udm.additional.fields Se asignó desde el registro de cambios
terminated_time event.idm.read_only_udm.additional.fields Se asignó desde el registro de cambios
rtt_downstream_seconds event.idm.read_only_udm.additional.fields Se asignó desde el registro de cambios
rtt_upstream_seconds event.idm.read_only_udm.additional.fields Se asignó desde el registro de cambios
rsp_code_details event.idm.read_only_udm.additional.fields Se asignó desde el registro de cambios
authority event.idm.read_only_udm.additional.fields Se asignó desde el registro de cambios
connected_time event.idm.read_only_udm.additional.fields Se asignó desde el registro de cambios
req_id event.idm.read_only_udm.additional.fields Se asignó desde el registro de cambios
proxy_type event.idm.read_only_udm.additional.fields Se asignó desde el registro de cambios
vh_type event.idm.read_only_udm.additional.fields Se asignó desde el registro de cambios
dst_instance event.idm.read_only_udm.additional.fields Se asignó desde el registro de cambios
lb_port event.idm.read_only_udm.additional.fields Se asignó desde el registro de cambios
mtls event.idm.read_only_udm.additional.fields Se asignó desde el registro de cambios
ja4_tls_fingerprint event.idm.read_only_udm.additional.fields Se asignó desde el registro de cambios
duration_with_data_tx_delay event.idm.read_only_udm.additional.fields Se asignó desde el registro de cambios
dst_site event.idm.read_only_udm.additional.fields Se asignó desde el registro de cambios
protocol and scheme event.idm.read_only_udm.network.application_protocol Se asignó desde el registro de cambios
referer event.idm.read_only_udm.network.http.referral_url Se asignó desde el registro de cambios
tls_cipher_suite event.idm.read_only_udm.network.tls.cipher Se asignó desde el registro de cambios
tls_version event.idm.read_only_udm.network.tls.version Se asignó desde el registro de cambios
user_agent event.idm.read_only_udm.network.http.user_agent Se asignó desde el registro de cambios
user_agent event.idm.read_only_udm.network.http.parsed_user_agent Se asignó desde el registro de cambios
browser_type event.idm.read_only_udm.principal.browser.browser_type Se asignó desde el registro de cambios
content-type event.idm.read_only_udm.principal.process.file.mime_type Se asignó desde el registro de cambios
response_flags security_result.detection_fields Se asignó desde el registro de cambios
original_authority event.idm.read_only_udm.target.administrative_domain Se asignó desde el registro de cambios
country event.idm.read_only_udm.principal.location.country_or_region Se asignó desde el registro de cambios

Registro de cambios

Consulta el registro de cambios de este analizador

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