Raccogli i log di ManageEngine ADManager Plus

Supportato in:

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.
  1. Accedi alla Google Cloud console e seleziona il progetto Google Cloud collegato alla tua istanza Google SecOps.
  2. Vai a IAM e amministrazione > Service account.
  3. Fai clic su Crea service account.
  4. 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).
  5. Fai clic su Crea e continua.
  6. Nella sezione Concedi a questo account di servizio l'accesso al progetto, fai clic su Seleziona un ruolo e seleziona Editor Chronicle.
  7. Fai clic su Continua e poi su Fine.
  8. Fai clic sul account di servizio che hai creato, quindi vai alla scheda Chiavi.
  9. Fai clic su Aggiungi chiave > Crea nuova chiave.
  10. Seleziona JSON e fai clic su Crea. Il file della chiave viene scaricato sul computer.
  11. Salva il file della chiave come ingestion-auth.json nella directory del raccoglitore Bindplane (/opt/observiq-otel-collector/ingestion-auth.json su Linux o C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json su Windows) oppure aggiorna creds_file_path in config.yaml in modo che corrisponda al percorso in cui lo salvi.
  12. 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)

  1. Accedi alla console Google SecOps.
  2. Vai a Impostazioni SIEM > Agenti di raccolta.
  3. Scarica il file di autenticazione dell'acquisizione.
  4. Salva il file in modo sicuro sul sistema in cui verrà installato l'agente Bindplane.

Recuperare l'ID cliente Google SecOps

  1. Accedi alla console Google SecOps.
  2. Vai a Impostazioni SIEM > Profilo.
  3. 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

  1. Apri Prompt dei comandi o PowerShell come amministratore.
  2. Esegui questo comando:

    msiexec /i "https://github.com/observIQ/bindplane-otel-collector/releases/latest/download/observiq-otel-collector.msi" /quiet
    
  3. Attendi il completamento dell'installazione.

  4. Verifica l'installazione eseguendo:

    sc query observiq-otel-collector
    

Il servizio dovrebbe essere visualizzato come RUNNING.

Installazione di Linux

  1. Apri un terminale con privilegi root o sudo.
  2. Esegui questo comando:

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-otel-collector/releases/latest/download/install_unix.sh)" install_unix.sh
    
  3. Attendi il completamento dell'installazione.

  4. 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.yaml
    
  • Windows:

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

Modifica il file di configurazione

  1. Sostituisci l'intero contenuto di config.yaml con 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_plus
    
  2. Sostituisci i seguenti segnaposto:

    • Configurazione del destinatario:

      • Il ricevitore utilizza tcplog per ricevere i dati syslog sulla porta TCP 514.
      • listen_address: imposta su 0.0.0.0:514 per ascoltare su tutte le interfacce sulla porta 514.
    • 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
      • <CUSTOMER_ID>: l'ID cliente del passaggio precedente.
      • location: sostituisci <LOCATION> con la regione della tua istanza Google SecOps (ad esempio us, europe o asia-southeast1). L'esportatore aggiunge chronicle.googleapis.com come 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'impostazione chronicle.googleapis.com.
      • log_type: impostato su ADMANAGER_PLUS esattamente 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 exporters con il seguente. Imposta creds_file_path sul percorso del file di autenticazione dell'acquisizione e, se l'istanza si trova al di fuori degli Stati Uniti, sostituisci malachiteingestion-pa.googleapis.com con 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, poi Enter e infine Ctrl+X.
  • Windows: fai clic su File > Salva

Riavvia l'agente Bindplane per applicare le modifiche

Linux

  1. Per riavviare l'agente Bindplane in Linux, esegui questo comando:

    sudo systemctl restart observiq-otel-collector
    
  2. Verifica che il servizio sia in esecuzione:

    sudo systemctl status observiq-otel-collector
    
  3. Controlla i log per individuare eventuali errori:

    sudo journalctl -u observiq-otel-collector -f
    

Windows

  1. 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-collector
      
    • Utilizzo della console Services:

      1. Premi Win+R, digita services.msc e premi Invio.
      2. Individua observIQ Distro for OpenTelemetry Collector.
      3. Fai clic con il tasto destro del mouse e seleziona Riavvia.
  2. Verifica che il servizio sia in esecuzione:

    sc query observiq-otel-collector
    
  3. Controlla 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

  1. Accedi ad ADManager Plus.
  2. Vai alla scheda Amministrazione.
  3. In System Settings (Impostazioni di sistema), fai clic su Integrations (Integrazioni).
  4. In Inoltro dei log, fai clic su Syslog.

  5. 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.
  6. 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.