ManageEngine Exchange Reporter Plus-Logs erfassen

Unterstützt in:

In diesem Dokument wird beschrieben, wie Sie ManageEngine Exchange Reporter Plus so konfigurieren, dass Logs mithilfe von Webhooks an Google Security Operations gesendet werden.

ManageEngine Exchange Reporter Plus ist eine webbasierte Lösung für Berichterstellung, Überprüfung und Monitoring für Microsoft Exchange Server- und Exchange Online-Umgebungen. Es bietet umfassende Berichte zu Postfachgrößen, E-Mail-Traffic, öffentlichen Ordnern, Exchange ActiveSync-Protokollen und Audit-Logs für Administratoraktivitäten und Konfigurationsänderungen in hybriden Exchange-Bereitstellungen.

Hinweis

Prüfen Sie, ob die folgenden Voraussetzungen erfüllt sind:

  • Eine Google SecOps-Instanz
  • ManageEngine Exchange Reporter Plus ist installiert und für die Überwachung von Exchange Server oder Exchange Online konfiguriert.
  • Administratorzugriff auf die ManageEngine Exchange Reporter Plus-Webkonsole
  • Zugriff auf die Google Cloud Console (zum Erstellen von API-Schlüsseln)

Webhook-Feed in Google SecOps erstellen

Feed erstellen

  1. Rufen Sie die SIEM-Einstellungen > Feeds auf.
  2. Klicken Sie auf Neuen Feed hinzufügen.
  3. Klicken Sie auf der nächsten Seite auf Einen einzelnen Feed konfigurieren.
  4. Geben Sie im Feld Feedname einen Namen für den Feed ein, z. B. ManageEngine Exchange Reporter Plus Logs.
  5. Wählen Sie Webhook als Quelltyp aus.
  6. Wählen Sie ManageEngine Exchange Reporter Plus als Logtyp aus.
  7. Klicken Sie auf Weiter.
  8. Geben Sie Werte für die folgenden Eingabeparameter an:
    • Trennzeichen für Aufteilung (optional): Geben Sie \n ein, um mehrzeilige Ereignisse aufzuteilen.
    • Asset-Namespace: Der Asset-Namespace
    • Labels für Datenaufnahme: Das Label, das auf die Ereignisse aus diesem Feed angewendet werden soll
  9. Klicken Sie auf Weiter.
  10. Prüfen Sie die neue Feedkonfiguration auf dem Bildschirm Abschließen und klicken Sie dann auf Senden.

Secret-Schlüssel generieren und speichern

Nachdem Sie den Feed erstellt haben, müssen Sie einen geheimen Schlüssel für die Authentifizierung generieren:

  1. Klicken Sie auf der Seite mit den Feeddetails auf Secret Key generieren.
  2. In einem Dialogfeld wird der geheime Schlüssel angezeigt.
  3. Kopieren und speichern Sie den geheimen Schlüssel sicher.

Wichtig: Der geheime Schlüssel wird nur einmal angezeigt und kann später nicht mehr abgerufen werden. Wenn Sie den Schlüssel verlieren, müssen Sie einen neuen geheimen Schlüssel generieren.

Feed-Endpunkt-URL abrufen

  1. Rufen Sie den Tab Details des Feeds auf.
  2. Kopieren Sie im Abschnitt Endpunktinformationen die Feed-Endpunkt-URL.
  3. Das URL-Format lautet:

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

    oder

    https://<REGION>-malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate
    
  4. Speichern Sie diese URL für die nächsten Schritte.

  5. Klicken Sie auf Fertig.

Google Cloud API-Schlüssel erstellen

Für die Authentifizierung in Chronicle ist ein API-Schlüssel erforderlich. Erstellen Sie in der Google Cloud Console einen eingeschränkten API-Schlüssel.

API-Schlüssel erstellen

  1. Rufen Sie die Seite „Anmeldedaten“ in der Google Cloud Console auf.
  2. Wählen Sie Ihr Projekt aus (das Projekt, das mit Ihrer Chronicle-Instanz verknüpft ist).
  3. Klicken Sie auf Anmeldedaten erstellen > API-Schlüssel.
  4. Ein API-Schlüssel wird erstellt und in einem Dialogfeld angezeigt.
  5. Klicken Sie auf API-Schlüssel bearbeiten, um den Schlüssel einzuschränken.

API-Schlüssel einschränken

  1. Auf der Seite mit den API-Schlüssel-Einstellungen:
    • Name: Geben Sie einen aussagekräftigen Namen ein, z. B. Chronicle Webhook API Key.
  2. Gehen Sie unter API-Einschränkungen so vor:
    1. Wählen Sie Schlüssel einschränken aus.
    2. Suchen Sie im Drop-down-Menü APIs auswählen nach Google SecOps API (oder Chronicle API) und wählen Sie die API aus.
  3. Klicken Sie auf Speichern.
  4. Kopieren Sie den API-Schlüsselwert aus dem Feld API-Schlüssel oben auf der Seite.
  5. Speichern Sie den API-Schlüssel sicher.

