Collecter les journaux ManageEngine Exchange Reporter Plus

Compatible avec :

Ce document explique comment configurer ManageEngine Exchange Reporter Plus pour envoyer des journaux à Google Security Operations à l'aide de webhooks.

ManageEngine Exchange Reporter Plus est une solution Web de création de rapports, d'audit et de surveillance pour les environnements Microsoft Exchange Server et Exchange Online. Il fournit des rapports complets sur la taille des boîtes aux lettres, le trafic d'e-mails, les dossiers publics, les journaux Exchange ActiveSync et les journaux d'audit pour les activités d'administrateur et les modifications de configuration dans les déploiements Exchange hybrides.

Avant de commencer

Assurez-vous de remplir les conditions préalables suivantes :

  • Une instance Google SecOps
  • ManageEngine Exchange Reporter Plus installé et configuré pour surveiller Exchange Server ou Exchange Online
  • Accès administrateur à la console Web ManageEngine Exchange Reporter Plus
  • Accès à la Google Cloud Console (pour créer une clé API)

Créer un flux de webhook dans Google SecOps

Créer le flux

  1. Accédez à Paramètres SIEM> Flux.
  2. Cliquez sur Add New Feed (Ajouter un flux).
  3. Sur la page suivante, cliquez sur Configurer un seul flux.
  4. Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple, ManageEngine Exchange Reporter Plus Logs).
  5. Sélectionnez Webhook comme type de source.
  6. Sélectionnez ManageEngine Exchange Reporter Plus comme type de journal.
  7. Cliquez sur Suivant.
  8. Spécifiez les valeurs des paramètres d'entrée suivants :
    • Délimiteur de fractionnement (facultatif) : saisissez \n pour fractionner les événements multilignes.
    • Espace de noms de l'élément : espace de noms de l'élément
    • Libellés d'ingestion : libellé à appliquer aux événements de ce flux
  9. Cliquez sur Suivant.
  10. Vérifiez la configuration de votre nouveau flux sur l'écran Finaliser, puis cliquez sur Envoyer.

Générer et enregistrer une clé secrète

Après avoir créé le flux, vous devez générer une clé secrète pour l'authentification :

  1. Sur la page d'informations sur le flux, cliquez sur Générer une clé secrète.
  2. Une boîte de dialogue affiche la clé secrète.
  3. Copiez et enregistrez la clé secrète de manière sécurisée.

Important : La clé secrète ne s'affiche qu'une seule fois et ne peut pas être récupérée ultérieurement. Si vous la perdez, vous devrez générer une nouvelle clé secrète.

Obtenir l'URL du point de terminaison du flux

  1. Accédez à l'onglet Détails du flux.
  2. Dans la section Endpoint Information (Informations sur le point de terminaison), copiez l'URL du point de terminaison du flux.
  3. Le format d'URL est le suivant :

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

    ou

    https://<REGION>-malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate
    
  4. Enregistrez cette URL pour les étapes suivantes.

  5. Cliquez sur OK.

Créer une clé API Google Cloud

Chronicle nécessite une clé API pour l'authentification. Créez une clé API restreinte dans la Google Cloud Console.

Créer la clé API

  1. Accédez à la page Identifiants de la console Google Cloud.
  2. Sélectionnez votre projet (celui associé à votre instance Chronicle).
  3. Cliquez sur Créer des identifiants> Clé API.
  4. Une clé API est créée et affichée dans une boîte de dialogue.
  5. Cliquez sur Modifier la clé API pour la restreindre.

Restreindre la clé API

  1. Sur la page des paramètres Clé API :
    • Nom : saisissez un nom descriptif (par exemple, Chronicle Webhook API Key).
  2. Sous Restrictions relatives aux API :
    1. Sélectionnez Restreindre la clé.
    2. Dans le menu déroulant Sélectionner des API, recherchez et sélectionnez Google SecOps API (ou Chronicle API).
  3. Cliquez sur Enregistrer.
  4. Copiez la valeur de la clé API depuis le champ Clé API en haut de la page.
  5. Enregistrez la clé API de manière sécurisée.

