Raccogliere i log di ManageEngine Exchange Reporter Plus

Supportato in:

Questo documento spiega come configurare ManageEngine Exchange Reporter Plus per inviare i log a Google Security Operations utilizzando i webhook.

ManageEngine Exchange Reporter Plus è una soluzione di reporting, controllo e monitoraggio basata sul web per gli ambienti Microsoft Exchange Server ed Exchange Online. Fornisce report completi su dimensioni delle caselle postali, traffico email, cartelle pubbliche, log Exchange ActiveSync e log di controllo per le attività di amministrazione e le modifiche alla configurazione nelle implementazioni Exchange ibride.

Prima di iniziare

Assicurati di soddisfare i seguenti prerequisiti:

  • Un'istanza Google SecOps
  • ManageEngine Exchange Reporter Plus installato e configurato per monitorare Exchange Server o Exchange Online
  • Accesso amministrativo alla console web di ManageEngine Exchange Reporter Plus
  • Accesso a Google Cloud Console (per la creazione della chiave API)

Crea un feed webhook in Google SecOps

Creare il feed

  1. Vai a Impostazioni SIEM > Feed.
  2. Fai clic su Aggiungi nuovo feed.
  3. Nella pagina successiva, fai clic su Configura un singolo feed.
  4. Nel campo Nome feed, inserisci un nome per il feed (ad esempio, ManageEngine Exchange Reporter Plus Logs).
  5. Seleziona Webhook come Tipo di origine.
  6. Seleziona ManageEngine Exchange Reporter Plus come Tipo di log.
  7. Fai clic su Avanti.
  8. Specifica i valori per i seguenti parametri di input:
    • (Facoltativo) Delimitatore di divisione: inserisci \n per dividere gli eventi su più righe.
    • Spazio dei nomi dell'asset: lo spazio dei nomi dell'asset
    • Etichette di importazione: l'etichetta da applicare agli eventi di questo feed
  9. Fai clic su Avanti.
  10. Controlla la nuova configurazione del feed nella schermata Finalizza e poi fai clic su Invia.

Genera e salva la chiave segreta

Dopo aver creato il feed, devi generare una chiave segreta per l'autenticazione:

  1. Nella pagina dei dettagli del feed, fai clic su Genera chiave segreta.
  2. Una finestra di dialogo mostra la chiave segreta.
  3. Copia e salva la chiave segreta in modo sicuro.

Importante: la chiave segreta viene visualizzata una sola volta e non può essere recuperata in un secondo momento. Se la perdi, devi generare una nuova chiave segreta.