ManageEngine Exchange Reporter Plus-Webhook konfigurieren

Webhook-URL erstellen

  • Kombinieren Sie die Chronicle-Endpunkt-URL, den API-Schlüssel und den Secret-Schlüssel:

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

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

Log-Weiterleitung in Exchange Reporter Plus konfigurieren

  1. Melden Sie sich als Administrator in der Webkonsole von ManageEngine Exchange Reporter Plus an.
  2. Gehen Sie zu Einstellungen > „Admin“ > „Allgemeine Einstellungen“ > „Log Forwarder“.
  3. Klicken Sie das Kästchen Log-Weiterleitung aktivieren an.
  4. Klicken Sie auf den Tab Webhook.
  5. Geben Sie die folgenden Konfigurationsdetails an:
    • HTTP-Methode: Wählen Sie POST aus.
    • HTTP URL (HTTP-URL): Fügen Sie die vollständige Webhook-URL ein, die Sie im vorherigen Schritt erstellt haben (die Chronicle-Endpunkt-URL mit dem API-Schlüssel und dem geheimen Schlüssel als angehängte Suchparameter).
  6. Im Abschnitt Erweiterte Einstellungen:
    1. Klicken Sie auf HTTP-Anfrageheader.
    2. Fügen Sie den folgenden Header hinzu:
      • Key: Content-Type
      • Wert: application/json
  7. Klicken Sie auf Speichern.

Logweiterleitung überprüfen

  1. Nachdem Sie die Konfiguration gespeichert haben, beginnt Exchange Reporter Plus, Audit-Logs über den Webhook-Endpunkt an Google SecOps weiterzuleiten.
  2. Melden Sie sich in der Google SecOps Console an und prüfen Sie, ob Logs mit dem Erfassungslabel MANAGE_ENGINE_REPORTER_PLUS in der Search-Oberfläche angezeigt werden.

Firewallkonfiguration

Prüfen Sie, ob die folgenden Firewallregeln konfiguriert sind.

Ausgehend vom Exchange Reporter Plus-Server:

  • Protokoll: HTTPS (TCP 443)
  • Ziel: Regionaler Chronicle-Endpunkt (malachiteingestion-pa.googleapis.com oder Ihr regionaler Endpunkt)
  • Zweck: Bereitstellung von Logs für Google SecOps über Webhook

Referenz zu Authentifizierungsmethoden

Chronicle-Webhook-Feeds unterstützen mehrere Authentifizierungsmethoden. Wählen Sie die Methode aus, die von Ihrem Anbieter unterstützt wird.

Wenn Ihr Anbieter benutzerdefinierte HTTP-Header unterstützt, sollten Sie diese Methode für mehr Sicherheit verwenden.

  • Anfrageformat:

    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"
    }
    

Vorteile:

  • API-Schlüssel und Secret sind in der URL nicht sichtbar
  • Sicherer (Header werden nicht in Webserver-Zugriffslogs protokolliert)
  • Bevorzugte Methode, wenn der Anbieter sie unterstützt

Methode 2: Abfrageparameter

Wenn Ihr Anbieter keine benutzerdefinierten Headern unterstützt, hängen Sie die Anmeldedaten an die URL an.

  • URL-Format:

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

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

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

Nachteile: - Anmeldedaten in der URL sichtbar - Werden möglicherweise in Webserver-Zugriffsprotokollen protokolliert - Weniger sicher als Header

Methode 3: Hybrid (URL + Header)

Bei einigen Konfigurationen wird der API-Schlüssel in der URL und der geheime Schlüssel im Header verwendet.

  • Anfrageformat:

    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"
    }
    

Namen von Authentifizierungsheadern

Chronicle akzeptiert die folgenden Headernamen für die Authentifizierung:

Für API-Schlüssel:

  • x-goog-chronicle-auth (empfohlen)
  • X-Goog-Chronicle-Auth (keine Unterscheidung zwischen Groß- und Kleinschreibung)

Für den geheimen Schlüssel:

  • x-chronicle-auth (empfohlen)
  • X-Chronicle-Auth (keine Unterscheidung zwischen Groß- und Kleinschreibung)

Webhook-Limits und Best Practices

Anfragelimits

Limit Wert
Maximale Anfragengröße 4 MB
Maximale Abfragen pro Sekunde 15.000
Zeitlimit für Anfragen 30 Sekunden
Wiederholungsverhalten Automatisch mit exponentiellem Backoff

UDM-Zuordnungstabelle