Configurer le webhook ManageEngine Exchange Reporter Plus

Créer l'URL du webhook

  • Combinez l'URL du point de terminaison Chronicle, la clé API et la clé secrète :

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

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

Configurer le transfert de journaux dans Exchange Reporter Plus

  1. Connectez-vous à la console Web ManageEngine Exchange Reporter Plus en tant qu'administrateur.
  2. Accédez à Paramètres> Admin> Paramètres généraux> Transmetteur de journaux.
  3. Cochez la case Activer le transfert de journaux.
  4. Cliquez sur l'onglet Webhook.
  5. Fournissez les informations de configuration suivantes :
    • Méthode HTTP : sélectionnez POST.
    • URL HTTP : collez l'URL complète du webhook construite à l'étape précédente (l'URL du point de terminaison Chronicle avec la clé API et la clé secrète ajoutées en tant que paramètres de requête).
  6. Dans la section Paramètres avancés :
    1. Cliquez sur En-têtes de requête HTTP.
    2. Ajoutez l'en-tête suivant :
      • Key (Clé) : Content-Type
      • Valeur : application/json
  7. Cliquez sur Enregistrer.

Vérifier le transfert de journaux

  1. Une fois la configuration enregistrée, Exchange Reporter Plus commence à transférer les journaux d'audit vers Google SecOps via le point de terminaison du webhook.
  2. Connectez-vous à la console Google SecOps et vérifiez que les journaux s'affichent dans l'interface Rechercher avec le libellé d'ingestion MANAGE_ENGINE_REPORTER_PLUS.

Configuration du pare-feu

Assurez-vous que les règles de pare-feu suivantes sont configurées.

Sortant du serveur Exchange Reporter Plus :

  • Protocole : HTTPS (TCP 443)
  • Destination : point de terminaison régional Chronicle (malachiteingestion-pa.googleapis.com ou votre point de terminaison régional)
  • Objectif : diffusion des journaux vers Google SecOps via un webhook

Référence des méthodes d'authentification

Les flux de webhook Chronicle sont compatibles avec plusieurs méthodes d'authentification. Choisissez la méthode acceptée par votre fournisseur.

Si votre fournisseur accepte les en-têtes HTTP personnalisés, utilisez cette méthode pour une meilleure sécurité.

  • Format de la demande :

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

Avantages :

  • Clé API et code secret non visibles dans l'URL
  • Plus sécurisé (les en-têtes ne sont pas consignés dans les journaux d'accès au serveur Web)
  • Méthode à privilégier lorsque le fournisseur la prend en charge

Méthode 2 : Paramètres de requête

Si votre fournisseur n'accepte pas les en-têtes personnalisés, ajoutez les identifiants à l'URL.

  • Format de l'URL :

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

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

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

Inconvénients : - Les identifiants sont visibles dans l'URL. - Ils peuvent être enregistrés dans les journaux d'accès du serveur Web. - Ils sont moins sécurisés que les en-têtes.

Méthode 3 : Hybride (URL + en-tête)

Certaines configurations utilisent une clé API dans l'URL et une clé secrète dans l'en-tête.

  • Format de la demande :

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

Noms des en-têtes d'authentification

Chronicle accepte les noms d'en-tête suivants pour l'authentification :

Pour la clé API :

  • x-goog-chronicle-auth (recommandé)
  • X-Goog-Chronicle-Auth (non sensible à la casse)

Pour la clé secrète :

  • x-chronicle-auth (recommandé)
  • X-Chronicle-Auth (non sensible à la casse)

Limites et bonnes pratiques concernant les webhooks

Limites de requêtes

Limite Valeur
Taille maximale de la requête 4 Mo
RPS (requêtes par seconde) max. 15 000
Délai avant expiration de la requête 30 seconds
Comportement de nouvelle tentative Automatique avec intervalle exponentiel entre les tentatives

Table de mappage UDM

Champ de journal Mappage UDM Logique
msg.OrganizationId additional.fields Libellés fusionnés avec la clé "OrganizationId" et la valeur de msg.OrganizationId ; la clé "MailboxGuid" et la valeur de msg.MailboxGuid ; la clé "RecordType" et la valeur de msg.RecordType
msg.MailboxGuid additional.fields
msg.RecordType additional.fields
msg.CreationTime metadata.event_type Défini sur la valeur de event_type si elle n'est pas vide ; sinon, "USER_UNCATEGORIZED" si msg.Operation == "Update" ; sinon, "USER_CREATION" si msg.Operation == "Create" et msg.MailboxOwnerUPN n'est pas vide ; sinon, "USER_UNCATEGORIZED" si msg.Operation == "Create" ; sinon, "USER_UNCATEGORIZED" si msg.UserId n'est pas vide ; sinon, "STATUS_UPDATE" si msg.ClientIP n'est pas vide ; sinon, "GENERIC_EVENT".
msg.Operation metadata.product_event_type Valeur copiée directement
msg.Id metadata.product_log_id Valeur copiée directement
msg.ClientVersion metadata.product_version Valeur de msg.ClientVersion si elle n'est pas vide, sinon msg.Version converti en chaîne
msg.Version metadata.product_version
AffectedItems.0.InternetMessageId network.email.mail_id Gsub <
AffectedItems network.email.subject Analysé au format JSON, élément extrait "Subject", fusionné si trouvé
msg.ClientInfoString network.http.user_agent Valeur de msg.ClientInfoString si elle n'est pas vide, sinon msg.Client
msg.Client network.http.user_agent
msg.ClientProcessName principal.application Valeur copiée directement
msg.OriginatingServer principal.hostname Extrait à l'aide du modèle grok, si l'opération réussit, sinon la valeur est copiée directement
clientIP principal.ip Extrait de msg.ClientIP à l'aide de grok
clientPort principal.port Extrait de msg.ClientIP à l'aide de grok, converti en entier
msg.UserKey principal.user.attribute.labels Définissez la clé du libellé sur "UserKey", la valeur sur msg.UserKey et l'état sur "Fusionné".
msg.UserType principal.user.attribute.roles Définir roles.name sur msg.UserType, fusionné
msg.UserId principal.user.email_addresses Fusionné si msg.UserId correspond à l'expression régulière de l'adresse e-mail
msg.UserId principal.user.userid Valeur copiée directement
msg.MailboxOwnerSid principal.user.windows_sid Valeur de msg.MailboxOwnerSid si elle n'est pas vide, sinon msg.LogonUserSid
msg.LogonUserSid principal.user.windows_sid
security_result security_result Fusionné à partir du hachage security_result
security_result_action security_result.action Fusionné à partir de security_result_action
msg.ResultStatus security_result.action_details Valeur copiée directement
msg.RecordType security_result.detection_fields Converti en chaîne, clé "RecordType" définie, valeur définie sur msg.RecordType, fusionnée
msg.OrganizationName target.administrative_domain Valeur copiée directement
msg.DestFolder target.file.full_path Extraction de fileId et filePath à l'aide de grok, remplacement des barres obliques inverses, concaténation sous la forme fileId/filePath
hôte target.hostname Valeur copiée directement
msg.Folder target.process.parent_process.file.full_path Extraction de parentFileId et parentFilePath à l'aide de grok, remplacement des barres obliques inverses, concaténation sous la forme parentFileId/parentFilePath
msg.MailboxOwnerUPN target.user.email_addresses Fusionné si l'adresse e-mail correspond à l'expression régulière
msg.MailboxOwnerUPN target.user.user_display_name Définir si contient un espace
msg.MailboxOwnerUPN target.user.userid Définir si ce n'est pas un e-mail et qu'il n'y a pas d'espace
metadata.product_name metadata.product_name Définissez la valeur sur "ManageEngine".
metadata.vendor_name metadata.vendor_name Définissez-le sur "ManageEngine Reporter Plus".

Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.