ANSIBLE_AWX
En este documento se explica cómo ingerir registros de Ansible AWX en Google Security Operations mediante Bindplane. El analizador extrae campos de los registros de Ansible AWX con formato JSON. Utiliza el análisis JSON para extraer los campos de registro y, a continuación, asigna estos valores al modelo de datos unificado (UDM). También define los valores de metadatos predeterminados del origen y el tipo del evento.
Antes de empezar
Asegúrate de que cumples los siguientes requisitos previos:
- Una instancia de Google SecOps.
- Un host Windows 2016 o posterior, o un host Linux con systemd.
- Si se ejecuta a través de un proxy, asegúrate de que los puertos del cortafuegos estén abiertos según los requisitos del agente de Bindplane.
- Acceso privilegiado a la consola de gestión o al dispositivo de Ansible AWX con permisos de administrador.
Obtener el archivo de autenticación de ingestión de Google SecOps
- Inicia sesión en la consola de Google SecOps.
- Ve a Configuración de SIEM > Agentes de recogida.
- Descarga el archivo de autenticación de ingestión. Guarda el archivo de forma segura en el sistema en el que se instalará Bindplane.
Obtener el ID de cliente de Google SecOps
- Inicia sesión en la consola de Google SecOps.
- Ve a Configuración de SIEM > Perfil.
- Copia y guarda el ID de cliente de la sección Detalles de la organización.
Instalar el agente de Bindplane
Instala el agente de Bindplane en tu sistema operativo Windows o Linux siguiendo las instrucciones que se indican a continuación.
Instalación de ventanas
- Abre el símbolo del sistema o PowerShell como administrador.
- Ejecuta el siguiente comando: - msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
Instalación de Linux
- Abre un terminal con privilegios de superusuario o sudo.
- Ejecuta el siguiente comando: - sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
Recursos de instalación adicionales
Para ver otras opciones de instalación, consulta la guía de instalación.
Configurar el agente de BindPlane para ingerir Syslog y enviarlo a Google SecOps
- Accede al archivo de configuración:
- Busca el archivo config.yaml. Normalmente, se encuentra en el directorio/opt/observiq-otel-collector/de Linux o en el directorioC:Program FilesobservIQ OpenTelemetry Collectorde Windows.
- Abre el archivo con un editor de texto (por ejemplo, nano,vio Bloc de notas).
 
- Busca el archivo 
- Edita el archivo - config.yamlde la siguiente manera:- receivers: udplog: # Using high port to avoid requiring root privileges listen_address: "0.0.0.0:514" exporters: chronicle/awx: endpoint: malachiteingestion-pa.googleapis.com creds_file_path: '/path/to/ingestion-authentication-file.json' customer_id: YOUR_CUSTOMER_ID log_type: 'ANSIBLE_AWX' raw_log_field: body service: pipelines: logs/awx: receivers: - udplog exporters: - chronicle/awx- Sustituye el puerto y la dirección IP según sea necesario en tu infraestructura.
- Sustituye YOUR_CUSTOMER_IDpor el ID de cliente real.
- Actualiza /path/to/ingestion-authentication-file.jsona la ruta donde se guardó el archivo de autenticación en el paso 1.
 
Reinicia el agente de Bindplane para aplicar los cambios
- Para reiniciar el agente BindPlane en Linux, ejecuta el siguiente comando: - sudo systemctl restart observiq-otel-collector
- Para reiniciar el agente de Bindplane en Windows, puedes usar la consola Servicios o introducir el siguiente comando: - sc stop observiq-otel-collector && sc start observiq-otel-collector
Configurar el registro externo en Ansible AWX
- Inicia sesión en la consola de gestión de Ansible AWX.
- En la barra de navegación, ve a Configuración.
- Selecciona Ajustes de registro en las opciones de Sistema.
- Proporcione los siguientes detalles de configuración:
- Agregador de registros: introduce la dirección IP del agente de BindPlane.
- Puerto del agregador de registros: introduce el número de puerto del agente de Bindplane (por ejemplo, 514).
- Tipo de agregador de registros: selecciona Otro en la lista.
- Nombre de usuario del agregador de registros: déjelo en blanco (no es necesario para syslog).
- Contraseña o token del agregador de registros: déjelo en blanco (no es necesario para syslog).
- Protocolo de agregación de registros: selecciona UDP (recomendado para syslog).
- Umbral de nivel del agregador de registros: selecciona Información o el nivel de registro que prefieras.
- Habilitar registro externo: haz clic en el interruptor para activarlo.
- Registradores para enviar datos al agregador de registros: selecciona los tipos de registro pertinentes:
- awx: registros genéricos del servidor
- activity_stream: registro de cambios en objetos de AWX
- job_events: datos del módulo de retrollamada de Ansible
- system_tracking: hechos del sistema y datos de configuración
 
- Registrar hechos de seguimiento del sistema individualmente: desactiva esta opción (DESACTIVADO de forma predeterminada).
 