Logfeld UDM-Zuordnung Logik
msg.OrganizationId additional.fields Zusammengeführte Labels mit dem Schlüssel „OrganizationId“ und dem Wert aus „msg.OrganizationId“, dem Schlüssel „MailboxGuid“ und dem Wert aus „msg.MailboxGuid“ sowie dem Schlüssel „RecordType“ und dem Wert aus „msg.RecordType“
msg.MailboxGuid additional.fields
msg.RecordType additional.fields
msg.CreationTime metadata.event_type Wird auf den Wert von event_type gesetzt, falls dieser nicht leer ist. Andernfalls wird „USER_UNCATEGORIZED“ festgelegt, wenn msg.Operation == „Update“ gilt. Andernfalls wird „USER_CREATION“ festgelegt, wenn msg.Operation == „Create“ und msg.MailboxOwnerUPN nicht leer ist. Andernfalls wird „USER_UNCATEGORIZED“ festgelegt, wenn msg.Operation == „Create“ gilt. Andernfalls wird „USER_UNCATEGORIZED“ festgelegt, wenn msg.UserId nicht leer ist. Andernfalls wird „STATUS_UPDATE“ festgelegt, wenn msg.ClientIP nicht leer ist. Andernfalls wird „GENERIC_EVENT“ festgelegt.
msg.Operation metadata.product_event_type Wert direkt kopiert
msg.Id metadata.product_log_id Wert direkt kopiert
msg.ClientVersion metadata.product_version Wert aus msg.ClientVersion, falls nicht leer, andernfalls msg.Version in String umgewandelt
msg.Version metadata.product_version
AffectedItems.0.InternetMessageId network.email.mail_id Gsub <
AffectedItems network.email.subject Als JSON geparst, extrahiertes item.Subject, zusammengeführt, falls gefunden
msg.ClientInfoString network.http.user_agent Wert aus „msg.ClientInfoString“, falls nicht leer, andernfalls „msg.Client“
msg.Client network.http.user_agent
msg.ClientProcessName principal.application Wert direkt kopiert
msg.OriginatingServer principal.hostname Extrahierte Daten, wenn erfolgreich, andernfalls direkt kopierter Wert
clientIP principal.ip Mit „grok“ aus „msg.ClientIP“ extrahiert
clientPort principal.port Mit „grok“ aus „msg.ClientIP“ extrahiert, in eine Ganzzahl konvertiert
msg.UserKey principal.user.attribute.labels Label-Schlüssel auf „UserKey“ festlegen, Wert auf „msg.UserKey“, zusammengeführt
msg.UserType principal.user.attribute.roles Setze „roles.name“ auf „msg.UserType“, zusammengeführt
msg.UserId principal.user.email_addresses Zusammengeführt, wenn msg.UserId mit dem regulären Ausdruck für E‑Mail-Adressen übereinstimmt
msg.UserId principal.user.userid Wert direkt kopiert
msg.MailboxOwnerSid principal.user.windows_sid Wert aus msg.MailboxOwnerSid, falls nicht leer, andernfalls msg.LogonUserSid
msg.LogonUserSid principal.user.windows_sid
security_result security_result Zusammengeführt aus dem Hashwert von „security_result“
security_result_action security_result.action Zusammengeführt aus security_result_action
msg.ResultStatus security_result.action_details Wert direkt kopiert
msg.RecordType security_result.detection_fields In String konvertiert, Schlüssel „RecordType“ festgelegt, Wert auf msg.RecordType gesetzt, zusammengeführt
msg.OrganizationName target.administrative_domain Wert direkt kopiert
msg.DestFolder target.file.full_path fileId und filePath mit „grok“ extrahiert, Backslashes mit „gsubs“ ersetzt, als „fileId/filePath“ verkettet
Host target.hostname Wert direkt kopiert
msg.Folder target.process.parent_process.file.full_path „parentFileId“ und „parentFilePath“ mit „grok“ extrahiert, Backslashes mit „gsub“ ersetzt, als „parentFileId/parentFilePath“ verkettet
msg.MailboxOwnerUPN target.user.email_addresses Zusammengeführt, wenn mit dem regulären Ausdruck für E‑Mail-Adressen übereinstimmt
msg.MailboxOwnerUPN target.user.user_display_name Festlegen, ob ein Leerzeichen enthalten ist
msg.MailboxOwnerUPN target.user.userid Festlegen, wenn keine E‑Mail-Adresse und kein Gruppenbereich
metadata.product_name metadata.product_name Auf „Manage Engine“ festlegen
metadata.vendor_name metadata.vendor_name Auf „ManageEngine Reporter Plus“ festgelegt

Benötigen Sie weitere Hilfe? Antworten von Community-Mitgliedern und Google SecOps-Experten erhalten