Recopila registros de IAM de Airlock de Ergon Informatik

Compatible con:

En este documento, se explica cómo transferir registros de IAM de Ergon Informatik Airlock a Google Security Operations con el agente de Bindplane.

Airlock IAM es una solución de administración de identidades y accesos que proporciona capacidades de autenticación, autorización y autoservicio para los usuarios. Genera registros JSON estructurados para eventos de autenticación, actividades de seguimiento del usuario, registros de auditoría y acciones administrativas en sus módulos de Loginapp, Adminapp, Aprobación de transacciones, Service Container y API Policy Service.

Antes de comenzar

Asegúrate de cumplir con los siguientes requisitos previos:

  • Una instancia de Google SecOps
  • Windows Server 2016 o versiones posteriores, o un host de Linux con systemd
  • Conectividad de red entre el agente de Bindplane y el servidor de IAM de Airlock
  • Si se ejecuta detrás de un proxy, asegúrate de que los puertos del firewall estén abiertos según los requisitos del agente de Bindplane.
  • Acceso de administrador a la instancia de IAM de Airlock
  • Acceso a la consola o a SSH al servidor de IAM de Airlock para editar archivos de configuración

Obtén el archivo de autenticación de transferencia de Google SecOps

  1. Accede a la consola de Google SecOps.
  2. Ve a Configuración de SIEM > Agentes de recopilación.
  3. Descarga el archivo de autenticación de transferencia. Guarda el archivo de forma segura en el sistema en el que se instalará Bindplane.

Obtén el ID de cliente de Google SecOps

  1. Accede a 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.

Instala el agente de BindPlane

Instala el agente de Bindplane en tu sistema operativo Windows o Linux según las siguientes instrucciones.

Instalación en Windows

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

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    
  3. Espera a que se complete la instalación.

  4. Ejecute el siguiente comando para verificar la instalación:

    sc query observiq-otel-collector
    

    El estado del servicio debe ser RUNNING.

Instalación en Linux

  1. Abre una terminal con privilegios de administrador o sudo.
  2. Ejecuta el comando siguiente:

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    
  3. Espera a que se complete la instalación.

  4. Ejecute el siguiente comando para verificar la instalación:

    sudo systemctl status observiq-otel-collector
    

    El estado del servicio debe ser active (running).

Recursos de instalación adicionales

Para obtener más opciones de instalación y solución de problemas, consulta la guía de instalación del agente de Bindplane.

Configura el agente de BindPlane para transferir Syslog y enviarlo a Google SecOps

Ubica el archivo de configuración

  • Linux:

    sudo nano /etc/bindplane-agent/config.yaml
    
  • Windows:

    notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
    

Edita el archivo de configuración

  1. Reemplaza todo el contenido de config.yaml por la siguiente configuración:

    receivers:
        udplog:
            listen_address: "0.0.0.0:514"
    
    exporters:
        chronicle/airlock_iam:
            compression: gzip
            creds_file_path: '/etc/bindplane-agent/ingestion-auth.json'
            customer_id: 'YOUR_CUSTOMER_ID'
            endpoint: malachiteingestion-pa.googleapis.com
            log_type: ERGON_INFORMATIK_AIRLOCK_IAM
            raw_log_field: body
            ingestion_labels:
                env: production
                source: airlock_iam
    
    service:
        pipelines:
            logs/airlock_to_chronicle:
                receivers:
                    - udplog
                exporters:
                    - chronicle/airlock_iam
    
  2. Reemplaza los marcadores de posición que se indican más abajo:

    • Configuración del receptor:

      • listen_address: Configúralo como 0.0.0.0:514 para escuchar en todas las interfaces del puerto 51. Para los sistemas Linux que se ejecutan como no raíz, usa el puerto 1514 o uno posterior.
    • Configuración del exportador:

      • creds_file_path: Ruta de acceso completa al archivo de autenticación de la transferencia:

        • Linux: /etc/bindplane-agent/ingestion-auth.json
        • Windows: C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
      • YOUR_CUSTOMER_ID: Reemplaza este valor por tu ID de cliente de Google SecOps del paso anterior.

      • endpoint: URL del extremo regional:

        • EE.UU.: malachiteingestion-pa.googleapis.com
        • Europa: europe-malachiteingestion-pa.googleapis.com
        • Asia: asia-southeast1-malachiteingestion-pa.googleapis.com
      • ingestion_labels: Etiquetas opcionales para categorizar registros (modifica según sea necesario)

