Recopilar registros de Elastic Auditbeat

Disponible en:

En este documento se explica cómo ingerir registros de Elastic Auditbeat en Google Security Operations mediante Amazon S3. El analizador extrae campos de los registros JSON, los normaliza en el modelo de datos unificado (UDM) y enriquece los datos con contexto adicional, como información del host, detalles de la red y clasificaciones de resultados de seguridad. Gestiona varios tipos de eventos asignando event1.action y otros campos a tipos de eventos de metadatos de UDM específicos. De forma predeterminada, se asignan a GENERIC_EVENT o a categorías más específicas cuando es posible.

Antes de empezar

Asegúrate de que cumples los siguientes requisitos previos:

  • Una instancia de Google SecOps.
  • Acceso privilegiado al servidor Elastic Auditbeat.
  • Acceso privilegiado al servidor Logstash.
  • Acceso privilegiado a AWS (S3, gestión de identidades y accesos [IAM]).

Requisitos previos de Elastic Auditbeat

  1. Asegúrate de que Elastic Auditbeat esté instalado y configurado en tus servidores.
  2. Instala Logstash en un servidor dedicado o junto con Auditbeat.
  3. Anota la ubicación del archivo de configuración de Auditbeat (normalmente, /etc/auditbeat/auditbeat.yml).

Configurar un segmento de AWS S3 y IAM para Google SecOps

  1. Crea un segmento de Amazon S3 siguiendo esta guía de usuario: Crear un segmento.
  2. Guarda el nombre y la región del segmento para consultarlos más adelante (por ejemplo, elastic-auditbeat-logs).
  3. Crea un usuario siguiendo esta guía: Crear un usuario de gestión de identidades y accesos.
  4. Selecciona el Usuario creado.
  5. Selecciona la pestaña Credenciales de seguridad.
  6. En la sección Claves de acceso, haz clic en Crear clave de acceso.
  7. Selecciona Servicio de terceros en Caso práctico.
  8. Haz clic en Siguiente.
  9. Opcional: añade una etiqueta de descripción.
  10. Haz clic en Crear clave de acceso.
  11. Haz clic en Descargar archivo .CSV para guardar la clave de acceso y la clave de acceso secreta para futuras consultas.
  12. Haz clic en Listo.
  13. Selecciona la pestaña Permisos.
  14. En la sección Políticas de permisos, haz clic en Añadir permisos.
  15. Selecciona Añadir permisos.
  16. Seleccione Adjuntar políticas directamente.
  17. Busca la política AmazonS3FullAccess.
  18. Selecciona la política.
  19. Haz clic en Siguiente.
  20. Haz clic en Añadir permisos.

Configurar Auditbeat para enviar datos a Logstash

  1. Edita el archivo de configuración de Auditbeat /etc/auditbeat/auditbeat.yml.
  2. Comenta cualquier configuración de salida que ya tengas (Elasticsearch, etc.).
  3. Añade la configuración de salida de Logstash:

    # ==================== Outputs ====================
    output.logstash:
      hosts: ["localhost:5044"]
      # If Logstash is on a different server, use its IP/hostname
      # hosts: ["logstash-server:5044"]
    
      # Optional: Enable load balancing if using multiple Logstash instances
      loadbalance: true
    
      # Optional: Configure bulk settings (default is 2048)
      bulk_max_size: 2048
    
      # Optional: Configure SSL if needed
      # ssl.enabled: true
      # ssl.certificate_authorities: ["/path/to/ca.crt"]
    
  4. Reinicia Auditbeat para aplicar los cambios:

    sudo systemctl restart auditbeat
    