- Haz clic en Guardar para aplicar la configuración.
- Opcional: Haz clic en Probar para verificar la conexión con el agente de Bindplane.
Tabla de asignación de UDM
| Campo de registro | Asignación de UDM | Lógica | 
|---|---|---|
| agent.ephemeral_id | observer.labels.value | El valor de agent.ephemeral_iddel registro sin procesar. | 
| agent.hostname | observer.hostname | El valor de agent.hostnamedel registro sin procesar. | 
| agent.id | observer.asset_id | Concatenación de "filebeat:" y el valor de agent.iddel registro sin procesar. | 
| agent.name | observer.user.userid | El valor de agent.namedel registro sin procesar. | 
| agent.type | observer.application | El valor de agent.typedel registro sin procesar. | 
| agent.version | observer.platform_version | El valor de agent.versiondel registro sin procesar. | 
| cloud.availability_zone | principal.resource.attribute.labels.value | El valor de cloud.availability_zonedel registro sin procesar. | 
| cloud.instance.id | principal.resource.product_object_id | El valor de cloud.instance.iddel registro sin procesar. | 
| cloud.instance.name | principal.resource.name | El valor de cloud.instance.namedel registro sin procesar. | 
| cloud.machine.type | principal.resource.attribute.labels.value | El valor de cloud.machine.typedel registro sin procesar. | 
| cloud.provider | principal.resource.attribute.labels.value | El valor de cloud.providerdel registro sin procesar. | 
| event1 | metadata.description | El valor de event1del registro sin procesar. Si no se incluyeevent1, se usa el valor demessage. | 
| event1_data.host | principal.hostname | El valor de event1_data.hostdel registro sin procesar. | 
| event1_data.remote_addr | principal.ip | La dirección IP extraída de event1_data.remote_addrmediante un patrón grok. | 
| event1_data.task | security_result.detection_fields.value | El valor de event1_data.taskdel registro sin procesar. | 
| event1_data.task_path | principal.process.file.full_path | El valor de event1_data.task_pathdel registro sin procesar. | 
| event1_data.task_uuid | security_result.detection_fields.value | El valor de event1_data.task_uuiddel registro sin procesar. | 
| event1_data.uuid | metadata.product_log_id | El valor de event1_data.uuiddel registro sin procesar. | 
| event1_display | security_result.description | El valor de event1_displaydel registro sin procesar. | 
| host | principal.hostname | El valor de hostdel registro sin procesar, que se usa si no están presentesevent1_data.hostyhost_name. | 
| host.architecture | target.asset.hardware.cpu_platform | El valor de host.architecturedel registro sin procesar. | 
| host.fqdn | target.administrative_domain | El valor de host.fqdndel registro sin procesar. | 
| host.hostname | target.hostname | El valor de host.hostnamedel registro sin procesar. | 
| host.id | target.asset.asset_id | Concatenación de "Host Id: " y el valor de host.iddel registro sin procesar. | 
| host.ip | target.asset.ip | Los valores de host.ipdel registro sin procesar. | 
| host.mac | target.mac | Los valores de host.macdel registro sin procesar. | 
| host.os.codename | target.asset.attribute.labels.value | El valor de host.os.codenamedel registro sin procesar. | 
| host.os.kernel | target.platform_patch_level | El valor de host.os.kerneldel registro sin procesar. | 
| host.os.name | target.asset.attribute.labels.value | El valor de host.os.namedel registro sin procesar. | 
| host.os.platform | target.platform | Se asigna el valor "LINUX" si host.os.platformes "debian". | 
| host.os.version | target.platform_version | El valor de host.os.versiondel registro sin procesar. | 
| host_name | principal.hostname | El valor de host_namedel registro sin procesar, que se usa sievent1_data.hostno está presente. | 
| input.type | network.ip_protocol | Se define como "TCP" si input.typees "tcp". | 
| level | security_result.severity | Se asigna en función del 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 | El valor de leveldel registro sin procesar. | 
| log.source.address | principal.ip | La dirección IP extraída de log.source.addressmediante un patrón grok. | 
| log.source.address | principal.port | El puerto extraído de log.source.addressmediante un patrón grok. | 
| logger_name | intermediary.application | El valor de logger_namedel registro sin procesar. | 
| message | metadata.description | Valor de messagedel registro sin procesar, que se usa como alternativa sievent1no está presente. | 
| parent_uuid | security_result.detection_fields.value | El valor de parent_uuiddel registro sin procesar. | 
| timestamp | metadata.event_timestamp | El valor de timestampdel registro sin procesar, analizado mediante el filtro de fecha. Se determina mediante la lógica: "NETWORK_CONNECTION" silog.source.addressexiste yhost.ipexiste en el JSON; "STATUS_UPDATE" siprincipal_hostnameoevent1_data.remote_addrexisten; "GENERIC_EVENT" en los demás casos. Codificado como "ANSIBLE_AWX". Codificado como "ANSIBLE_AWX". Codificado como "ANSIBLE_AWX". Codificado como "ephemeral_id". Se ha codificado como "machine_type", "provider" o "availability_zone" en función del campo asignado. Codificado como "VIRTUAL_MACHINE". Se codifica como "parent_uuid", "task" o "task_uuid" en función del campo que se esté asignando. Codificado como "codename" u "os_name" en función del campo que se esté asignando. | 
¿Necesitas más ayuda? Recibe respuestas de los miembros de la comunidad y de los profesionales de Google SecOps.