Recopila registros de Elastic Auditbeat

Compatible con:

En este documento, se explica cómo transferir registros de Elastic Auditbeat a Google Security Operations con 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. Controla varios tipos de eventos asignando event1.action y otros campos a tipos de eventos de metadatos de UDM específicos, y establece GENERIC_EVENT o categorías más específicas como valores predeterminados cuando es posible.

Antes de comenzar

Asegúrate de cumplir con los siguientes requisitos previos:

  • Es una instancia de Google SecOps.
  • Acceso con privilegios al servidor de Elastic Auditbeat
  • Acceso con privilegios al servidor de Logstash
  • Acceso con privilegios a AWS (S3, Identity and Access Management [IAM]).

Obtén los 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. Ten en cuenta la ubicación del archivo de configuración de Auditbeat (por lo general, /etc/auditbeat/auditbeat.yml).

Configura el bucket de AWS S3 y el IAM para Google SecOps

  1. Crea un bucket de Amazon S3 siguiendo esta guía del usuario: Crea un bucket
  2. Guarda el Nombre y la Región del bucket para futuras referencias (por ejemplo, elastic-auditbeat-logs).
  3. Crea un usuario siguiendo esta guía del usuario: Cómo crear un usuario de IAM.
  4. Selecciona el usuario creado.
  5. Selecciona la pestaña Credenciales de seguridad.
  6. Haz clic en Crear clave de acceso en la sección Claves de acceso.
  7. Selecciona Servicio de terceros como Caso de uso.
  8. Haz clic en Siguiente.
  9. Opcional: Agrega 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 consultarlas en el futuro.
  12. Haz clic en Listo.
  13. Selecciona la pestaña Permisos.
  14. Haz clic en Agregar permisos en la sección Políticas de permisos.
  15. Selecciona Agregar permisos.
  16. Selecciona Adjuntar políticas directamente.
  17. Busca la política AmazonS3FullAccess.
  18. Selecciona la política.
  19. Haz clic en Siguiente.
  20. Haz clic en Agregar permisos.

Configura Auditbeat para que envíe datos a Logstash

  1. Edita el archivo de configuración de Auditbeat /etc/auditbeat/auditbeat.yml.
  2. Comenta cualquier configuración de salida existente (Elasticsearch, etc.).
  3. Agrega 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
    

Configura la canalización de Logstash

  1. Crea un archivo de configuración de canalización de Logstash nuevo /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 
      # }
    }
    
    • Reemplaza YOUR_AWS_ACCESS_KEY_ID y YOUR_AWS_SECRET_ACCESS_KEY por tus credenciales reales de AWS.
    • Actualiza los valores de region y bucket para que coincidan con tu configuración de S3.
    • Inicia o reinicia Logstash:
    sudo systemctl restart logstash
    

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

  1. Ve a Consola de AWS > IAM > Usuarios.
  2. Haz clic en Agregar usuarios.
  3. Proporciona los siguientes detalles de configuración:
    • Usuario: Ingresa secops-reader.
    • Tipo de acceso: Selecciona Clave de acceso: Acceso programático.
  4. Haz clic en Crear usuario.
  5. Adjunta una política de lectura mínima (personalizada): Usuarios > secops-reader > Permisos > Agregar permisos > Adjuntar 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 > Agregar 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 el .CSV. (Pegarás estos valores en el feed).