Recuperare l'URL dell'endpoint del feed

  1. Vai alla scheda Dettagli del feed.
  2. Nella sezione Endpoint Information (Informazioni sull'endpoint), copia l'URL dell'endpoint del feed.
  3. Il formato dell'URL è:

    https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate
    

    o

    https://<REGION>-malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate
    
  4. Salva questo URL per i passaggi successivi.

  5. Fai clic su Fine.

Creare una chiave API Google Cloud

Chronicle richiede una chiave API per l'autenticazione. Crea una chiave API con limitazioni nella Google Cloud Console.

Crea la chiave API

  1. Vai alla pagina Credenziali della console Google Cloud.
  2. Seleziona il tuo progetto (quello associato alla tua istanza di Chronicle).
  3. Fai clic su Crea credenziali > Chiave API.
  4. Viene creata una chiave API e visualizzata in una finestra di dialogo.
  5. Fai clic su Modifica chiave API per limitare la chiave.

Limitare la chiave API

  1. Nella pagina delle impostazioni Chiave API:
    • Nome: inserisci un nome descrittivo (ad esempio, Chronicle Webhook API Key)
  2. In Limitazioni API:
    1. Seleziona Limita chiave.
    2. Nel menu a discesa Seleziona API, cerca e seleziona API Google SecOps (o API Chronicle).
  3. Fai clic su Salva.
  4. Copia il valore della chiave API dal campo Chiave API nella parte superiore della pagina.
  5. Salva la chiave API in modo sicuro.

Configurare il webhook di ManageEngine Exchange Reporter Plus

Costruisci l'URL webhook

  • Combina l'URL dell'endpoint Chronicle, la chiave API e la chiave segreta:

    <ENDPOINT_URL>?key=<API_KEY>&secret=<SECRET_KEY>
    
  • Esempio:

    https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate?key=AIzaSyD...&secret=abcd1234...
    

Configurare l'inoltro dei log in Exchange Reporter Plus

  1. Accedi alla console web ManageEngine Exchange Reporter Plus come amministratore.
  2. Vai a Impostazioni > Amministrazione > Impostazioni generali > Log Forwarder.
  3. Seleziona la casella di controllo Abilita inoltro log.
  4. Fai clic sulla scheda Webhook.
  5. Fornisci i seguenti dettagli di configurazione:
    • Metodo HTTP: seleziona POST.
    • URL HTTP: incolla l'URL webhook completo creato nel passaggio precedente (l'URL dell'endpoint Chronicle con la chiave API e la chiave segreta aggiunte come parametri di ricerca).
  6. Nella sezione Impostazioni avanzate:
    1. Fai clic su Intestazioni delle richieste HTTP.
    2. Aggiungi la seguente intestazione:
      • Chiave: Content-Type
      • Valore: application/json
  7. Fai clic su Salva.

Verificare l'inoltro dei log

  1. Dopo aver salvato la configurazione, Exchange Reporter Plus inizierà a inoltrare i log di controllo a Google SecOps tramite l'endpoint webhook.
  2. Accedi alla console Google SecOps e verifica che i log vengano visualizzati nell'interfaccia Ricerca con l'etichetta di importazione MANAGE_ENGINE_REPORTER_PLUS.

Configurazione del firewall

Assicurati che siano configurate le seguenti regole firewall.

In uscita dal server Exchange Reporter Plus:

  • Protocollo: HTTPS (TCP 443)
  • Destinazione: endpoint regionale di Chronicle (malachiteingestion-pa.googleapis.com o il tuo endpoint regionale)
  • Scopo: consegna dei log a Google SecOps tramite webhook

Riferimento ai metodi di autenticazione

I feed webhook di Chronicle supportano più metodi di autenticazione. Scegli il metodo supportato dal tuo fornitore.

Se il tuo fornitore supporta le intestazioni HTTP personalizzate, utilizza questo metodo per una maggiore sicurezza.

  • Formato della richiesta:

    POST <ENDPOINT_URL> HTTP/1.1
    Content-Type: application/json
    x-goog-chronicle-auth: <API_KEY>
    x-chronicle-auth: <SECRET_KEY>
    
    {
            "event": "data",
            "timestamp": "2025-01-15T10:30:00Z"
    }
    

Vantaggi:

  • Chiave API e secret non visibili nell'URL
  • Più sicuro (le intestazioni non vengono registrate nei log di accesso del server web)
  • Metodo preferito se supportato dal fornitore

Metodo 2: parametri di query

Se il fornitore non supporta le intestazioni personalizzate, aggiungi le credenziali all'URL.

  • Formato dell'URL:

    <ENDPOINT_URL>?key=<API_KEY>&secret=<SECRET_KEY>
    
  • Esempio:

    https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate?key=AIzaSyD...&secret=abcd1234...
    
  • Formato della richiesta:

    POST <ENDPOINT_URL>?key=<API_KEY>&secret=<SECRET_KEY> HTTP/1.1
    Content-Type: application/json
    
    {
            "event": "data",
            "timestamp": "2025-01-15T10:30:00Z"
    }
    

Svantaggi: - Credenziali visibili nell'URL - Potrebbero essere registrate nei log di accesso del web server - Meno sicure degli header

Metodo 3: ibrido (URL + intestazione)

Alcune configurazioni utilizzano la chiave API nell'URL e la chiave segreta nell'intestazione.

  • Formato della richiesta:

    POST <ENDPOINT_URL>?key=<API_KEY> HTTP/1.1
    Content-Type: application/json
    x-chronicle-auth: <SECRET_KEY>
    
    {
            "event": "data",
            "timestamp": "2025-01-15T10:30:00Z"
    }
    

Nomi delle intestazioni di autenticazione

Chronicle accetta i seguenti nomi di intestazione per l'autenticazione:

Per la chiave API:

  • x-goog-chronicle-auth (consigliata)
  • X-Goog-Chronicle-Auth (senza distinzione tra maiuscole e minuscole)

Per la chiave segreta:

  • x-chronicle-auth (consigliata)
  • X-Chronicle-Auth (senza distinzione tra maiuscole e minuscole)

Limiti e best practice per i webhook

Limiti per le richieste

Limite Valore
Dimensioni massime della richiesta 4 MB
QPS max (query al secondo) 15.000
Timeout richieste 30 secondi
Comportamento di ripetizione Automatico con backoff esponenziale

Tabella di mappatura UDM

Campo log Mappatura UDM Logic
msg.OrganizationId additional.fields Etichette unite con la chiave "OrganizationId" e il valore di msg.OrganizationId; la chiave "MailboxGuid" e il valore di msg.MailboxGuid; la chiave "RecordType" e il valore di msg.RecordType
msg.MailboxGuid additional.fields
msg.RecordType additional.fields
msg.CreationTime metadata.event_type Impostato sul valore di event_type se non è vuoto; altrimenti "USER_UNCATEGORIZED" se msg.Operation == "Update"; altrimenti "USER_CREATION" se msg.Operation == "Create" e msg.MailboxOwnerUPN non è vuoto; altrimenti "USER_UNCATEGORIZED" se msg.Operation == "Create"; altrimenti "USER_UNCATEGORIZED" se msg.UserId non è vuoto; altrimenti "STATUS_UPDATE" se msg.ClientIP non è vuoto; altrimenti "GENERIC_EVENT"
msg.Operation metadata.product_event_type Valore copiato direttamente
msg.Id metadata.product_log_id Valore copiato direttamente
msg.ClientVersion metadata.product_version Valore di msg.ClientVersion se non è vuoto, altrimenti msg.Version convertito in stringa
msg.Version metadata.product_version
AffectedItems.0.InternetMessageId network.email.mail_id Gsub <
AffectedItems network.email.subject Analizzato come JSON, elemento estratto.Soggetto, unito se trovato
msg.ClientInfoString network.http.user_agent Valore di msg.ClientInfoString se non è vuoto, altrimenti msg.Client
msg.Client network.http.user_agent
msg.ClientProcessName principal.application Valore copiato direttamente
msg.OriginatingServer principal.hostname Estratto utilizzando il pattern grok, se l'operazione va a buon fine, altrimenti il valore viene copiato direttamente
clientIP principal.ip Estratto da msg.ClientIP utilizzando grok
clientPort principal.port Estratto da msg.ClientIP utilizzando grok, convertito in numero intero
msg.UserKey principal.user.attribute.labels Imposta la chiave dell'etichetta su "UserKey", il valore su msg.UserKey, unito
msg.UserType principal.user.attribute.roles Imposta roles.name su msg.UserType, unito
msg.UserId principal.user.email_addresses Unito se msg.UserId corrisponde all'espressione regolare dell'email
msg.UserId principal.user.userid Valore copiato direttamente
msg.MailboxOwnerSid principal.user.windows_sid Valore di msg.MailboxOwnerSid se non è vuoto, altrimenti msg.LogonUserSid
msg.LogonUserSid principal.user.windows_sid
security_result security_result Unito dall'hash security_result
security_result_action security_result.action Unito da security_result_action
msg.ResultStatus security_result.action_details Valore copiato direttamente
msg.RecordType security_result.detection_fields Convertito in stringa, impostata la chiave "RecordType", valore su msg.RecordType, unito
msg.OrganizationName target.administrative_domain Valore copiato direttamente
msg.DestFolder target.file.full_path FileId e filePath estratti utilizzando grok, barre rovesciate gsubs, concatenati come fileId/filePath
host target.hostname Valore copiato direttamente
msg.Folder target.process.parent_process.file.full_path Sono stati estratti parentFileId e parentFilePath utilizzando grok, sono state sostituite le barre rovesciate e sono stati concatenati come parentFileId/parentFilePath
msg.MailboxOwnerUPN target.user.email_addresses Unito se corrisponde all'espressione regolare dell'email
msg.MailboxOwnerUPN target.user.user_display_name Imposta se contiene spazio
msg.MailboxOwnerUPN target.user.userid Imposta se non è un'email e non c'è spazio
metadata.product_name metadata.product_name Imposta su "Manage Engine"
metadata.vendor_name metadata.vendor_name Imposta su "Manage Engine Reporter Plus"

Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.