ANSIBLE_AWX

Disponible en:

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

  1. Inicia sesión en la consola de Google SecOps.
  2. Ve a Configuración de SIEM > Agentes de recogida.
  3. 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

  1. Inicia sesión en la consola de Google SecOps.
  2. Ve a Configuración de SIEM > Perfil.
  3. 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

  1. Abre el símbolo del sistema o PowerShell como administrador.
  2. Ejecuta el siguiente comando:

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    

Instalación de Linux

  1. Abre un terminal con privilegios de superusuario o sudo.
  2. 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

  1. 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 directorio C:Program FilesobservIQ OpenTelemetry Collector de Windows.
    • Abre el archivo con un editor de texto (por ejemplo, nano, vi o Bloc de notas).
  2. Edita el archivo config.yaml de 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_ID por el ID de cliente real.
    • Actualiza /path/to/ingestion-authentication-file.json a 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

  1. Inicia sesión en la consola de gestión de Ansible AWX.
  2. En la barra de navegación, ve a Configuración.
  3. Selecciona Ajustes de registro en las opciones de Sistema.
  4. 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).
  5. Haz clic en Guardar para aplicar la configuración.
  6. 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_id del registro sin procesar.
agent.hostname observer.hostname El valor de agent.hostname del registro sin procesar.
agent.id observer.asset_id Concatenación de "filebeat:" y el valor de agent.id del registro sin procesar.
agent.name observer.user.userid El valor de agent.name del registro sin procesar.
agent.type observer.application El valor de agent.type del registro sin procesar.
agent.version observer.platform_version El valor de agent.version del registro sin procesar.
cloud.availability_zone principal.resource.attribute.labels.value El valor de cloud.availability_zone del registro sin procesar.
cloud.instance.id principal.resource.product_object_id El valor de cloud.instance.id del registro sin procesar.
cloud.instance.name principal.resource.name El valor de cloud.instance.name del registro sin procesar.
cloud.machine.type principal.resource.attribute.labels.value El valor de cloud.machine.type del registro sin procesar.
cloud.provider principal.resource.attribute.labels.value El valor de cloud.provider del registro sin procesar.
event1 metadata.description El valor de event1 del registro sin procesar. Si no se incluye event1, se usa el valor de message.
event1_data.host principal.hostname El valor de event1_data.host del registro sin procesar.
event1_data.remote_addr principal.ip La dirección IP extraída de event1_data.remote_addr mediante un patrón grok.
event1_data.task security_result.detection_fields.value El valor de event1_data.task del registro sin procesar.
event1_data.task_path principal.process.file.full_path El valor de event1_data.task_path del registro sin procesar.
event1_data.task_uuid security_result.detection_fields.value El valor de event1_data.task_uuid del registro sin procesar.
event1_data.uuid metadata.product_log_id El valor de event1_data.uuid del registro sin procesar.
event1_display security_result.description El valor de event1_display del registro sin procesar.
host principal.hostname El valor de host del registro sin procesar, que se usa si no están presentes event1_data.host y host_name.
host.architecture target.asset.hardware.cpu_platform El valor de host.architecture del registro sin procesar.
host.fqdn target.administrative_domain El valor de host.fqdn del registro sin procesar.
host.hostname target.hostname El valor de host.hostname del registro sin procesar.
host.id target.asset.asset_id Concatenación de "Host Id: " y el valor de host.id del registro sin procesar.
host.ip target.asset.ip Los valores de host.ip del registro sin procesar.
host.mac target.mac Los valores de host.mac del registro sin procesar.
host.os.codename target.asset.attribute.labels.value El valor de host.os.codename del registro sin procesar.
host.os.kernel target.platform_patch_level El valor de host.os.kernel del registro sin procesar.
host.os.name target.asset.attribute.labels.value El valor de host.os.name del registro sin procesar.
host.os.platform target.platform Se asigna el valor "LINUX" si host.os.platform es "debian".
host.os.version target.platform_version El valor de host.os.version del registro sin procesar.
host_name principal.hostname El valor de host_name del registro sin procesar, que se usa si event1_data.host no está presente.
input.type network.ip_protocol Se define como "TCP" si input.type es "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 level del registro sin procesar.
log.source.address principal.ip La dirección IP extraída de log.source.address mediante un patrón grok.
log.source.address principal.port El puerto extraído de log.source.address mediante un patrón grok.
logger_name intermediary.application El valor de logger_name del registro sin procesar.
message metadata.description Valor de message del registro sin procesar, que se usa como alternativa si event1 no está presente.
parent_uuid security_result.detection_fields.value El valor de parent_uuid del registro sin procesar.
timestamp metadata.event_timestamp El valor de timestamp del registro sin procesar, analizado mediante el filtro de fecha. Se determina mediante la lógica: "NETWORK_CONNECTION" si log.source.address existe y host.ip existe en el JSON; "STATUS_UPDATE" si principal_hostname o event1_data.remote_addr existen; "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.