Ejemplo de configuración para Windows

  • receivers:
        udplog:
            listen_address: "0.0.0.0:514"
    
    exporters:
        chronicle/airlock_iam:
            compression: gzip
            creds_file_path: 'C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json'
            customer_id: 'a1b2c3d4-e5f6-g7h8-i9j0-k1l2m3n4o5p6'
            endpoint: malachiteingestion-pa.googleapis.com
            log_type: ERGON_INFORMATIK_AIRLOCK_IAM
            raw_log_field: body
            ingestion_labels:
                env: production
                source: airlock_iam
    
    service:
        pipelines:
            logs/airlock_to_chronicle:
                receivers:
                    - udplog
                exporters:
                    - chronicle/airlock_iam
    

Guarda el archivo de configuración

Después de editarlo, guarda el archivo:

  • Linux: Presiona Ctrl+O, luego Enter y, después, Ctrl+X.
  • Windows: Haz clic en Archivo > Guardar

Reinicia el agente de Bindplane para aplicar los cambios

  • Para reiniciar el agente de Bindplane en Linux, haz lo siguiente:

    1. Ejecuta el comando siguiente:

      sudo systemctl restart observiq-otel-collector
      
    2. Verifica que el servicio esté en ejecución:

      sudo systemctl status observiq-otel-collector
      
    3. Revisa los registros en busca de errores:

      sudo journalctl -u observiq-otel-collector -f
      
  • Para reiniciar el agente de Bindplane en Windows, haz lo siguiente:

    1. Elige una de las siguientes opciones:

      • Símbolo del sistema o PowerShell como administrador:

        net stop observiq-otel-collector && net start observiq-otel-collector
        
      • Consola de Services:

        1. Presiona Win+R, escribe services.msc y presiona Intro.
        2. Busca observIQ OpenTelemetry Collector.
        3. Haz clic con el botón derecho y selecciona Reiniciar.
    2. Verifica que el servicio esté en ejecución:

      sc query observiq-otel-collector
      
    3. Revisa los registros en busca de errores:

      type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
      

Configura el reenvío de syslog de IAM de Airlock

  1. Conéctate al servidor de IAM de Airlock con SSH o acceso a la consola.
  2. Navega al directorio de la instancia:

    cd /opt/airlock/iam/instances/<instance_name>/
    
  3. Edita el archivo de configuración de Log4j para todos los módulos:

    nano log4j/all-modules.xml
    
  4. Agrega la configuración del adjuntador de Syslog en la sección <Appenders>:

    <Syslog name="SYSLOG" 
            facility="LOCAL1" 
            host="BINDPLANE_AGENT_IP" 
            port="514" 
            protocol="UDP" 
            format="RFC5424" 
            includeMDC="true" 
            mdcId="mdc" 
            newLine="true">
        <ExceptionPattern>%ex{full}</ExceptionPattern>
        <ThresholdFilter level="INFO"/>
    </Syslog>
    
  5. Configura los parámetros del appender de Syslog:

    • host: Reemplaza BINDPLANE_AGENT_IP por la dirección IP del host del agente de BindPlane (por ejemplo, 192.168.1.100).
    • port: Establece el valor en 514 (o 1514 si el agente de BindPlane está configurado para un puerto no privilegiado).
    • protocol: Establece el valor en UDP (o TCP si configuraste el receptor de tcplog en BindPlane)
    • format: Se establece en RFC5424 para el formato syslog estructurado.
    • facility: Se establece en LOCAL1 (o en otro código de instalación según sea necesario: LOCAL0 a LOCAL7)
    • Nivel de ThresholdFilter: Establece INFO para enviar registros de nivel INFO y de gravedad superior, o DEBUG para todos los registros.
  6. Agrega la referencia del agregador dentro de la sección del registrador <Root>:

    <Loggers>
      <Root level="${sys:iam.log.level}">
        <AppenderRef ref="SYSLOG"/>
      </Root>
    </Loggers>
    
  7. Ejemplo de configuración completo:

    <?xml version="1.0" encoding="UTF-8"?>
    <Configuration name="Custom Log4j 2 Configuration for All IAM Modules">
      <Appenders>
        <Syslog name="SYSLOG" 
                facility="LOCAL1" 
                host="192.168.1.100" 
                port="514" 
                protocol="UDP" 
                format="RFC5424" 
                includeMDC="true" 
                mdcId="mdc" 
                newLine="true">
          <ExceptionPattern>%ex{full}</ExceptionPattern>
          <ThresholdFilter level="INFO"/>
        </Syslog>
      </Appenders>
      <Loggers>
        <Root level="${sys:iam.log.level}">
          <AppenderRef ref="SYSLOG"/>
        </Root>
      </Loggers>
    </Configuration>
    
  8. Guarda el archivo de configuración:

    Presiona Ctrl+O, luego Enter y, después, Ctrl+X.

  9. De forma predeterminada, la configuración de Log4j se supervisa para detectar cambios cada 60 segundos. El nuevo reenvío de syslog se activará automáticamente sin necesidad de reiniciar el sistema.

  10. Verifica que los registros se envíen al agente de Bindplane:

    sudo journalctl -u observiq-otel-collector -f
    
  11. Verifica que los registros lleguen a Google SecOps:

    1. Accede a la consola de Google SecOps.
    2. Ve a SIEM > Search.
    3. Ejecuta una búsqueda:

      metadata.log_type = "ERGON_INFORMATIK_AIRLOCK_IAM"
      
    4. Verifica que los registros de IAM de Airlock aparezcan en los resultados de la búsqueda.

