Recopila registros de ManageEngine ADManager Plus
En este documento, se explica cómo transferir registros de ManageEngine ADManager Plus a Google Security Operations con el agente de Bindplane.
ManageEngine ADManager Plus ofrece una solución basada en la Web para la administración simplificada de AD, que incluye la creación y modificación de usuarios, la seguridad basada en roles y los informes detallados. La integración de ADManager Plus con los servidores de Splunk y Syslog permite a las organizaciones reenviar registros de todas las acciones de administración de Active Directory, Microsoft 365 y Google Workspace que se realizan en ADManager Plus.
Antes de comenzar
Asegúrate de cumplir con los siguientes requisitos previos:
- Una instancia de Google SecOps
- Windows Server 2016 o versiones posteriores, o host de Linux con
systemd - Conectividad de red entre el agente de Bindplane y ManageEngine ADManager Plus
- Si se ejecuta detrás de un proxy, asegúrate de que los puertos de firewall estén abiertos según los requisitos del agente de Bindplane.
- Acceso con privilegios a la consola de administración de ManageEngine ADManager Plus
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.
- Haz clic en Descargar para descargar el archivo de autenticación de la transferencia.
Guarda el archivo de forma segura en el sistema en el que se instalará el agente de 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 siguiente comando:
msiexec /i "https://github.com/observIQ/bindplane-otel-collector/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-collector
El servicio debería mostrarse como RUNNING.
Instalación en Linux
- Abre una terminal con privilegios de administrador o sudo.
Ejecuta el siguiente comando:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-otel-collector/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-collector
El servicio debería mostrarse como activo (en ejecución).
Recursos de instalación adicionales
Para obtener más opciones de instalación y solucionar problemas, consulta la guía de instalación del agente de Bindplane.
Configura el agente de BindPlane para transferir el syslog y enviarlo a Google SecOps
Ubica el archivo de configuración
Linux:
sudo nano /opt/observiq-otel-collector/config.yamlWindows:
notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
Edita el archivo de configuración
Reemplaza todo el contenido de
config.yamlcon la siguiente configuración:receivers: tcplog: listen_address: "0.0.0.0:514" exporters: chronicle/admanager_plus: compression: gzip creds_file_path: '<CREDS_FILE_PATH>' customer_id: '<CUSTOMER_ID>' endpoint: malachiteingestion-pa.googleapis.com log_type: ADMANAGER_PLUS raw_log_field: body ingestion_labels: log_source: admanager_plus service: pipelines: logs/admanager_to_chronicle: receivers: - tcplog exporters: - chronicle/admanager_plusReemplaza los marcadores de posición que se indican más abajo:
Configuración del receptor:
- El receptor usa
tcplogpara recibir datos de syslog en el puerto TCP 514. listen_address: Configúralo como0.0.0.0:514para escuchar en todas las interfaces del puerto 514.
- El receptor usa
Configuración del exportador:
<CREDS_FILE_PATH>: Ruta de acceso completa al archivo de autenticación de la transferencia:- Linux:
/opt/observiq-otel-collector/ingestion-auth.json - Windows:
C:\\Program Files\\observIQ OpenTelemetry Collector\\ingestion-auth.json
- Linux:
<CUSTOMER_ID>: Es el ID de cliente 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 - Consulta Extremos regionales para obtener la lista completa.
- EE.UU.:
log_type: Se debe establecer enADMANAGER_PLUSexactamente como aparece en Chronicle.ingestion_labels: Son etiquetas opcionales en formato YAML.
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
Linux
Para reiniciar el agente de Bindplane en Linux, ejecuta el siguiente comando:
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
Windows
Para reiniciar el agente de Bindplane en Windows, elige una de las siguientes opciones:
Con el símbolo del sistema o PowerShell como administrador, haz lo siguiente:
net stop observiq-otel-collector && net start observiq-otel-collectorUsa la consola de Services:
- Presiona
Win+R, escribeservices.mscy presiona Intro. - Busca observIQ Distro for 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 ManageEngine ADManager Plus
- Accede a ADManager Plus.
- Navega a la pestaña Administrador.
- En Configuración del sistema, haz clic en Integraciones.
En Log Forwarding, haz clic en Syslog.
Configura los siguientes campos:
- Servidor Syslog: Ingresa el nombre del servidor Syslog. Ingresa la dirección IP o el nombre de host del host del agente de Bindplane.
- Puerto: Ingresa el número de puerto. Ingresa
514. - Protocol: Elige el protocolo adecuado, TCP o UDP, para reenviar los registros. Selecciona TCP.
- Estándar de Syslog: Selecciona el formato de mensaje de syslog deseado: RFC 3164, RFC 5424 o RawLog. Selecciona RFC 5424 (recomendado).
- Formato de datos: Ingresa el formato de datos. Configura el formato de datos según sea necesario para tu entorno.
Haz clic en Guardar para guardar la configuración.
Después de la configuración, ADManager Plus comenzará a reenviar los registros de las acciones de administración al agente de BindPlane, que luego los enviará a Google SecOps.
Tabla de asignación de UDM
| Campo de registro | Asignación de UDM | Lógica |
|---|---|---|
| ipPhone | event.idm.read_only_udm.additional.fields | Se combinó como etiqueta con la clave "ipPhone" y el valor de ipPhone si ipPhone != "" |
| l | event.idm.read_only_udm.additional.fields | Se combinó como etiqueta con la clave "l" y el valor de l si l != "" |
| lockoutTime | event.idm.read_only_udm.additional.fields | Se combinó como etiqueta con la clave "lockoutTime" y el valor de lockoutTime si lockoutTime != "" |
| Mover desde | event.idm.read_only_udm.additional.fields | Se combinó como etiqueta con la clave "Move From" y el valor de Move_From si Move_From != "" |
| Mover a | event.idm.read_only_udm.additional.fields | Se combinó como etiqueta con la clave "Mover a" y el valor de Move_To si Move_To != "" |
| msg | event.idm.read_only_udm.additional.fields | Se fusionó como etiqueta con la clave "member" y el valor del mensaje si msg != "" |
| sn | event.idm.read_only_udm.additional.fields | Se combinó como etiqueta con la clave "sn" y el valor de sn si sn != "" |
| st | event.idm.read_only_udm.additional.fields | Se combinó como etiqueta con la clave "st" y el valor de st si st != "" |
| Nombre de la plantilla | event.idm.read_only_udm.additional.fields | Se fusionó como etiqueta con la clave "Nombre de la plantilla" y el valor de Template_Name si Template_Name != "" |
| Estado | event.idm.read_only_udm.metadata.description | Valor tomado de Status si Status != "" |
| hora | event.idm.read_only_udm.metadata.event_timestamp | Se convirtió del formato de hora al de marca de tiempo si la hora no es "". |
| event.idm.read_only_udm.metadata.event_type | Derivado: Si has_principal_user == "true", entonces "USER_UNCATEGORIZED"; de lo contrario, si has_principal == "true", entonces "STATUS_UPDATE"; de lo contrario, "GENERIC_EVENT" | |
| TechnicianName | event.idm.read_only_udm.metadata.product_event_type | El valor se toma de TechnicianName si TechnicianName != "" |
| event.idm.read_only_udm.metadata.product_name | Se establece en "ADMANAGER_PLUS". | |
| event.idm.read_only_udm.metadata.vendor_name | Se establece en "ADMANAGER_PLUS". | |
| Nombre de dominio | event.idm.read_only_udm.principal.administrative_domain | El valor se toma de Domain_Name si Domain_Name != "". |
| Nombre de host | event.idm.read_only_udm.principal.asset.hostname | El valor se toma del nombre de host si hostname != "". |
| correo | event.idm.read_only_udm.principal.email | Valor tomado del correo electrónico si mail != "" |
| Nombre de host | event.idm.read_only_udm.principal.hostname | El valor se toma del nombre de host si hostname != "". |
| co | event.idm.read_only_udm.principal.location.city | Valor tomado de co si co != "" |
| Tarea | event.idm.read_only_udm.principal.resource.name | Valor tomado de la tarea si Task != "" |
| wWWHomePage | event.idm.read_only_udm.principal.url | Se toma el valor de wWWHomePage si wWWHomePage != "" |
| Tipo de contraseña | event.idm.read_only_udm.principal.user.attribute.labels | Se fusionó como etiqueta con la clave "Tipo de contraseña" y el valor de Password_Type si Password_Type != "" |
| Código de país | event.idm.read_only_udm.principal.user.attribute.labels | Se combinó como etiqueta con la clave "countryCode" y el valor de countryCode si countryCode != "" |
| contraseña | event.idm.read_only_udm.principal.user.attribute.labels | Se combinó como etiqueta con la clave "password" y el valor de la contraseña si la contraseña != "" |
| postalCode | event.idm.read_only_udm.principal.user.attribute.labels | Se fusionó como etiqueta con la clave "postalCode" y el valor de postalCode si postalCode != "" |
| primaryGroupID | event.idm.read_only_udm.principal.user.attribute.labels | Se fusionó como etiqueta con la clave "primaryGroupID" y el valor de primaryGroupID si primaryGroupID != "" |
| userAccountControl | event.idm.read_only_udm.principal.user.attribute.labels | Se combinó como etiqueta con la clave "userAccountControl" y el valor de userAccountControl si userAccountControl != "" |
| userPrincipalName | event.idm.read_only_udm.principal.user.attribute.labels | Se combina como etiqueta con la clave "userPrincipalName" y el valor de userPrincipalName si userPrincipalName != "" |
| company | event.idm.read_only_udm.principal.user.company_name | El valor se toma de la empresa si empresa != "" |
| departamento | event.idm.read_only_udm.principal.user.department | Se combina con el departamento si department != "" |
| givenName | event.idm.read_only_udm.principal.user.first_name | El valor se toma de givenName si givenName != "". |
| physicalDeliveryOfficeName | event.idm.read_only_udm.principal.user.office_address.name | Valor tomado de physicalDeliveryOfficeName si physicalDeliveryOfficeName != "" |
| streetAddress | event.idm.read_only_udm.principal.user.personal_address.name | Valor tomado de streetAddress si streetAddress != "" |
| homePhone | event.idm.read_only_udm.principal.user.phone_numbers | Se combina con homePhone si homePhone != "" |
| Nombre del usuario | event.idm.read_only_udm.principal.user.user_display_name | El valor se toma de User_Name si User_Name != ""; de lo contrario, se toma de Object_Name si Object_Name != "". |
| sAMAccountName | event.idm.read_only_udm.principal.user.userid | Valor tomado de sAMAccountName si sAMAccountName != "" |
| ACCIÓN | event.idm.read_only_udm.security_result.action_details | Valor tomado de ACTION si ACTION != "" |
| descripción | event.idm.read_only_udm.security_result.description | Valor tomado de la descripción si description != "" |
| Nombre del contenedor | event.idm.read_only_udm.security_result.detection_fields | Se deriva de container_Name grok: Se fusiona como etiqueta con la clave "Container_Name_DC_value1" y el valor de dc_label_1 si dc_label_1 != "" |
| Nombre del contenedor | event.idm.read_only_udm.security_result.detection_fields | Se deriva de container_Name grok: Se combina como etiqueta con la clave "Container_Name_DC_value2" y el valor de dc_label_2 si dc_label_2 != "" |
| Nombre del contenedor | event.idm.read_only_udm.security_result.detection_fields | Se deriva de container_Name grok: Se combina como etiqueta con la clave "Container_Name_OU_value1" y el valor de ou_label_1 si ou_label_1 != "" |
| Nombre del contenedor | event.idm.read_only_udm.security_result.detection_fields | Se deriva de container_Name grok: se combina como etiqueta con la clave "Container_Name_OU_value2" y el valor de ou_label_2 si ou_label_2 != "" |
| Nombre del contenedor | event.idm.read_only_udm.security_result.detection_fields | Se deriva de container_Name grok: Se fusiona como etiqueta con la clave "Container_Name_OU_value3" y el valor de ou_label_3 si ou_label_3 != "" |
| Grupo principal | event.idm.read_only_udm.security_result.detection_fields | Se deriva de Primary_Group grok: Se fusiona como etiqueta con la clave "Primary_Group_CN_value1" y el valor de cn_label_1 si cn_label_1 != "" |
| Grupo principal | event.idm.read_only_udm.security_result.detection_fields | Se deriva de Primary_Group grok: Se fusiona como etiqueta con la clave "Primary_Group_CN_value2" y el valor de cn_label_2 si cn_label_2 != "" |
| Grupo principal | event.idm.read_only_udm.security_result.detection_fields | Se deriva de Primary_Group grok: Se fusiona como etiqueta con la clave "Primary_Group_DC_value1" y el valor de primary_dc_label_1 si primary_dc_label_1 != "" |
| Grupo principal | event.idm.read_only_udm.security_result.detection_fields | Se deriva de Primary_Group grok: Se fusiona como etiqueta con la clave "Primary_Group_DC_value2" y el valor de primary_dc_label_2 si primary_dc_label_2 != "" |
| accountExpires | event.idm.read_only_udm.security_result.detection_fields | Se combinó como etiqueta con la clave "accountExpires" y el valor de accountExpires si accountExpires != "" |
| administrador | event.idm.read_only_udm.security_result.detection_fields | Se deriva de manager grok: Se fusiona como etiqueta con la clave "manager_cn_value1" y el valor de manager_cn_value1 si manager_cn_value1 != "" |
| administrador | event.idm.read_only_udm.security_result.detection_fields | Se deriva de manager grok: Se fusiona como etiqueta con la clave "manager_dc_value1" y el valor de manager_dc_value1 si manager_dc_value1 != "" |
| administrador | event.idm.read_only_udm.security_result.detection_fields | Se deriva de manager grok: Se fusiona como etiqueta con la clave "manager_dc_value2" y el valor de manager_dc_value2 si manager_dc_value2 != "" |
| administrador | event.idm.read_only_udm.security_result.detection_fields | Se deriva de manager grok: se fusiona como etiqueta con la clave "manager_ou_value1" y el valor de manager_ou_value1 si manager_ou_value1 != "" |
| administrador | event.idm.read_only_udm.security_result.detection_fields | Se deriva de manager grok: se fusiona como etiqueta con la clave "manager_ou_value2" y el valor de manager_ou_value2 si manager_ou_value2 != "" |
| administrador | event.idm.read_only_udm.security_result.detection_fields | Se deriva de manager grok: Se fusiona como etiqueta con la clave "manager_ou_value3" y el valor de manager_ou_value3 si manager_ou_value3 != "" |
| pwdLastSet | event.idm.read_only_udm.security_result.detection_fields | Se combinó como etiqueta con la clave "pwdLastSet" y el valor de pwdLastSet si pwdLastSet != "" |
| ModuleName | event.idm.read_only_udm.target.resource.name | El valor se toma de ModuleName si ModuleName != "". |
¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.