Raccogli i log di ManageEngine ADManager Plus
Questo documento spiega come importare i log di ManageEngine ADManager Plus in Google Security Operations utilizzando l'agente Bindplane.
ManageEngine ADManager Plus offre una soluzione basata sul web per una gestione semplificata di AD, tra cui la creazione e la modifica degli utenti, la sicurezza basata sui ruoli e report dettagliati. L'integrazione di ADManager Plus con i server Splunk e server Syslog consente alle organizzazioni di inoltrare i log di tutte le azioni di gestione di Active Directory, Microsoft 365 e Google Workspace eseguite in ADManager Plus.
Prima di iniziare
Assicurati di soddisfare i seguenti prerequisiti:
- Un'istanza Google SecOps
- Windows Server 2016 o versioni successive oppure host Linux con
systemd - Connettività di rete tra l'agente Bindplane e ManageEngine ADManager Plus
- Se l'esecuzione avviene dietro un proxy, assicurati che le porte del firewall siano aperte in base ai requisiti dell'agente Bindplane
- Accesso con privilegi alla console di gestione ManageEngine ADManager Plus
Ottieni le credenziali di Google SecOps per l'agente Bindplane
Per autenticare l'agente Bindplane in Google SecOps, scegli uno dei seguenti metodi:
- Nuovi deployment: utilizza l'API Chronicle (opzione 1).
- Deployment legacy: continua a utilizzare il file di autenticazione dell'acquisizione (Opzione 2) fino alla dismissione dell'API Ingestion il 20 luglio 2027.
Opzione 1: crea un account di servizio per l'API Chronicle (consigliata)
- Accedi alla Google Cloud console e seleziona il progetto Google Cloud collegato alla tua istanza Google SecOps.
- Vai a IAM e amministrazione > Service account.
- Fai clic su Crea service account.
- Fornisci i seguenti dettagli di configurazione:
- Nome service account: inserisci un nome per l'account (ad esempio
bindplane-ingest). - Descrizione service account: inserisci una descrizione (ad esempio
Bindplane agent log ingestion).
- Nome service account: inserisci un nome per l'account (ad esempio
- Fai clic su Crea e continua.
- Nella sezione Concedi a questo account di servizio l'accesso al progetto, fai clic su Seleziona un ruolo e seleziona Editor Chronicle.
- Fai clic su Continua e poi su Fine.
- Fai clic sul account di servizio che hai creato, quindi vai alla scheda Chiavi.
- Fai clic su Aggiungi chiave > Crea nuova chiave.
- Seleziona JSON e fai clic su Crea. Il file della chiave viene scaricato sul computer.
- Salva il file della chiave come
ingestion-auth.jsonnella directory del raccoglitore Bindplane (/opt/observiq-otel-collector/ingestion-auth.jsonsu Linux oC:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.jsonsu Windows) oppure aggiornacreds_file_pathinconfig.yamlin modo che corrisponda al percorso in cui lo salvi. - Vai a IAM e amministrazione > Impostazioni e copia il Numero progetto. Ti servirà per la configurazione dell'esportatore.
Opzione 2: scarica il file di autenticazione dell'acquisizione (legacy)
- Accedi alla console Google SecOps.
- Vai a Impostazioni SIEM > Agenti di raccolta.
- Scarica il file di autenticazione dell'acquisizione.
- Salva il file in modo sicuro sul sistema in cui verrà installato l'agente Bindplane.
Recuperare l'ID cliente Google SecOps
- Accedi alla console Google SecOps.
- Vai a Impostazioni SIEM > Profilo.
Copia e salva l'ID cliente dalla sezione Dettagli dell'organizzazione.
Installa l'agente Bindplane
Installa l'agente Bindplane sul sistema operativo Windows o Linux seguendo le istruzioni riportate di seguito.
Installazione di Windows
- Apri Prompt dei comandi o PowerShell come amministratore.
Esegui questo comando:
msiexec /i "https://github.com/observIQ/bindplane-otel-collector/releases/latest/download/observiq-otel-collector.msi" /quietAttendi il completamento dell'installazione.
Verifica l'installazione eseguendo:
sc query observiq-otel-collector
Il servizio dovrebbe essere visualizzato come RUNNING.
Installazione di Linux
- Apri un terminale con privilegi root o sudo.
Esegui questo comando:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-otel-collector/releases/latest/download/install_unix.sh)" install_unix.shAttendi il completamento dell'installazione.
Verifica l'installazione eseguendo:
sudo systemctl status observiq-otel-collector
Il servizio dovrebbe essere visualizzato come attivo (in esecuzione).
Risorse aggiuntive per l'installazione
Per ulteriori opzioni di installazione e risoluzione dei problemi, consulta la guida all'installazione dell'agente Bindplane.
Configura l'agente Bindplane per importare il syslog e inviarlo a Google SecOps
Individua il file di configurazione
Linux:
sudo nano /opt/observiq-otel-collector/config.yamlWindows:
notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
Modifica il file di configurazione
Sostituisci l'intero contenuto di
config.yamlcon la seguente configurazione:receivers: tcplog: listen_address: "0.0.0.0:514" exporters: chronicle/admanager_plus: protocol: https # Region of your instance, for example us, europe, asia-southeast1 location: <LOCATION> # Project number of the Google Cloud project linked to the instance project: '<PROJECT_NUMBER>' compression: gzip creds_file_path: '<CREDS_FILE_PATH>' customer_id: '<CUSTOMER_ID>' endpoint: chronicle.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_plusSostituisci i seguenti segnaposto:
Configurazione del destinatario:
- Il ricevitore utilizza
tcplogper ricevere i dati syslog sulla porta TCP 514. listen_address: imposta su0.0.0.0:514per ascoltare su tutte le interfacce sulla porta 514.
- Il ricevitore utilizza
Configurazione dell'esportatore:
<CREDS_FILE_PATH>: percorso completo del file della chiave JSON del account di servizio (opzione 1):- Linux:
/opt/observiq-otel-collector/ingestion-auth.json - Windows:
C:\\Program Files\\observIQ OpenTelemetry Collector\\ingestion-auth.json
- Linux:
<CUSTOMER_ID>: l'ID cliente del passaggio precedente.location: sostituisci<LOCATION>con la regione della tua istanza Google SecOps (ad esempious,europeoasia-southeast1). L'esportatore aggiungechronicle.googleapis.comcome prefisso a questo valore. Per l'elenco completo, consulta Endpoint regionali.project: sostituisci<PROJECT_NUMBER>con il numero di progetto in IAM e amministrazione > Impostazioni.endpoint: mantieni l'impostazionechronicle.googleapis.com.log_type: impostato suADMANAGER_PLUSesattamente come appare in Chronicle.ingestion_labels: etichette facoltative in formato YAML.
Esportatore API di importazione legacy
Se utilizzi il file di autenticazione dell'importazione dell'opzione 2, sostituisci il blocco
exporterscon il seguente. Impostacreds_file_pathsul percorso del file di autenticazione dell'acquisizione e, se l'istanza si trova al di fuori degli Stati Uniti, sostituiscimalachiteingestion-pa.googleapis.comcon il tuo endpoint regionale (ad esempio,europe-malachiteingestion-pa.googleapis.com).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
Salva il file di configurazione
Dopo la modifica, salva il file:
- Linux: premi
Ctrl+O, poiEntere infineCtrl+X. - Windows: fai clic su File > Salva
Riavvia l'agente Bindplane per applicare le modifiche
Linux
Per riavviare l'agente Bindplane in Linux, esegui questo comando:
sudo systemctl restart observiq-otel-collectorVerifica che il servizio sia in esecuzione:
sudo systemctl status observiq-otel-collectorControlla i log per individuare eventuali errori:
sudo journalctl -u observiq-otel-collector -f
Windows
Per riavviare l'agente Bindplane in Windows, scegli una delle seguenti opzioni:
Utilizzando il prompt dei comandi o PowerShell come amministratore:
net stop observiq-otel-collector && net start observiq-otel-collectorUtilizzo della console Services:
- Premi
Win+R, digitaservices.msce premi Invio. - Individua observIQ Distro for OpenTelemetry Collector.
- Fai clic con il tasto destro del mouse e seleziona Riavvia.
- Premi
Verifica che il servizio sia in esecuzione:
sc query observiq-otel-collectorControlla i log per verificare la presenza di errori:
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
Configurare l'inoltro di syslog di ManageEngine ADManager Plus
- Accedi ad ADManager Plus.
- Vai alla scheda Amministrazione.
- In System Settings (Impostazioni di sistema), fai clic su Integrations (Integrazioni).
In Inoltro dei log, fai clic su Syslog.
Configura i seguenti campi:
- Server Syslog: inserisci il nome del server Syslog. Inserisci l'indirizzo IP o il nome host dell'host dell'agente Bindplane.
- Porta: inserisci il numero di porta. Inserisci
514. - Protocollo: scegli il protocollo appropriato, TCP o UDP, per l'inoltro dei log. Seleziona TCP.
- Standard Syslog: seleziona il formato del messaggio syslog che preferisci, RFC 3164, RFC 5424 o RawLog. Seleziona RFC 5424 (opzione consigliata).
- Formato dei dati: inserisci il formato dei dati. Configura il formato dei dati in base alle esigenze del tuo ambiente.
Fai clic su Salva per salvare la configurazione.
Dopo la configurazione, ADManager Plus inizierà a inoltrare i log delle azioni di gestione all'agente Bindplane, che a sua volta li invierà a Google SecOps.
Tabella di mappatura UDM
| Campo log | Mappatura UDM | Logica |
|---|---|---|
| ipPhone | event.idm.read_only_udm.additional.fields | Unita come etichetta con chiave "ipPhone" e valore da ipPhone se ipPhone != "" |
| L | event.idm.read_only_udm.additional.fields | Unito come etichetta con chiave "l" e valore da l se l != "" |
| lockoutTime | event.idm.read_only_udm.additional.fields | Unito come etichetta con la chiave "lockoutTime" e il valore di lockoutTime se lockoutTime != "" |
| Sposta da | event.idm.read_only_udm.additional.fields | Unito come etichetta con chiave "Move From" e valore di Move_From se Move_From != "" |
| Sposta in | event.idm.read_only_udm.additional.fields | Unito come etichetta con chiave "Sposta in" e valore da Move_To se Move_To != "" |
| msg | event.idm.read_only_udm.additional.fields | Unito come etichetta con la chiave "member" e il valore di msg se msg != "" |
| sn | event.idm.read_only_udm.additional.fields | Unito come etichetta con chiave "sn" e valore da sn se sn != "" |
| st | event.idm.read_only_udm.additional.fields | Unito come etichetta con la chiave "st" e il valore di st se st != "" |
| Nome modello | event.idm.read_only_udm.additional.fields | Unito come etichetta con chiave "Template Name" e valore di Template_Name se Template_Name != "" |
| Stato | event.idm.read_only_udm.metadata.description | Valore preso da Stato se Stato != "" |
| tempo | event.idm.read_only_udm.metadata.event_timestamp | Convertito dal formato ora al formato timestamp se ora != "" |
| event.idm.read_only_udm.metadata.event_type | Derivato: se has_principal_user == "true" allora "USER_UNCATEGORIZED"; altrimenti se has_principal == "true" allora "STATUS_UPDATE"; altrimenti "GENERIC_EVENT" | |
| TechnicianName | event.idm.read_only_udm.metadata.product_event_type | Valore preso da TechnicianName se TechnicianName != "" |
| event.idm.read_only_udm.metadata.product_name | Impostato su "ADMANAGER_PLUS" | |
| event.idm.read_only_udm.metadata.vendor_name | Impostato su "ADMANAGER_PLUS" | |
| Nome di dominio | event.idm.read_only_udm.principal.administrative_domain | Valore preso da Domain_Name se Domain_Name != "" |
| nome host | event.idm.read_only_udm.principal.asset.hostname | Valore preso dal nome host se il nome host è diverso da "" |
| posta | event.idm.read_only_udm.principal.email | Valore estratto dalla posta se mail != "" |
| nome host | event.idm.read_only_udm.principal.hostname | Valore estratto dal nome host se nome host != "" |
| co | event.idm.read_only_udm.principal.location.city | Valore estratto da co se co != "" |
| Attività | event.idm.read_only_udm.principal.resource.name | Valore preso dall'attività se l'attività != "" |
| wWWHomePage | event.idm.read_only_udm.principal.url | Valore preso da wWWHomePage se wWWHomePage != "" |
| Tipo di password | event.idm.read_only_udm.principal.user.attribute.labels | Unito come etichetta con chiave "Password Type" e valore di Password_Type se Password_Type != "" |
| countryCode | event.idm.read_only_udm.principal.user.attribute.labels | Unito come etichetta con la chiave "countryCode" e il valore di countryCode se countryCode != "" |
| password | event.idm.read_only_udm.principal.user.attribute.labels | Unito come etichetta con chiave "password" e valore della password se password != "" |
| postalCode | event.idm.read_only_udm.principal.user.attribute.labels | Unito come etichetta con chiave "postalCode" e valore di postalCode se postalCode != "" |
| primaryGroupID | event.idm.read_only_udm.principal.user.attribute.labels | Unito come etichetta con la chiave "primaryGroupID" e il valore di primaryGroupID se primaryGroupID != "" |
| userAccountControl | event.idm.read_only_udm.principal.user.attribute.labels | Unito come etichetta con chiave "userAccountControl" e valore di userAccountControl se userAccountControl != "" |
| userPrincipalName | event.idm.read_only_udm.principal.user.attribute.labels | Unito come etichetta con la chiave "userPrincipalName" e il valore di userPrincipalName se userPrincipalName != "" |
| azienda | event.idm.read_only_udm.principal.user.company_name | Valore preso dall'azienda se l'azienda != "" |
| reparto | event.idm.read_only_udm.principal.user.department | Unito al reparto se reparto != "" |
| givenName | event.idm.read_only_udm.principal.user.first_name | Valore estratto da givenName se givenName != "" |
| physicalDeliveryOfficeName | event.idm.read_only_udm.principal.user.office_address.name | Valore preso da physicalDeliveryOfficeName se physicalDeliveryOfficeName != "" |
| streetAddress | event.idm.read_only_udm.principal.user.personal_address.name | Valore estratto da streetAddress se streetAddress != "" |
| homePhone | event.idm.read_only_udm.principal.user.phone_numbers | Unito a homePhone se homePhone != "" |
| Nome utente | event.idm.read_only_udm.principal.user.user_display_name | Valore preso da User_Name se User_Name != ""; altrimenti da Object_Name se Object_Name != "" |
| sAMAccountName | event.idm.read_only_udm.principal.user.userid | Valore preso da sAMAccountName se sAMAccountName != "" |
| AZIONE | event.idm.read_only_udm.security_result.action_details | Valore preso da ACTION se ACTION != "" |
| descrizione | event.idm.read_only_udm.security_result.description | Valore preso dalla descrizione se la descrizione è diversa da "" |
| Nome container | event.idm.read_only_udm.security_result.detection_fields | Derivato da grok container_Name: unito come etichetta con chiave "Container_Name_DC_value1" e valore da dc_label_1 se dc_label_1 != "" |
| Nome container | event.idm.read_only_udm.security_result.detection_fields | Derivato da container_Name grok: unito come etichetta con chiave "Container_Name_DC_value2" e valore da dc_label_2 se dc_label_2 != "" |
| Nome container | event.idm.read_only_udm.security_result.detection_fields | Derivato da container_Name grok: unito come etichetta con chiave "Container_Name_OU_value1" e valore da ou_label_1 se ou_label_1 != "" |
| Nome container | event.idm.read_only_udm.security_result.detection_fields | Derivato da grok container_Name: unito come etichetta con la chiave "Container_Name_OU_value2" e il valore di ou_label_2 se ou_label_2 != "" |
| Nome container | event.idm.read_only_udm.security_result.detection_fields | Derivato da container_Name grok: unito come etichetta con chiave "Container_Name_OU_value3" e valore da ou_label_3 se ou_label_3 != "" |
| Gruppo principale | event.idm.read_only_udm.security_result.detection_fields | Derivato da Primary_Group grok: unito come etichetta con chiave "Primary_Group_CN_value1" e valore da cn_label_1 se cn_label_1 != "" |
| Gruppo principale | event.idm.read_only_udm.security_result.detection_fields | Derivato da grok Primary_Group: unito come etichetta con chiave "Primary_Group_CN_value2" e valore da cn_label_2 se cn_label_2 != "" |
| Gruppo principale | event.idm.read_only_udm.security_result.detection_fields | Derivato da Primary_Group grok: unito come etichetta con la chiave "Primary_Group_DC_value1" e il valore di primary_dc_label_1 se primary_dc_label_1 != "" |
| Gruppo principale | event.idm.read_only_udm.security_result.detection_fields | Derivato da Primary_Group grok: unito come etichetta con chiave "Primary_Group_DC_value2" e valore da primary_dc_label_2 se primary_dc_label_2 != "" |
| accountExpires | event.idm.read_only_udm.security_result.detection_fields | Unito come etichetta con chiave "accountExpires" e valore di accountExpires se accountExpires != "" |
| manager | event.idm.read_only_udm.security_result.detection_fields | Derivato dal grok del gestore: unito come etichetta con chiave "manager_cn_value1" e valore da manager_cn_value1 se manager_cn_value1 != "" |
| manager | event.idm.read_only_udm.security_result.detection_fields | Derivato da manager grok: unito come etichetta con la chiave "manager_dc_value1" e il valore di manager_dc_value1 se manager_dc_value1 != "" |
| manager | event.idm.read_only_udm.security_result.detection_fields | Derivato dal grok del gestore: unito come etichetta con la chiave "manager_dc_value2" e il valore di manager_dc_value2 se manager_dc_value2 != "" |
| manager | event.idm.read_only_udm.security_result.detection_fields | Derivato dal grok del gestore: unito come etichetta con la chiave "manager_ou_value1" e il valore di manager_ou_value1 se manager_ou_value1 != "" |
| manager | event.idm.read_only_udm.security_result.detection_fields | Derivato da manager grok: unito come etichetta con la chiave "manager_ou_value2" e il valore di manager_ou_value2 se manager_ou_value2 != "" |
| manager | event.idm.read_only_udm.security_result.detection_fields | Derivato da manager grok: unito come etichetta con chiave "manager_ou_value3" e valore da manager_ou_value3 se manager_ou_value3 != "" |
| pwdLastSet | event.idm.read_only_udm.security_result.detection_fields | Unito come etichetta con chiave "pwdLastSet" e valore di pwdLastSet se pwdLastSet != "" |
| ModuleName | event.idm.read_only_udm.target.resource.name | Valore preso da ModuleName se ModuleName != "" |
Object_Name |
event.idm.read_only_udm.target.user.user_display_name |
Mappato dal log delle modifiche |
syslog_priority |
event.idm.read_only_udm.additional.fields |
Mappato dal log delle modifiche |
syslog_version |
event.idm.read_only_udm.additional.fields |
Mappato dal log delle modifiche |
product_app_id |
event.idm.read_only_udm.additional.fields |
Mappato dal log delle modifiche |
User_Name |
event.idm.read_only_udm.target.user.user_display_name |
Mappato dal log delle modifiche |
User_Name |
event.idm.read_only_udm.target.user.userid |
Mappato dal log delle modifiche |
streetAddress |
event.idm.ready_only_udm.principal.user.personal_address.name |
Mappato dal log delle modifiche |
physicalDeliveryOfficeName |
event.idm.ready_only_udm.principal.user.office_address.name |
Mappato dal log delle modifiche |
postalCode |
event.idm.ready_only_udm.principal.user.attribute.labels |
Mappato dal log delle modifiche |
countryCode |
event.idm.ready_only_udm.principal.user.attribute.labels |
Mappato dal log delle modifiche |
company |
event.idm.ready_only_udm.principal.user.company_name |
Mappato dal log delle modifiche |
department |
event.idm.ready_only_udm.principal.user.department |
Mappato dal log delle modifiche |
accountExpires |
event.idm.ready_only_udm.security_result.detection_fields |
Mappato dal log delle modifiche |
ou_label_1 |
event.idm.ready_only_udm.security_result.detection_fields |
Mappato dal log delle modifiche |
ou_label_2 |
event.idm.ready_only_udm.security_result.detection_fields |
Mappato dal log delle modifiche |
ou_label_3 |
event.idm.ready_only_udm.security_result.detection_fields |
Mappato dal log delle modifiche |
dc_label_1 |
event.idm.ready_only_udm.security_result.detection_fields |
Mappato dal log delle modifiche |
dc_label_2 |
event.idm.ready_only_udm.security_result.detection_fields |
Mappato dal log delle modifiche |
cn_label_1 |
event.idm.ready_only_udm.security_result.detection_fields |
Mappato dal log delle modifiche |
cn_label_2 |
event.idm.ready_only_udm.security_result.detection_fields |
Mappato dal log delle modifiche |
primary_dc_label_1 |
event.idm.ready_only_udm.security_result.detection_fields |
Mappato dal log delle modifiche |
primary_dc_label_2 |
event.idm.ready_only_udm.security_result.detection_fields |
Mappato dal log delle modifiche |
manager_cn_value1 |
event.idm.ready_only_udm.security_result.detection_fields |
Mappato dal log delle modifiche |
, |
event.idm.ready_only_udm.security_result.detection_fields |
Mappato dal log delle modifiche |
and |
event.idm.ready_only_udm.security_result.detection_fields |
Mappato dal log delle modifiche |
givenName |
event.idm.ready_only_udm.user.first_name |
Mappato dal log delle modifiche |
sn |
event.idm.ready_only_udm.additional.fields |
Mappato dal log delle modifiche |
st |
event.idm.ready_only_udm.additional.fields |
Mappato dal log delle modifiche |
l |
event.idm.ready_only_udm.additional.fields |
Mappato dal log delle modifiche |
wWWHomePage |
event.idm.ready_only_udm.principal.url |
Mappato dal log delle modifiche |
homePhone |
event.idm.ready_only_udm.principal.user.phone_numbers |
Mappato dal log delle modifiche |
co |
event.idm.ready_only_udm.principal.location.city |
Mappato dal log delle modifiche |
Log delle modifiche
Visualizza il log delle modifiche per questo parser
Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.