Opciones de configuración adicionales

Configura syslog TCP en lugar de UDP

Si prefieres la entrega de TCP en lugar de UDP, haz lo siguiente:

  1. En el archivo config.yaml del agente de Bindplane, cambia el receptor a tcplog:

    receivers:
      tcplog:
        listen_address: "0.0.0.0:514"
    
  2. En el archivo log4j/all-modules.xml de IAM de Airlock, cambia el protocolo a TCP:

    <Syslog name="SYSLOG" 
            facility="LOCAL1" 
            host="192.168.1.100" 
            port="514" 
            protocol="TCP" 
            format="RFC5424" 
            includeMDC="true" 
            mdcId="mdc" 
            newLine="true">
      <ExceptionPattern>%ex{full}</ExceptionPattern>
      <ThresholdFilter level="INFO"/>
    </Syslog>
    
  3. Reinicia el agente de Bindplane para aplicar el cambio del receptor.

Configura diferentes niveles de registro

  • Para enviar solo los registros de gravedad WARNING y superior, haz lo siguiente:

    <ThresholdFilter level="WARN"/>
    
  • Para enviar todos los registros, incluidos los de DEBUG, haz lo siguiente:

    <ThresholdFilter level="DEBUG"/>
    

Niveles de registro disponibles, desde el nivel de gravedad más bajo hasta el más alto:

  • TRACE
  • DEBUG
  • INFO
  • WARN
  • ERROR
  • FATAL

Configura varias instancias de IAM de Airlock

  • Si tienes varias instancias de IAM de Airlock que envían datos al mismo agente de BindPlane, usa etiquetas de transferencia para diferenciarlas:

    exporters:
        chronicle/airlock_iam_prod:
            compression: gzip
            creds_file_path: '/etc/bindplane-agent/ingestion-auth.json'
            customer_id: 'YOUR_CUSTOMER_ID'
            endpoint: malachiteingestion-pa.googleapis.com
            log_type: ERGON_INFORMATIK_AIRLOCK_IAM
            raw_log_field: body
            ingestion_labels:
                env: production
                instance: prod-iam-01
    
        chronicle/airlock_iam_dev:
            compression: gzip
            creds_file_path: '/etc/bindplane-agent/ingestion-auth.json'
            customer_id: 'YOUR_CUSTOMER_ID'
            endpoint: malachiteingestion-pa.googleapis.com
            log_type: ERGON_INFORMATIK_AIRLOCK_IAM
            raw_log_field: body
            ingestion_labels:
                env: development
                instance: dev-iam-01
    
    service:
        pipelines:
            logs/airlock_prod:
                receivers:
                    - udplog
                exporters:
                    - chronicle/airlock_iam_prod
    
            logs/airlock_dev:
                receivers:
                    - udplog
                exporters:
                    - chronicle/airlock_iam_dev
    

Soluciona problemas

