Recopila registros de Ansible AWX
Descripción general
Este analizador extrae datos de registro con formato JSON de Ansible AWX y los convierte en el modelo de datos unificado (UDM). Maneja varios formatos de registro, extrae campos relevantes, como marcas de tiempo, direcciones IP, información del host y detalles del evento, y los asigna a los campos correspondientes del UDM. También controla casos extremos específicos y enriquece los datos con etiquetas y metadatos.
Antes de comenzar
Asegúrate de cumplir con los siguientes requisitos previos:
- Instancia de Google SecOps.
- Acceso con privilegios a Ansible AWX
Configura feeds
Existen dos puntos de entrada diferentes para configurar feeds en la plataforma de Google SecOps:
- Configuración de SIEM > Feeds
- Centro de contenido > Paquetes de contenido
Configura feeds en Configuración del SIEM > Feeds
Para configurar un feed, sigue estos pasos:
- Ve a Configuración del SIEM > Feeds.
- Haz clic en Agregar feed nuevo.
- En la siguiente página, haz clic en Configurar un solo feed.
- En el campo Nombre del feed, ingresa un nombre para el feed (por ejemplo, Registros de Ansible AWX).
- Selecciona Webhook como el Tipo de origen.
- Selecciona Ansible AWX como el Tipo de registro.
- Haz clic en Siguiente.
- Opcional: Especifica valores para los siguientes parámetros de entrada:
- Delimitador de división: Es el delimitador que se usa para separar las líneas de registro, como
\n
.
- Delimitador de división: Es el delimitador que se usa para separar las líneas de registro, como
- Haz clic en Siguiente.
- Revisa la configuración del feed en la pantalla Finalizar y, luego, haz clic en Enviar.
- Haz clic en Generar clave secreta para generar una clave secreta que autentique este feed.
- Copia y almacena la clave secreta. No podrás volver a ver esta clave secreta. Si es necesario, puedes regenerar una clave secreta nueva, pero esta acción hace que la clave secreta anterior quede obsoleta.
- En la pestaña Detalles, copia la URL del extremo del feed del campo Información del extremo. Debes especificar esta URL de extremo en tu aplicación cliente.
- Haz clic en Listo.
Configura feeds desde el Centro de contenido
Especifica valores para los siguientes campos:
- Delimitador de división: Es el delimitador que se usa para separar las líneas de registro, como
\n
.
Opciones avanzadas
- Nombre del feed: Es un valor completado previamente que identifica el feed.
- Tipo de fuente: Es el método que se usa para recopilar registros en Google SecOps.
- Espacio de nombres del activo: Es el espacio de nombres asociado con el feed.
Etiquetas de transferencia: Son las etiquetas que se aplican a todos los eventos de este feed.
Haz clic en Generar clave secreta para generar una clave secreta que autentique este feed.
Copia y almacena la clave secreta. No podrás volver a ver esta clave secreta. Si es necesario, puedes regenerar una clave secreta nueva, pero esta acción hace que la clave secreta anterior quede obsoleta.
En la pestaña Detalles, copia la URL del extremo del feed del campo Información del extremo. Debes especificar esta URL de extremo en tu aplicación cliente.
Crea una clave de API para el feed del webhook
Ve a Google Cloud consola > Credenciales.
Haz clic en Crear credenciales y selecciona Clave de API.
Restringe el acceso a la clave de API a la API de Google Security Operations.
Especifica la URL del extremo
- En tu aplicación cliente, especifica la URL del extremo HTTPS que se proporciona en el feed de webhook.
Para habilitar la autenticación, especifica la clave de API y la clave secreta como parte del encabezado personalizado con el siguiente formato:
X-goog-api-key = API_KEY X-Webhook-Access-Key = SECRET
Recomendación: Especifica la clave de API como un encabezado en lugar de hacerlo en la URL. Si tu cliente de webhook no admite encabezados personalizados, puedes especificar la clave de API y la clave secreta con parámetros de búsqueda en el siguiente formato:
ENDPOINT_URL?key=API_KEY&secret=SECRET
Reemplaza lo siguiente:
ENDPOINT_URL
: Es la URL del extremo del feed.API_KEY
: Es la clave de API para autenticarse en Google Security Operations.SECRET
: Es la clave secreta que generaste para autenticar el feed.
Configura el webhook en Ansible AWX
- Accede a tu instancia de AWX.
- Ve a la sección Notificaciones, que se encuentra en Administración.
- Haz clic en Agregar.
Configura los parámetros del webhook:
- Nombre: Proporciona un nombre descriptivo para el webhook (por ejemplo, Webhook de Google SecOps).
- Tipo: Selecciona Webhook en la lista.
- URL de destino: Ingresa la URL del extremo de API de Google SecOps.
- Método HTTP: Selecciona POST.
Opcional: Encabezados HTTP: Agrega los encabezados necesarios para la autenticación o el tipo de contenido. Por ejemplo, es posible que debas incluir un encabezado
Authorization
con un token de portador. Consulta la documentación de SecOps de Google para conocer los requisitos específicos de los encabezados.Haz clic en Guardar para crear el webhook.
Ve a Proyectos, que se encuentra en Recursos.
Selecciona los proyectos con los que deseas asociar el webhook.
En el proyecto seleccionado, ve a la pestaña Notificaciones.
Selecciona los activadores que deseas ACTIVAR para la notificación de webhook que creaste antes Start | Success | Failure.
Ahora, las notificaciones se aplicarán a todas las plantillas asociadas con el proyecto. Puedes inhabilitarlas de forma manual. Para ello, navega al campo Notificaciones en cada plantilla.
Tabla de asignación de UDM
Campo de registro | Asignación de UDM | Lógica |
---|---|---|
agent.ephemeral_id |
observer.labels.value |
Es el valor de agent.ephemeral_id del registro sin procesar. |
agent.hostname |
observer.hostname |
Es el valor de agent.hostname del registro sin procesar. |
agent.id |
observer.asset_id |
Es la concatenación de "filebeat:" y el valor de agent.id del registro sin procesar. |
agent.name |
observer.user.userid |
Es el valor de agent.name del registro sin procesar. |
agent.type |
observer.application |
Es el valor de agent.type del registro sin procesar. |
agent.version |
observer.platform_version |
Es el valor de agent.version del registro sin procesar. |
cloud.availability_zone |
principal.resource.attribute.labels.value |
Es el valor de cloud.availability_zone del registro sin procesar. |
cloud.instance.id |
principal.resource.product_object_id |
Es el valor de cloud.instance.id del registro sin procesar. |
cloud.instance.name |
principal.resource.name |
Es el valor de cloud.instance.name del registro sin procesar. |
cloud.machine.type |
principal.resource.attribute.labels.value |
Es el valor de cloud.machine.type del registro sin procesar. |
cloud.provider |
principal.resource.attribute.labels.value |
Es el valor de cloud.provider del registro sin procesar. |
event1 |
metadata.description |
Es el valor de event1 del registro sin procesar. Si event1 no está presente, se usa el valor de message . |
event1_data.host |
principal.hostname |
Es el valor de event1_data.host del registro sin procesar. Se usa como resguardo si no están presentes host_name y host . |
event1_data.remote_addr |
principal.ip |
Es la dirección IP que se extrajo de event1_data.remote_addr con un patrón de Grok. |
event1_data.task |
security_result.detection_fields.value |
Es el valor de event1_data.task del registro sin procesar. |
event1_data.task_path |
principal.process.file.full_path |
Es el valor de event1_data.task_path del registro sin procesar. |
event1_data.task_uuid |
security_result.detection_fields.value |
Es el valor de event1_data.task_uuid del registro sin procesar. |
event1_data.uuid |
metadata.product_log_id |
Es el valor de event1_data.uuid del registro sin procesar. |
event1_display |
security_result.description |
Es el valor de event1_display del registro sin procesar. |
host |
principal.hostname |
Es el valor de host del registro sin procesar. Se usa como resguardo si host_name no está presente. Si es un número, se convierte en una cadena. |
host.architecture |
target.asset.hardware.cpu_platform |
Es el valor de host.architecture del registro sin procesar. |
host.fqdn |
target.administrative_domain |
Es el valor de host.fqdn del registro sin procesar. |
host.hostname |
target.hostname |
Es el valor de host.hostname del registro sin procesar. |
host.id |
target.asset.asset_id |
"ID de host: " concatenado con el valor de host.id del registro sin procesar. |
host.ip |
target.asset.ip |
Son los valores del array host.ip del registro sin procesar. |
host.mac |
target.mac |
Son los valores del array host.mac del registro sin procesar. |
host.os.codename |
target.asset.attribute.labels.value |
Es el valor de host.os.codename del registro sin procesar. |
host.os.kernel |
target.platform_patch_level |
Es el valor de host.os.kernel del registro sin procesar. |
host.os.name |
target.asset.attribute.labels.value |
Es el valor de host.os.name del registro sin procesar. |
host.os.platform |
target.platform |
Si el valor de host.os.platform es "debian", el campo UDM se establece en "LINUX". |
host.os.version |
target.platform_version |
Es el valor de host.os.version del registro sin procesar. |
host_name |
principal.hostname |
Es el valor de host_name del registro sin procesar. |
input.type |
network.ip_protocol |
Si el valor de input.type es "tcp", el campo UDM se establece en "TCP". |
level |
security_result.severity |
Según el valor de level : "DEBUG", "INFO" y "AUDIT" se asignan a "INFORMATIONAL"; "ERROR" se asigna a "ERROR"; "WARNING" se asigna a "MEDIUM". |
level |
security_result.severity_details |
Es el valor de level del registro sin procesar. |
log.source.address |
principal.ip |
Es la dirección IP que se extrajo de log.source.address con un patrón de Grok. |
log.source.address |
principal.port |
Es el puerto que se extrae de log.source.address con un patrón de Grok. |
logger_name |
intermediary.application |
Es el valor de logger_name del registro sin procesar. |
message |
metadata.description |
Es el valor de message del registro sin procesar. Se usa como resguardo si event1 no está presente. |
metadata.event_type |
metadata.event_type |
La lógica del analizador determina este valor según la presencia de ciertos campos. "NETWORK_CONNECTION" si log.source.address y host.ip están presentes "STATUS_UPDATE" si están presentes principal_hostname o event1_data.remote_addr "GENERIC_EVENT" en otros casos. |
metadata.log_type |
metadata.log_type |
Está codificado como "ANSIBLE_AWX". |
metadata.product_name |
metadata.product_name |
Está codificado como "ANSIBLE_AWX". |
metadata.vendor_name |
metadata.vendor_name |
Está codificado como "ANSIBLE_AWX". |
parent_uuid |
security_result.detection_fields.value |
Es el valor de parent_uuid del registro sin procesar. |
principal.resource.resource_type |
principal.resource.resource_type |
Se codifica como "VIRTUAL_MACHINE" si cloud.instance.name está presente. |
observer.labels.key |
observer.labels.key |
Se codificó de forma rígida como "ephemeral_id". |
principal.resource.attribute.labels.key |
principal.resource.attribute.labels.key |
Se codifica de forma rígida como "machine_type", "provider" o "availability_zone" según el campo que se asigne. |
security_result.detection_fields.key |
security_result.detection_fields.key |
Se codifica de forma rígida como "parent_uuid", "task" o "task_uuid", según el campo que se esté asignando. |
target.asset.attribute.labels.key |
target.asset.attribute.labels.key |
Se codifica como "codename" o "os_name" según el campo que se asigne. |
timestamp |
metadata.event_timestamp |
Valor de timestamp del registro sin procesar, analizado y convertido en una marca de tiempo. |
timestamp |
timestamp |
Valor de timestamp del registro sin procesar, analizado y convertido en una marca de tiempo. |
¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.