ManageEngine Exchange Reporter Plus-Logs erfassen
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
- Rufen Sie die SIEM-Einstellungen > Feeds auf.
- Klicken Sie auf Neuen Feed hinzufügen.
- Klicken Sie auf der nächsten Seite auf Einen einzelnen Feed konfigurieren.
- Geben Sie im Feld Feedname einen Namen für den Feed ein, z. B.
ManageEngine Exchange Reporter Plus Logs. - Wählen Sie Webhook als Quelltyp aus.
- Wählen Sie ManageEngine Exchange Reporter Plus als Logtyp aus.
- Klicken Sie auf Weiter.
- Geben Sie Werte für die folgenden Eingabeparameter an:
- Trennzeichen für Aufteilung (optional): Geben Sie
\nein, 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
- Trennzeichen für Aufteilung (optional): Geben Sie
- Klicken Sie auf Weiter.
- 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:
- Klicken Sie auf der Seite mit den Feeddetails auf Secret Key generieren.
- In einem Dialogfeld wird der geheime Schlüssel angezeigt.
- 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
- Rufen Sie den Tab Details des Feeds auf.
- Kopieren Sie im Abschnitt Endpunktinformationen die Feed-Endpunkt-URL.
Das URL-Format lautet:
https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreateoder
https://<REGION>-malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreateSpeichern Sie diese URL für die nächsten Schritte.
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
- Rufen Sie die Seite „Anmeldedaten“ in der Google Cloud Console auf.
- Wählen Sie Ihr Projekt aus (das Projekt, das mit Ihrer Chronicle-Instanz verknüpft ist).
- Klicken Sie auf Anmeldedaten erstellen > API-Schlüssel.
- Ein API-Schlüssel wird erstellt und in einem Dialogfeld angezeigt.
- Klicken Sie auf API-Schlüssel bearbeiten, um den Schlüssel einzuschränken.
API-Schlüssel einschränken
- Auf der Seite mit den API-Schlüssel-Einstellungen:
- Name: Geben Sie einen aussagekräftigen Namen ein, z. B.
Chronicle Webhook API Key.
- Name: Geben Sie einen aussagekräftigen Namen ein, z. B.
- Gehen Sie unter API-Einschränkungen so vor:
- Wählen Sie Schlüssel einschränken aus.
- Suchen Sie im Drop-down-Menü APIs auswählen nach Google SecOps API (oder Chronicle API) und wählen Sie die API aus.
- Klicken Sie auf Speichern.
- Kopieren Sie den API-Schlüsselwert aus dem Feld API-Schlüssel oben auf der Seite.
- 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
- Melden Sie sich als Administrator in der Webkonsole von ManageEngine Exchange Reporter Plus an.
- Gehen Sie zu Einstellungen > „Admin“ > „Allgemeine Einstellungen“ > „Log Forwarder“.
- Klicken Sie das Kästchen Log-Weiterleitung aktivieren an.
- Klicken Sie auf den Tab Webhook.
- 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).
- Im Abschnitt Erweiterte Einstellungen:
- Klicken Sie auf HTTP-Anfrageheader.
- Fügen Sie den folgenden Header hinzu:
- Key:
Content-Type - Wert:
application/json
- Key:
Klicken Sie auf Speichern.
Logweiterleitung überprüfen
- Nachdem Sie die Konfiguration gespeichert haben, beginnt Exchange Reporter Plus, Audit-Logs über den Webhook-Endpunkt an Google SecOps weiterzuleiten.
- Melden Sie sich in der Google SecOps Console an und prüfen Sie, ob Logs mit dem Erfassungslabel
MANAGE_ENGINE_REPORTER_PLUSin 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.comoder 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.
Methode 1: Benutzerdefinierte Header (empfohlen)
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