Los registros no aparecen en Google SecOps

  1. Verifica que el agente de Bindplane reciba registros:

    sudo journalctl -u observiq-otel-collector -f
    
  2. Comprueba la conectividad de red desde Airlock IAM al agente de Bindplane:

    telnet BINDPLANE_AGENT_IP 514
    
  3. Verifica que la configuración de Log4j sea válida:

    cat /opt/airlock/iam/instances/<instance_name>/log4j/all-modules.xml
    
  4. Verifica si hay errores en los registros de IAM de Airlock:

    tail -f /opt/airlock/iam/instances/<instance_name>/logs/loginapp.log
    

Errores del agente de Bindplane

  1. Revisa los registros del agente de Bindplane en busca de errores:

    sudo journalctl -u observiq-otel-collector -n 100
    
  2. Verifica que la sintaxis de config.yaml sea correcta. YAML distingue la sangría.

  3. Verifica que la ruta de acceso al archivo de autenticación de la transferencia sea correcta y que el archivo exista.

  4. Prueba la conectividad de red con el extremo de Google SecOps:

    curl -v https://malachiteingestion-pa.googleapis.com
    

Configuración de firewall

Asegúrate de que estén configuradas las siguientes reglas de firewall:

Entrante al agente de BindPlane:

  • Protocolo: UDP (o TCP si se usa tcplog)
  • Puerto: 514 (o el puerto que configuraste)
  • Fuente: Dirección IP del servidor de IAM de Airlock

Salida del agente de Bindplane:

  • Protocolo: HTTPS (TCP 443)
  • Destino: Extremo regional de Google SecOps
  • Propósito: Entrega de registros a Google SecOps

Tabla de asignación de UDM

