Recopila registros de IAM de Airlock de Ergon Informatik
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
- Accede a la consola de Google SecOps.
- Ve a Configuración de SIEM > Agentes de recopilación.
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
- Accede a 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.
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
- Abre el símbolo del sistema o PowerShell como administrador.
Ejecuta el comando siguiente:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quietEspera a que se complete la instalación.
Ejecute el siguiente comando para verificar la instalación:
sc query observiq-otel-collectorEl estado del servicio debe ser RUNNING.
Instalación en Linux
- Abre una terminal con privilegios de administrador o sudo.
Ejecuta el comando siguiente:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.shEspera a que se complete la instalación.
Ejecute el siguiente comando para verificar la instalación:
sudo systemctl status observiq-otel-collectorEl 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.yamlWindows:
notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
Edita el archivo de configuración
Reemplaza todo el contenido de
config.yamlpor 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_iamReemplaza los marcadores de posición que se indican más abajo:
Configuración del receptor:
listen_address: Configúralo como0.0.0.0:514para escuchar en todas las interfaces del puerto 51. Para los sistemas Linux que se ejecutan como no raíz, usa el puerto1514o 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
- Linux:
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
- EE.UU.:
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, luegoEntery, 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:
Ejecuta el comando siguiente:
sudo systemctl restart observiq-otel-collectorVerifica que el servicio esté en ejecución:
sudo systemctl status observiq-otel-collectorRevisa los registros en busca de errores:
sudo journalctl -u observiq-otel-collector -f
Para reiniciar el agente de Bindplane en Windows, haz lo siguiente:
Elige una de las siguientes opciones:
Símbolo del sistema o PowerShell como administrador:
net stop observiq-otel-collector && net start observiq-otel-collectorConsola de Services:
- Presiona
Win+R, escribeservices.mscy presiona Intro. - Busca observIQ OpenTelemetry Collector.
- Haz clic con el botón derecho y selecciona Reiniciar.
- Presiona
Verifica que el servicio esté en ejecución:
sc query observiq-otel-collectorRevisa 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
- Conéctate al servidor de IAM de Airlock con SSH o acceso a la consola.
Navega al directorio de la instancia:
cd /opt/airlock/iam/instances/<instance_name>/Edita el archivo de configuración de Log4j para todos los módulos:
nano log4j/all-modules.xmlAgrega 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>Configura los parámetros del appender de Syslog:
- host: Reemplaza
BINDPLANE_AGENT_IPpor la dirección IP del host del agente de BindPlane (por ejemplo,192.168.1.100). - port: Establece el valor en
514(o1514si el agente de BindPlane está configurado para un puerto no privilegiado). - protocol: Establece el valor en
UDP(oTCPsi configuraste el receptor de tcplog en BindPlane) - format: Se establece en
RFC5424para el formato syslog estructurado. - facility: Se establece en
LOCAL1(o en otro código de instalación según sea necesario:LOCAL0aLOCAL7) - Nivel de ThresholdFilter: Establece
INFOpara enviar registros de nivel INFO y de gravedad superior, oDEBUGpara todos los registros.
- host: Reemplaza
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>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>Guarda el archivo de configuración:
Presiona
Ctrl+O, luegoEntery, después,Ctrl+X.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.
Verifica que los registros se envíen al agente de Bindplane:
sudo journalctl -u observiq-otel-collector -fVerifica que los registros lleguen a Google SecOps:
- Accede a la consola de Google SecOps.
- Ve a SIEM > Search.
Ejecuta una búsqueda:
metadata.log_type = "ERGON_INFORMATIK_AIRLOCK_IAM"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:
En el archivo
config.yamldel agente de Bindplane, cambia el receptor atcplog:receivers: tcplog: listen_address: "0.0.0.0:514"En el archivo
log4j/all-modules.xmlde IAM de Airlock, cambia el protocolo aTCP:<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>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:
TRACEDEBUGINFOWARNERRORFATAL
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
Verifica que el agente de Bindplane reciba registros:
sudo journalctl -u observiq-otel-collector -fComprueba la conectividad de red desde Airlock IAM al agente de Bindplane:
telnet BINDPLANE_AGENT_IP 514Verifica que la configuración de Log4j sea válida:
cat /opt/airlock/iam/instances/<instance_name>/log4j/all-modules.xmlVerifica 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
Revisa los registros del agente de Bindplane en busca de errores:
sudo journalctl -u observiq-otel-collector -n 100Verifica que la sintaxis de
config.yamlsea correcta. YAML distingue la sangría.Verifica que la ruta de acceso al archivo de autenticación de la transferencia sea correcta y que el archivo exista.
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 |
| 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.