Recopila registros de Elastic Auditbeat
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
- Asegúrate de que Elastic Auditbeat esté instalado y configurado en tus servidores.
- Instala Logstash en un servidor dedicado o junto con Auditbeat.
- 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
- Crea un bucket de Amazon S3 siguiendo esta guía del usuario: Crea un bucket
- Guarda el Nombre y la Región del bucket para futuras referencias (por ejemplo,
elastic-auditbeat-logs
). - Crea un usuario siguiendo esta guía del usuario: Cómo crear un usuario de IAM.
- Selecciona el usuario creado.
- Selecciona la pestaña Credenciales de seguridad.
- Haz clic en Crear clave de acceso en la sección Claves de acceso.
- Selecciona Servicio de terceros como Caso de uso.
- Haz clic en Siguiente.
- Opcional: Agrega una etiqueta de descripción.
- Haz clic en Crear clave de acceso.
- Haz clic en Descargar archivo .CSV para guardar la clave de acceso y la clave de acceso secreta para consultarlas en el futuro.
- Haz clic en Listo.
- Selecciona la pestaña Permisos.
- Haz clic en Agregar permisos en la sección Políticas de permisos.
- Selecciona Agregar permisos.
- Selecciona Adjuntar políticas directamente.
- Busca la política AmazonS3FullAccess.
- Selecciona la política.
- Haz clic en Siguiente.
- Haz clic en Agregar permisos.
Configura Auditbeat para que envíe datos a Logstash
- Edita el archivo de configuración de Auditbeat
/etc/auditbeat/auditbeat.yml
. - Comenta cualquier configuración de salida existente (Elasticsearch, etc.).
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"]
Reinicia Auditbeat para aplicar los cambios:
sudo systemctl restart auditbeat
Configura la canalización de Logstash
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
yYOUR_AWS_SECRET_ACCESS_KEY
por tus credenciales reales de AWS. - Actualiza los valores de
region
ybucket
para que coincidan con tu configuración de S3. - Inicia o reinicia Logstash:
sudo systemctl restart logstash
- Reemplaza
(Opcional) Crea un usuario y claves de IAM de solo lectura para Google SecOps
- Ve a Consola de AWS > IAM > Usuarios.
- Haz clic en Agregar usuarios.
- Proporciona los siguientes detalles de configuración:
- Usuario: Ingresa
secops-reader
. - Tipo de acceso: Selecciona Clave de acceso: Acceso programático.
- Usuario: Ingresa
- Haz clic en Crear usuario.
- Adjunta una política de lectura mínima (personalizada): Usuarios > secops-reader > Permisos > Agregar permisos > Adjuntar políticas directamente > Crear política.
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" } ] }
Nombre =
secops-reader-policy
.Haz clic en Crear política > busca o selecciona > Siguiente > Agregar permisos.
Crea una clave de acceso para
secops-reader
: Credenciales de seguridad > Claves de acceso.Haz clic en Crear clave de acceso.
Descarga el
.CSV
. (Pegarás estos valores en el feed).
Configura un feed en Google SecOps para transferir registros de Elastic Auditbeat
- Ve a Configuración de SIEM > Feeds.
- Haz clic en + Agregar feed nuevo.
- En el campo Nombre del feed, ingresa un nombre para el feed (por ejemplo,
Elastic Auditbeat Logs
). - Selecciona Amazon S3 V2 como el Tipo de fuente.
- Selecciona Elastic Audit Beats como el Tipo de registro.
- Haz clic en Siguiente.
- 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.
- URI de S3:
- Haz clic en Siguiente.
- 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.