Configurar la canalización de Logstash

  1. Crea un archivo de configuración de canalización de Logstash /etc/logstash/conf.d/auditbeat-to-s3.conf:

    input {
      beats {
        port => 5044
        # Optional: Configure SSL
        # ssl => true
        # ssl_certificate => "/path/to/server.crt"
        # ssl_key => "/path/to/server.key"
      }
    }
    
    filter {
      # Add any necessary transformations here
      # The data should remain in raw JSON format for Chronicle parsing
    
      # Optional: Add metadata for debugging
      mutate {
        add_field => { "[@metadata][pipeline]" => "auditbeat-to-s3" }
      }
    }
    
    output {
      s3 {
        # AWS credentials
        access_key_id => "YOUR_AWS_ACCESS_KEY_ID"
        secret_access_key => "YOUR_AWS_SECRET_ACCESS_KEY"
    
        # S3 bucket configuration
        region => "us-east-1"  # Replace with your bucket region
        bucket => "elastic-auditbeat-logs"  # Replace with your bucket name
    
        # Organize logs by date using Logstash timestamp interpolation
        prefix => "auditbeat/%{+YYYY}/%{+MM}/%{+dd}/"
    
        # File rotation settings
        size_file => 10485760  # 10MB files
        time_file => 5  # Rotate every 5 minutes
    
        # Compression for cost optimization
        encoding => "gzip"
    
        # Output format - keep as JSON for Chronicle
        codec => "json_lines"
    
        # Optional: Server-side encryption
        # server_side_encryption => true
        # server_side_encryption_algorithm => "AES256"
      }
    
      # Optional: Keep a local copy for debugging
      # stdout { 
      #   codec => rubydebug 
      # }
    }
    
    • Sustituye YOUR_AWS_ACCESS_KEY_ID y YOUR_AWS_SECRET_ACCESS_KEY por tus credenciales de AWS.
    • Actualice los valores de region y bucket para que coincidan con su configuración de S3.
    • Inicia o reinicia Logstash:
    sudo systemctl restart logstash
    

(Opcional) Crear un usuario y claves de IAM de solo lectura para Google SecOps

  1. Ve a Consola de AWS > IAM > Usuarios.
  2. Haz clic en Add users (Añadir usuarios).
  3. Proporcione los siguientes detalles de configuración:
    • Usuario: introduce secops-reader.
    • Tipo de acceso: selecciona Clave de acceso – Acceso programático.
  4. Haz clic en Crear usuario.
  5. Asigna una política de lectura mínima (personalizada): Usuarios > secops-reader > Permisos > Añadir permisos > Asignar políticas directamente > Crear política.
  6. JSON:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": ["s3:GetObject"],
          "Resource": "arn:aws:s3:::elastic-auditbeat-logs/*"
        },
        {
          "Effect": "Allow",
          "Action": ["s3:ListBucket"],
          "Resource": "arn:aws:s3:::elastic-auditbeat-logs"
        }
      ]
    }
    
  7. Nombre = secops-reader-policy.

  8. Haz clic en Crear política > busca o selecciona > Siguiente > Añadir permisos.

  9. Crea una clave de acceso para secops-reader: Credenciales de seguridad > Claves de acceso.

  10. Haz clic en Crear clave de acceso.

  11. Descarga la .CSV. (Estos valores se pegarán en el feed).

Configurar un feed en Google SecOps para ingerir registros de Elastic Auditbeat

  1. Ve a Configuración de SIEM > Feeds.
  2. Haz clic en + Añadir nuevo feed.
  3. En el campo Nombre del feed, introduce un nombre para el feed (por ejemplo, Elastic Auditbeat Logs).
  4. Selecciona Amazon S3 V2 como Tipo de fuente.
  5. Seleccione Elastic Audit Beats como Tipo de registro.
  6. Haz clic en Siguiente.
  7. Especifique los valores de los siguientes parámetros de entrada:
    • URI de S3: s3://elastic-auditbeat-logs/auditbeat/
    • Opciones de eliminación de la fuente: selecciona la opción de eliminación que prefieras.
    • Antigüedad máxima del archivo: incluye los archivos modificados en los últimos días. El valor predeterminado es 180 días.
    • ID de clave de acceso: clave de acceso de usuario con acceso al bucket de S3.
    • Clave de acceso secreta: clave secreta del usuario con acceso al bucket de S3.
    • Espacio de nombres de recursos: el espacio de nombres de recursos.
    • Etiquetas de ingestión: la etiqueta aplicada a los eventos de este feed.
  8. Haz clic en Siguiente.
  9. Revise la configuración de la nueva fuente en la pantalla Finalizar y, a continuación, haga clic en Enviar.