Campo de registro Asignación de UDM Lógica
expire_time additional.fields Se combina como etiqueta con la clave "expire_time" si no está vacía.
móvil additional.fields Se combina como etiqueta con la clave "mobile" si no está vacío.
sn additional.fields Se combina como etiqueta con la clave "sn" si no está vacío.
CONFIG_CONTEXT additional.fields Se combina como etiqueta con la clave "CONFIG_CONTEXT" si no está vacía.
departamento additional.fields Se combina como etiqueta con la clave "department" si no está vacío
ctxData additional.fields Se combina como etiqueta con la clave "ctxData" si no está vacío.
displayLanguage additional.fields Se combina como etiqueta con la clave "displayLanguage" si no está vacía.
nrPwdTrialsForUserDeletion additional.fields Se combina como etiqueta con la clave "nrPwdTrialsForUserDeletion" si no está vacía.
authInstant additional.fields Se combina como etiqueta con la clave "authInstant" si no está vacío.
auditToken additional.fields Se combina como etiqueta con la clave "auditToken" si no está vacía.
authPlugin additional.fields Se combina como etiqueta con la clave "authPlugin" si no está vacía.
latestIdPropagation additional.fields Se combina como etiqueta con la clave "latestIdPropagation" si no está vacío.
servicio additional.fields Se combina como etiqueta con la clave "service" si no está vacío.
ldap_type additional.fields Se combina como etiqueta con la clave "ldap_type" si no está vacío.
report_message additional.fields Se combina como etiqueta con la clave "report_message" si no está vacío.
authenteeProvidedId additional.fields Se combina como etiqueta con la clave "authenteeProvidedId" si no está vacía.
representerId additional.fields Se combina como etiqueta con la clave "representerId" si no está vacío.
de consultas additional.fields Se combina como etiqueta con la clave "engine" si no está vacío.
canal additional.fields Se combina como etiqueta con la clave "channel" si no está vacío.
authnFactor additional.fields Se combina como etiqueta con la clave "authnFactor" si no está vacío.
authnFactorDetail additional.fields Se combina como etiqueta con la clave "authnFactorDetail" si no está vacío.
required_roles additional.fields Se combina como etiqueta con la clave "required_roles" si no está vacío
target_pattern additional.fields Se combina como etiqueta con la clave "target_pattern" si no está vacío.
nameid additional.fields Se combina como etiqueta con la clave "nameid" si no está vacía.
plugin_name additional.fields Se combina como etiqueta con la clave "plugin_name" si no está vacía.
mecanismo additional.fields Se combina como etiqueta con la clave "mechanism" si no está vacío.
new_session_id additional.fields Se combina como etiqueta con la clave "new_session_id" si no está vacía.
former_session_id additional.fields Se combina como etiqueta con la clave "former_session_id" si no está vacío.
req_id additional.fields Se combina como etiqueta con la clave "req_id" si no está vacío.
auth_method additional.fields Se combina como etiqueta con la clave "auth_method" si no está vacío.
otp additional.fields Se combina como etiqueta con la clave "otp" si no está vacío
mob_num additional.fields Se combina como etiqueta con la clave "mob_num" si no está vacío.
jsessionid additional.fields Se combina como etiqueta con la clave "jsessionid" si no está vacía.
creationDate additional.fields Se combina como etiqueta con la clave "creationDate" si no está vacío.
lastLogin additional.fields Se combina como etiqueta con la clave "lastLogin" si no está vacía.
accountStatus additional.fields Se combina como etiqueta con la clave "accountStatus" si no está vacío.
companyAdministrator additional.fields Se combina como etiqueta con la clave "companyAdministrator" si no está vacío.
companyCustomer additional.fields Se combina como etiqueta con la clave "companyCustomer" si no está vacío.
privateCustomer additional.fields Se combina como etiqueta con la clave "privateCustomer" si no está vacío
otpNotifyChannel additional.fields Se combina como etiqueta con la clave "otpNotifyChannel" si no está vacío
nas_identifier additional.fields Se combina como etiqueta con la clave "nas_identifier" si no está vacío
session_id additional.fields Se combina como etiqueta con la clave "session_id" si no está vacío.
authPluginClassName extensions.auth.auth_details El valor se copia directamente si está presente.
authenticator_type extensions.auth.auth_details El valor se copia directamente si está presente y authPluginClassName está vacío.
logon_type extensions.auth.mechanism Valor copiado directamente
N/A intermediario Se combinó a partir de un objeto intermedio
FORWARD_LOCATION intermediary.url Valor copiado directamente
metadata_description metadata.description Valor copiado directamente
N/A metadata.event_type Se establece según el contexto del evento y se determina según la lógica del analizador.
REQUEST_ID metadata.product_log_id Valor copiado directamente
airlock_version metadata.product_version Valor copiado directamente
método network.http.method Valor copiado directamente
user_agent network.http.user_agent Valor copiado directamente
packet_size network.received_packets Valor convertido en número entero
GSID network.session_id Valor copiado directamente
host principal.hostname Valor copiado directamente
CLIENT_IP principal.ip Valor copiado directamente
UID principal.user.userid Valor copiado directamente
role_name role.name Valor copiado directamente
authenteeType role.type Valor copiado directamente
N/A security_result Se combinó del objeto security_result
acción security_result.action_details El valor se copia directamente si está presente.
authMethodShortDesc security_result.action_details El valor se combina si está presente
action_detail security_result.action_details El valor se combina si está presente
category_value security_result.category Valor copiado directamente
actionGroup security_result.category_details Valor copiado directamente
result_description security_result.description Valor copiado directamente
excepción security_result.summary El valor se copia directamente si está presente.
STATLOG security_result.summary El valor se copia directamente si está presente y la excepción está vacía.
mob_num src.asset.type Valor copiado directamente
mail src.email El valor se copia directamente si está presente.
correo electrónico src.email El valor se copia directamente si está presente y el correo electrónico está vacío.
src_ip src.ip Valor copiado directamente
src_port src.port Valor convertido en número entero
rol src.user.attribute.roles Valor copiado directamente
empresa src.user.company_name Valor copiado directamente
firstName src.user.first_name Valor copiado directamente
lastName src.user.last_name Valor copiado directamente
estado src.user.user_authentication_status Valor copiado directamente
displayName src.user.user_display_name El valor se copia directamente si está presente.
nombre de usuario src.user.user_display_name El valor se copia directamente si está presente y displayName está vacío.
src_user src.user.user_display_name El valor se copia directamente si está presente y displayName o username están vacíos.
authenteeId src.user.userid El valor se copia directamente si está presente.
src_userid src.user.userid El valor se copia directamente si está presente y authenteeId está vacío.
UID src.user.userid El valor se copia directamente si está presente y authenteeId/src_userid están vacíos.
file_path target.file.full_path Valor copiado directamente
target_hostname target.hostname Valor copiado directamente
target_port target.port Valor convertido en número entero
task_name target.resource.name Valor copiado directamente
target_url target.url Valor copiado directamente
N/A metadata.product_name Se establece en "Ergon Informatik Airlock IAM".
N/A metadata.vendor_name Se establece en "Ergon Informatik".

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