Configura un feed en Google SecOps para transferir registros de Elastic Auditbeat

  1. Ve a Configuración de SIEM > Feeds.
  2. Haz clic en + Agregar feed nuevo.
  3. En el campo Nombre del feed, ingresa un nombre para el feed (por ejemplo, Elastic Auditbeat Logs).
  4. Selecciona Amazon S3 V2 como el Tipo de fuente.
  5. Selecciona Elastic Audit Beats como el Tipo de registro.
  6. Haz clic en Siguiente.
  7. Especifica valores para los siguientes parámetros de entrada:
    • URI de S3: s3://elastic-auditbeat-logs/auditbeat/
    • 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 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 aplica 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.

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 Tiene el prefijo "agent_id: ".
agent.type observer.application La aplicación de observador se establece en 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 agregó como una etiqueta con la clave "Bytes". Se convirtió en una cadena.
client.ip principal.ip La IP principal se establece en la IP del cliente.
client.packets principal.labels Se agregó como una etiqueta con la clave "Packets". Se convirtió en una cadena.
client.port principal.port El puerto principal se establece en el puerto del cliente. Se convirtió en un número entero.
cloud.availability_zone principal.cloud.availability_zone La zona de disponibilidad de la nube principal se establece en la zona de disponibilidad de la nube.
cloud.instance.id principal.resource.id El ID del recurso principal se establece en el ID de la instancia de Cloud.
cloud.machine.type principal.resource.resource_subtype El subtipo de recurso principal se establece en el tipo de máquina de la nube.
cloud.region principal.cloud.availability_zone Si la región de Cloud está presente, anula la zona de disponibilidad.
destination.bytes target.labels Se agregó como una etiqueta con la clave "Bytes". Se convirtió en una cadena.
destination.ip target.ip La IP de destino se establece en la IP de destino.
destination.packets target.labels Se agregó como una etiqueta con la clave "Packets". Se convirtió en una cadena.
destination.port target.port El puerto de destino se establece en el puerto de destino. Se convirtió 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 agregan a category_details.
event1.duration network.session_duration.seconds Se convirtió en un número entero.
event1.id metadata.product_log_id El ID del registro del producto de metadatos se establece en el ID del evento.
event1.outcome extensions.auth.auth_details Los detalles de autorización se establecen en el resultado del evento.
file.extension target.file.mime_type El tipo de MIME del archivo de destino se establece 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 de acceso completa del archivo de destino se establece en la ruta de acceso.
file.size target.file.size Se convirtió en uinteger.
group.id principal.group.product_object_id El ID del objeto del producto principal del grupo se establece en el ID del grupo.
group.name principal.group.group_display_name El nombre visible del grupo principal se establece como el nombre del grupo.
host.architecture principal.asset.hardware.cpu_platform Se almacena en la variable temporal hardware.cpu_platform y, luego, se combina en principal.asset.hardware.
host.hostname principal.hostname El nombre de host principal se establece en 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 agregan a las IPs de los activos principales.
host.mac principal.mac Los guiones se reemplazan 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 principal de la plataforma se establece en el kernel del SO host.
host.os.version principal.platform_version La versión principal de la plataforma se establece en la versión del SO host. Se almacena en la variable temporal host_os_version.
httpRequest.remoteIp target.ip Si está presente y no se configura ninguna otra IP de destino, se usa este valor.
httpRequest.requestMethod network.http.method El método HTTP de la red se establece en el método de solicitud HTTP.
httpRequest.requestSize network.sent_bytes Se convirtió en uinteger.
httpRequest.requestUrl network.http.referral_url La URL de referencia HTTP de la red se establece en la URL de la solicitud HTTP.
httpRequest.responseSize network.received_bytes Se convirtió en uinteger.
httpRequest.serverIp principal.ip Si está presente y no se configura ninguna otra IP principal, se usa este valor.
httpRequest.status network.http.response_code Se convirtió en un número entero.
httpRequest.userAgent network.http.user_agent El usuario-agente HTTP de la red se establece en el usuario-agente de la solicitud HTTP.
insertId network.session_id El ID de sesión de la red se establece en el ID de inserción.
jsonPayload.@metadata.beat metadata.product_event_type El tipo de evento del producto de metadatos se establece en el beat de metadatos.
jsonPayload.@metadata.version metadata.product_version La versión del producto de los metadatos se establece en la versión de los metadatos.
jsonPayload.destination.ip target.ip Si está presente y no se configura ninguna otra IP de destino, se usa este valor.
jsonPayload.destination.port target.port Si está presente y no se configura ningún otro puerto de destino, se usa este valor. Se convirtió en un número entero.
jsonPayload.event1.category security_result.category_details Todos los valores se agregan a category_details.
jsonPayload.file.path target.file.full_path Si está presente y no se configura 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 establecer la ruta de acceso completa del proceso principal y del objetivo si no hay otro valor presente.
jsonPayload.process.name principal.application Si está presente y no se configuró ninguna otra aplicación principal, se usa este valor.
jsonPayload.process.parent.pid principal.process.pid Si está presente y no se configura ningún otro PID del proceso principal, se usa este valor. Se convirtió en una cadena.
jsonPayload.process.parent.ppid principal.process.parent_process.pid Si está presente y no se configuró ningún otro PID del proceso principal, se usa este valor. Se convirtió en una cadena.
jsonPayload.process.parent.process.executable principal.process.file.full_path Si está presente y no se establece ninguna otra ruta de acceso completa del proceso principal, se usa este valor.
jsonPayload.process.parent.process.exe principal.process.file.full_path Si está presente y no se establece ninguna otra ruta de acceso completa del proceso principal, se usa este valor.
jsonPayload.process.parent.process.title principal.process.command_line Si está presente y no se configura 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 en 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 establece en el título del proceso de la carga útil de JSON.
jsonPayload.user.id target.user.userid Si está presente y no se configura ningún otro ID de usuario objetivo, se usa este valor. Se convirtió en una cadena.
jsonPayload.user.name target.user.user_display_name Si está presente y no se configuró ningún otro nombre visible del usuario objetivo, se usa este valor.
msg metadata.description La descripción de los metadatos se establece en el mensaje.
network.bytes network.sent_bytes Se convirtió en uinteger.
network.community_id network.community_id El ID de comunidad de la red se establece en el ID de comunidad de la red.
network.transport network.ip_protocol Se convirtió a mayúsculas.
package.description security_result.description La descripción del resultado de seguridad se establece en la descripción del paquete.
package.name security_result.rule_name El nombre de la regla del resultado de seguridad se establece en 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 Se convirtió en uinteger.
package.type security_result.about.file.mime_type, security_result.rule_type El tipo de MIME y el tipo de regla del resultado de seguridad se establecen en 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 Comienza con el prefijo "Proceso:".
process.executable principal.process.file.full_path, target.process.file.full_path Se usa para establecer la ruta de acceso completa del proceso principal y del objetivo si no hay otro valor presente.
process.hash.sha1 principal.process.file.sha1 El SHA-1 principal del proceso se establece en el hash SHA-1 del proceso.
process.name principal.application Si está presente y no se configuró ninguna otra aplicación principal, se usa este valor.
process.pid principal.process.pid Si está presente y no se configura ningún otro PID del proceso principal, se usa este valor. Se convirtió en una cadena.
process.ppid principal.process.parent_process.pid Si está presente y no se configuró ningún otro PID del proceso principal, se usa este valor. Se convirtió 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 establece como el nombre del servicio de backend del recurso.
resource.labels.forwarding_rule_name target.resource.attribute.labels Se agregó como una etiqueta con la clave "Nombre de la regla de reenvío".
resource.labels.project_id target.resource.product_object_id El ID del objeto del producto del recurso de destino se establece en el ID del proyecto del recurso.
resource.labels.target_proxy_name target.resource.attribute.labels Se agregó como una etiqueta con la clave "Nombre del proxy de destino".
resource.labels.url_map_name target.resource.attribute.labels Se agregó como una etiqueta con la clave "Nombre del mapa de URL".
server.bytes intermediary.labels Se agregó como una etiqueta con la clave "Bytes". Se convirtió en una cadena.
server.ip intermediary.ip La IP intermedia se establece en la IP del servidor.
server.packets intermediary.labels Se agregó como una etiqueta con la clave "Packets". Se convirtió en una cadena.
server.port intermediary.port El puerto intermediario se establece en el puerto del servidor. Se convirtió en un número entero.
service.type target.application La aplicación de destino se establece en el tipo de servicio.
source.bytes src.labels Se agregó como una etiqueta con la clave "Bytes". Se convirtió en una cadena.
source.ip src.ip La IP de origen se establece en la IP de origen.
source.packets src.labels Se agregó como una etiqueta con la clave "Packets". Se convirtió en una cadena.
source.port src.port El puerto de origen se establece en el puerto de origen. Se convirtió 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 establece en el nombre de host de auditoría del sistema.
system.audit.host.id principal.user.userid El ID de usuario principal se establece en el ID de host de auditoría del sistema.
system.audit.host.mac.0 about.mac La dirección MAC de about se establece en la primera dirección MAC del host de auditoría del sistema.
trace target.process.file.full_path Si está presente y no se establece ninguna otra ruta de acceso completa del proceso de destino, se usa este valor.
user.effective.id target.user.userid Si está presente y no se configura ningún otro ID de usuario objetivo, se usa este valor.
user.effective.name target.user.user_display_name Si está presente y no se configuró ningún otro nombre visible del usuario objetivo, se usa este valor.
user.id target.user.userid Si está presente y no se configura ningún otro ID de usuario objetivo, se usa este valor. Se convirtió en una cadena.
user.name target.user.user_display_name Si está presente y no se configuró ningún otro nombre visible del usuario objetivo, se usa este valor.
N/A metadata.event_type Inicialmente, se establece en "GENERIC_EVENT". Cambió según la lógica que se describe en los comentarios del código del analizador.
N/A metadata.log_type Se debe establecer en "ELASTIC_AUDITBEAT".
N/A metadata.product_name Se debe establecer en "Auditbeat".
N/A metadata.vendor_name Establécelo en "Elástico".
N/A extensions.auth.type Se establece en "AUTHTYPE_UNSPECIFIED" para los eventos USER_LOGIN y USER_LOGOUT.
auditd.data.syscall metadata.product_event_type El tipo de evento de producto de metadatos se establece en la llamada al sistema auditd.

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