Tabla de asignación de UDM

Campo de registro Asignación de UDM Lógica
@timestamp metadata.event_timestamp La marca de tiempo del evento se analiza a partir del campo @timestamp.
agent.id observer.asset_id Prefijado con "agent_id: ".
agent.type observer.application La aplicación observadora se define como el tipo de agente.
agent.version observer.platform_version La versión de la plataforma del observador se establece en la versión del agente.
client.bytes principal.labels Se ha añadido como etiqueta con la clave "Bytes". Se ha convertido en una cadena.
client.ip principal.ip La IP principal se define como la IP del cliente.
client.packets principal.labels Se ha añadido como etiqueta con la clave "Paquetes". Se ha convertido en una cadena.
client.port principal.port El puerto principal se define como el puerto del cliente. Se ha convertido en un número entero.
cloud.availability_zone principal.cloud.availability_zone La zona de disponibilidad de la nube principal se define como la zona de disponibilidad de la nube.
cloud.instance.id principal.resource.id El ID de recurso principal se define como el ID de instancia de la nube.
cloud.machine.type principal.resource.resource_subtype El subtipo de recurso principal se define como el tipo de máquina en la nube.
cloud.region principal.cloud.availability_zone Si se indica una región en la nube, se anula la zona de disponibilidad.
destination.bytes target.labels Se ha añadido como etiqueta con la clave "Bytes". Se ha convertido en una cadena.
destination.ip target.ip La IP de destino se asigna a la IP de destino.
destination.packets target.labels Se ha añadido como etiqueta con la clave "Paquetes". Se ha convertido en una cadena.
destination.port target.port El puerto de destino se define como el puerto de destino. Se ha convertido en un número entero.
ecs.version metadata.product_version Si está presente, anula el valor de jsonPayload.@metadata.version.
event1.category security_result.category_details Todos los valores se añaden a category_details.
event1.duration network.session_duration.seconds Se ha convertido en un número entero.
event1.id metadata.product_log_id El ID de registro del producto de metadatos se define como el ID de evento.
event1.outcome extensions.auth.auth_details Los detalles de autenticación se asignan al resultado del evento.
file.extension target.file.mime_type El tipo MIME del archivo de destino se define en la extensión del archivo.
file.hash.sha1 target.file.sha1 El SHA-1 del archivo de destino se establece en el hash SHA-1 del archivo.
file.path target.file.full_path La ruta completa del archivo de destino se define como la ruta.
file.size target.file.size Convertida a uinteger.
group.id principal.group.product_object_id El ID del objeto de producto del grupo principal se define como el ID del grupo.
group.name principal.group.group_display_name El nombre visible del grupo principal se asigna al nombre del grupo.
host.architecture principal.asset.hardware.cpu_platform Se almacena en la variable temporal hardware.cpu_platform y, a continuación, se combina con principal.asset.hardware.
host.hostname principal.hostname El nombre de host principal se define como el nombre de host del host.
host.id principal.asset.asset_id Tiene el prefijo "ID de host: ".
host.ip principal.asset.ip Todos los valores se añaden a las IPs del recurso principal.
host.mac principal.mac Los guiones se sustituyen por dos puntos.
host.name principal.hostname, observer.hostname Si está presente, anula el valor de host.hostname.
host.os.kernel principal.platform_patch_level El nivel de parche de la plataforma principal se establece en el kernel del sistema operativo host.
host.os.version principal.platform_version La versión principal de la plataforma se establece en la versión del SO del host. Se almacena en la variable temporal host_os_version.
httpRequest.remoteIp target.ip Si está presente y no se ha definido ninguna otra IP de destino, se usará este valor.
httpRequest.requestMethod network.http.method El método HTTP de la red se define como el método de solicitud HTTP.
httpRequest.requestSize network.sent_bytes Convertida a uinteger.
httpRequest.requestUrl network.http.referral_url La URL referente HTTP de la red se define como la URL de la solicitud HTTP.
httpRequest.responseSize network.received_bytes Convertida a uinteger.
httpRequest.serverIp principal.ip Si está presente y no se ha definido ninguna otra IP principal, se usa este valor.
httpRequest.status network.http.response_code Se ha convertido en un número entero.
httpRequest.userAgent network.http.user_agent El user-agent HTTP de la red se define como el user-agent de la solicitud HTTP.
insertId network.session_id El ID de sesión de la red se define como el ID de inserción.
jsonPayload.@metadata.beat metadata.product_event_type El tipo de evento de producto de metadatos se define como el latido de los metadatos.
jsonPayload.@metadata.version metadata.product_version La versión del producto de metadatos se establece en la versión de los metadatos.
jsonPayload.destination.ip target.ip Si está presente y no se ha definido ninguna otra IP de destino, se usará este valor.
jsonPayload.destination.port target.port Si está presente y no se ha definido ningún otro puerto de destino, se usa este valor. Se ha convertido en un número entero.
jsonPayload.event1.category security_result.category_details Todos los valores se añaden a category_details.
jsonPayload.file.path target.file.full_path Si está presente y no se ha definido ninguna otra ruta de destino, se usa este valor.
jsonPayload.process.executable principal.process.file.full_path, target.process.file.full_path Se usa para definir la ruta completa del proceso principal y del proceso de destino si no hay ningún otro valor.
jsonPayload.process.name principal.application Si está presente y no se ha definido ninguna otra aplicación principal, se usa este valor.
jsonPayload.process.parent.pid principal.process.pid Si está presente y no se ha definido ningún otro PID de proceso principal, se usa este valor. Se ha convertido en una cadena.
jsonPayload.process.parent.ppid principal.process.parent_process.pid Si está presente y no se ha definido ningún otro PID de proceso principal, se usa este valor. Se ha convertido en una cadena.
jsonPayload.process.parent.process.executable principal.process.file.full_path Si está presente y no se ha definido ninguna otra ruta completa del proceso principal, se usa este valor.
jsonPayload.process.parent.process.exe principal.process.file.full_path Si está presente y no se ha definido ninguna otra ruta completa del proceso principal, se usa este valor.
jsonPayload.process.parent.process.title principal.process.command_line Si está presente y no se ha definido ninguna otra línea de comandos del proceso principal, se usa este valor.
jsonPayload.process.pid target.process.pid El PID del proceso de destino se establece como el PID del proceso de la carga útil JSON.
jsonPayload.process.title target.process.command_line La línea de comandos del proceso de destino se define como el título del proceso de la carga útil de JSON.
jsonPayload.user.id target.user.userid Si está presente y no se ha definido ningún otro ID de usuario de destino, se usa este valor. Se ha convertido en una cadena.
jsonPayload.user.name target.user.user_display_name Si está presente y no se ha definido ningún otro nombre visible de usuario de destino, se usará este valor.
msg metadata.description La descripción de los metadatos se asigna al mensaje.
network.bytes network.sent_bytes Convertida a uinteger.
network.community_id network.community_id El ID de comunidad de la red se define como el ID de comunidad de la red.
network.transport network.ip_protocol Se ha convertido a mayúsculas.
package.description security_result.description La descripción del resultado de seguridad se corresponde con la descripción del paquete.
package.name security_result.rule_name El nombre de la regla de resultados de seguridad es el nombre del paquete.
package.reference security_result.about.url La URL del resultado de seguridad se establece en la referencia del paquete.
package.size security_result.about.file.size Convertida a uinteger.
package.type security_result.about.file.mime_type, security_result.rule_type El tipo de MIME del resultado de seguridad y el tipo de regla se definen como el tipo de paquete.
process.created principal.asset.creation_time Si está presente, se usa este valor. Se analiza como ISO8601.
process.entity_id principal.process.product_specific_process_id Empieza por "Process:".
process.executable principal.process.file.full_path, target.process.file.full_path Se usa para definir la ruta completa del proceso principal y del proceso de destino si no hay ningún otro valor.
process.hash.sha1 principal.process.file.sha1 El SHA-1 principal se define como el hash SHA-1 del proceso.
process.name principal.application Si está presente y no se ha definido ninguna otra aplicación principal, se usa este valor.
process.pid principal.process.pid Si está presente y no se ha definido ningún otro PID de proceso principal, se usa este valor. Se ha convertido en una cadena.
process.ppid principal.process.parent_process.pid Si está presente y no se ha definido ningún otro PID de proceso principal, se usa este valor. Se ha convertido en una cadena.
process.start principal.asset.creation_time Si process.created no está presente y este campo sí, se usa este valor. Se analiza como ISO8601.
resource.labels.backend_service_name target.resource.name El nombre del recurso de destino se asigna al nombre del servicio backend del recurso.
resource.labels.forwarding_rule_name target.resource.attribute.labels Se ha añadido como etiqueta con la clave "Forwarding rule name".
resource.labels.project_id target.resource.product_object_id El ID de objeto de producto del recurso de destino se establece como el ID de proyecto del recurso.
resource.labels.target_proxy_name target.resource.attribute.labels Se ha añadido como etiqueta con la clave "Target proxy name".
resource.labels.url_map_name target.resource.attribute.labels Se ha añadido como etiqueta con la clave "URL map name".
server.bytes intermediary.labels Se ha añadido como etiqueta con la clave "Bytes". Se ha convertido en una cadena.
server.ip intermediary.ip La IP intermediaria se establece como la IP del servidor.
server.packets intermediary.labels Se ha añadido como etiqueta con la clave "Paquetes". Se ha convertido en una cadena.
server.port intermediary.port El puerto intermediario se define como el puerto del servidor. Se ha convertido en un número entero.
service.type target.application La aplicación de destino se define como el tipo de servicio.
source.bytes src.labels Se ha añadido como etiqueta con la clave "Bytes". Se ha convertido en una cadena.
source.ip src.ip La IP de origen se define como la IP de origen.
source.packets src.labels Se ha añadido como etiqueta con la clave "Paquetes". Se ha convertido en una cadena.
source.port src.port El puerto de origen se define como el puerto de origen. Se ha convertido en un número entero.
system.audit.host.boottime about.asset.last_boot_time Se analiza como ISO8601.
system.audit.host.hostname about.hostname El nombre de host de about se define como el nombre de host de auditoría del sistema.
system.audit.host.id principal.user.userid El ID de usuario principal se asigna al ID de host de auditoría del sistema.
system.audit.host.mac.0 about.mac La dirección MAC de información se define como la primera dirección MAC del host de auditoría del sistema.
trace target.process.file.full_path Si está presente y no se ha definido ninguna otra ruta completa del proceso de destino, se usa este valor.
user.effective.id target.user.userid Si está presente y no se ha definido ningún otro ID de usuario de destino, se usa este valor.
user.effective.name target.user.user_display_name Si está presente y no se ha definido ningún otro nombre visible de usuario de destino, se usará este valor.
user.id target.user.userid Si está presente y no se ha definido ningún otro ID de usuario de destino, se usa este valor. Se ha convertido en una cadena.
user.name target.user.user_display_name Si está presente y no se ha definido ningún otro nombre visible de usuario de destino, se usará este valor.
N/A metadata.event_type Se define como "GENERIC_EVENT" inicialmente. Se ha cambiado en función de la lógica descrita en los comentarios del código del analizador.
N/A metadata.log_type Se ha definido como "ELASTIC_AUDITBEAT".
N/A metadata.product_name Selecciona "Auditbeat".
N/A metadata.vendor_name Selecciona "Elástico".
N/A extensions.auth.type Se asigna el valor "AUTHTYPE_UNSPECIFIED" a los eventos USER_LOGIN y USER_LOGOUT.
auditd.data.syscall metadata.product_event_type El tipo de evento de producto de metadatos se define como la llamada al sistema auditd.

¿Necesitas más ayuda? Recibe respuestas de los miembros de la comunidad y de los profesionales de Google SecOps.