Collecter les journaux de connexion Microsoft Entra ID

Compatible avec :

Ce document explique comment collecter les journaux de connexion Microsoft Entra ID (anciennement Azure Active Directory) en configurant un flux Google Security Operations. Vous pouvez configurer l'ingestion de deux manières : avec Azure Event Hub (recommandé) ou avec l'API tierce.

Avant de commencer

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

  • Une instance Google SecOps
  • Accès privilégié au portail Microsoft Azure
  • Rôle Administrateur de la sécurité ou Administrateur général dans Microsoft Entra ID (requis pour les paramètres de diagnostic)
  • Pour la méthode d'API tierce, l'un des rôles suivants pour accorder le consentement de l'administrateur :
    • Administrateur général : peut accorder le consentement pour n'importe quelle autorisation et n'importe quelle API.
    • Administrateur de rôle privilégié : peut accorder l'autorisation pour n'importe quelle autorisation, pour n'importe quelle API
    • Administrateur d'applications cloud : peut accorder l'autorisation pour n'importe quelle autorisation pour n'importe quelle API, à l'exception des rôles d'application Microsoft Graph (autorisations d'application)

Cette méthode diffuse les journaux de connexion Entra ID via Azure Event Hub avec la capture activée, ce qui écrit les données dans Azure Blob Storage. Google SecOps ingère ensuite les journaux depuis Blob Storage à l'aide du type de flux Azure Blob Storage V2.

Configurer un compte de stockage Azure

Créer un compte de stockage

  1. Dans le portail Azure, recherchez Comptes de stockage.
  2. Cliquez sur + Créer.
  3. Fournissez les informations de configuration suivantes :

    Paramètre Valeur
    Abonnement Sélectionnez votre abonnement Azure.
    Groupe de ressources Sélectionner une base de données existante ou en créer une
    Nom du compte de stockage Saisissez un nom unique (par exemple, secopsaadsignin).
    Région Sélectionnez la région la plus proche de votre espace de noms Event Hubs.
    Performances Standard (recommandé)
    Redondance LRS (stockage local redondant) ou GRS (stockage géoredondant)
  4. Cliquez sur Examiner et créer.

  5. Consultez l'aperçu, puis cliquez sur Créer.

  6. Attendez la fin du déploiement.

Obtenir les identifiants du compte de stockage

  1. Accédez au compte de stockage que vous avez créé.
  2. Dans le volet de navigation de gauche, sélectionnez Clés d'accès sous Sécurité et mise en réseau.
  3. Cliquez sur Afficher les clés.
  4. Copiez et enregistrez les éléments suivants :
    • Nom du compte de stockage
    • Touche 1 ou Touche 2 : clé d'accès partagée.

Créer un espace de noms Event Hub et un hub d'événements

Créer un espace de noms Event Hubs

  1. Dans le portail Azure, recherchez Event Hubs.
  2. Cliquez sur + Créer.
  3. Fournissez les informations de configuration suivantes :

    Paramètre Valeur
    Abonnement Sélectionnez votre abonnement Azure.
    Groupe de ressources Sélectionnez le même groupe de ressources que votre compte de stockage.
    Nom de l'espace de noms Saisissez un nom unique (par exemple, secops-entraid-signin).
    Emplacement Sélectionnez la même région que votre compte de stockage.
    Niveau de tarification Standard (obligatoire pour la capture Event Hub)
  4. Cliquez sur Examiner et créer, puis sur Créer.

  5. Attendez la fin du déploiement.

Créer un hub d'événements

  1. Accédez à l'espace de noms Event Hub que vous avez créé.
  2. En haut de l'écran, cliquez sur + Event Hub.
  3. Fournissez les informations de configuration suivantes :
    • Name (Nom) : saisissez un nom (par exemple, entraid-signin-logs).
    • Nombre de partitions : 2 (par défaut, augmentez-le pour un débit plus élevé).
    • Règle de nettoyage : supprimer.
    • Durée de conservation (heures) : 24 (minimum, augmentez-la si nécessaire pour la résilience).
  4. Cliquez sur Examiner et créer, puis sur Créer.

Activer la capture Event Hub

  1. Accédez à l'Event Hub que vous avez créé (dans l'espace de noms).
  2. Dans le panneau de navigation de gauche, sélectionnez Capture.
  3. Définissez Capture sur Activé.
  4. Fournissez les informations de configuration suivantes :

    Paramètre Valeur
    Créneau horaire (en minutes) 5 (ou moins pour le quasi-temps réel)
    Taille de la fenêtre (Mo) 300
    Fournisseur de capture Azure Blob Storage
    Abonnement Azure Sélectionnez votre abonnement
    Compte de stockage Sélectionnez le compte de stockage que vous avez créé.
    Conteneur de blobs Créez ou sélectionnez un conteneur (par exemple, entraid-signin-capture).
  5. Cliquez sur Enregistrer.

Configurer les paramètres de diagnostic Entra ID

  1. Dans le portail Azure, recherchez Microsoft Entra ID.
  2. Dans le panneau de navigation de gauche, accédez à Surveillance et état > Paramètres de diagnostic.
  3. Cliquez sur Ajouter un paramètre de diagnostic.
  4. Fournissez les informations de configuration suivantes :
    • Nom du paramètre de diagnostic : saisissez un nom descriptif (par exemple, signin-logs-to-eventhub).
    • Dans la section Journaux, sélectionnez les catégories de journaux de connexion que vous souhaitez exporter :
      • SignInLogs : connexions utilisateur interactives.
      • NonInteractiveUserSignInLogs : connexions des utilisateurs non interactifs (facultatif, recommandé).
      • ServicePrincipalSignInLogs : connexions du compte de service (facultatif).
      • ManagedIdentitySignInLogs : connexions des identités gérées (facultatif).
    • Dans la section Détails de la destination, sélectionnez Diffuser vers un hub d'événements.
    • Abonnement : sélectionnez l'abonnement contenant votre espace de noms Event Hub.
    • Espace de noms Event Hubs : sélectionnez l'espace de noms que vous avez créé (par exemple, secops-entraid-signin).
    • Nom du hub d'événements : sélectionnez le hub d'événements que vous avez créé (par exemple, entraid-signin-logs).
    • Nom de la règle du hub d'événements : sélectionnez RootManageSharedAccessKey.
  5. Cliquez sur Enregistrer.

Configurer des flux

Il existe deux points d'entrée différents pour configurer les flux dans la plate-forme Google SecOps :

  • Paramètres SIEM> Flux > Ajouter un flux
  • Plate-forme de contenu> Packs de contenu> Premiers pas

Configurer un flux dans Google SecOps pour ingérer les journaux de connexion Entra ID

  1. Cliquez sur le pack Plate-forme Azure.
  2. Recherchez le type de journal Azure AD.
  3. Indiquez les valeurs des champs suivants :

    • Type de source : Microsoft Azure Blob Storage V2
    • URI Azure : saisissez l'URL du point de terminaison du service Blob avec le chemin d'accès au conteneur de capture :

      https://<storage-account>.blob.core.windows.net/entraid-signin-capture/
      

      Remplacez <storage-account> par le nom de votre compte de stockage Azure.

    • Option de suppression de la source : sélectionnez l'option de suppression de votre choix :

      • Jamais : ne supprime jamais aucun fichier après les transferts.
      • Supprimer les fichiers transférés : supprime les fichiers après un transfert réussi.
      • Supprimer les fichiers transférés et les répertoires vides : supprime les fichiers et les répertoires vides après un transfert réussi.
    • Âge maximal des fichiers : incluez les fichiers modifiés au cours des derniers jours. La valeur par défaut est de 180 jours.

    • Clé partagée : saisissez la valeur de la clé d'accès partagé du compte de stockage.

    • 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.

  4. Cliquez sur Créer un flux.

Une fois le flux créé, il peut s'écouler entre 5 et 10 minutes avant que les journaux ne commencent à s'afficher dans Google SecOps.

Pour en savoir plus sur la configuration de plusieurs flux pour différents types de journaux dans cette famille de produits, consultez Configurer des flux par produit.

Pour en savoir plus sur les flux Google Security Operations, consultez la documentation sur les flux Google Security Operations. Pour en savoir plus sur les exigences de chaque type de flux, consultez Configuration des flux par type.

Configurer le pare-feu Azure Storage (le cas échéant)

Si votre compte de stockage Azure utilise un pare-feu, vous devez ajouter les plages d'adresses IP Google SecOps.

  1. Dans le portail Azure, accédez à votre compte de stockage.
  2. Sélectionnez Mise en réseau sous Sécurité et mise en réseau.
  3. Sous Pare-feu et réseaux virtuels, sélectionnez Activé à partir des réseaux virtuels et adresses IP sélectionnés.
  4. Dans la section Pare-feu, sous Plage d'adresses, cliquez sur + Ajouter une plage d'adresses IP.
  5. Ajoutez chaque plage d'adresses IP Google SecOps au format CIDR.
  6. Cliquez sur Enregistrer.

Méthode 2 : API tierce

Cette méthode utilise l'API Microsoft Graph pour récupérer les journaux de connexion Entra ID directement depuis votre locataire Microsoft.

Configurer la liste d'autorisation d'adresses IP

Avant de créer le flux, vous devez ajouter les plages d'adresses IP Google SecOps à la liste d'autorisation dans les paramètres de votre réseau Microsoft Azure ou dans vos règles d'accès conditionnel.

Obtenir les plages d'adresses IP Google SecOps

  1. Accédez à Paramètres SIEM> Flux.
  2. Cliquez sur Add New Feed (Ajouter un flux).
  3. Notez les plages d'adresses IP affichées dans l'interface de création de flux.
  4. Vous pouvez également récupérer les plages d'adresses IP de manière programmatique à l'aide de l'API Feed Management.

Configurer l'accès conditionnel pour les identités de charge de travail (si nécessaire)

Si votre organisation utilise des règles d'accès conditionnel qui limitent l'accès par emplacement :

  1. Dans le centre d'administration Microsoft Entra, accédez à Protection > Accès conditionnel > Lieux nommés.
  2. Cliquez sur + Nouveau lieu.
  3. Fournissez les informations de configuration suivantes :
    • Nom : saisissez Google SecOps IP Ranges.
    • Marquer comme emplacement approuvé : facultatif, en fonction de votre règle de sécurité.
    • Plages d'adresses IP : ajoutez chaque plage d'adresses IP Google SecOps au format CIDR.
  4. Cliquez sur Créer.
  5. Accédez à Accès conditionnel > Stratégies.
  6. Pour toutes les règles qui s'appliquent aux identités de charge de travail, configurez une exclusion pour l'emplacement nommé Google SecOps IP Ranges ou le principal de service spécifique.

Configurer l'accès à l'API Microsoft Azure AD

Créer un enregistrement d'application

  1. Connectez-vous au centre d'administration Microsoft Entra ou au portail Azure.
  2. Accédez à Identité > Applications > Inscriptions d'applications.
  3. Cliquez sur Nouvelle inscription.
  4. Fournissez les informations de configuration suivantes :

    • Nom : saisissez un nom descriptif (par exemple, Google SecOps Sign-In Logs Integration).
    • Supported account types (Types de comptes pris en charge) : sélectionnez Accounts in this organizational directory only (Single tenant) [(Comptes dans cet annuaire organisationnel uniquement (Locataire unique)].
    • URI de redirection : laissez ce champ vide (il n'est pas obligatoire pour l'authentification du compte principal de service).
  5. Cliquez sur S'inscrire.

  6. Après l'enregistrement, copiez et enregistrez les valeurs suivantes :

    • ID d'application (client)
    • ID de l'annuaire (locataire)

Configurer les autorisations de l'API

L'intégration nécessite les autorisations d'application Microsoft Graph suivantes :

  1. Dans l'enregistrement de l'application, accédez à Autorisations des API.
  2. Cliquez sur Ajouter une autorisation.
  3. Sélectionnez Microsoft Graph> Autorisations de l'application.
  4. Sélectionnez les autorisations suivantes :
    • AuditLog.Read.All : requis pour lire les journaux de connexion.
    • Directory.Read.All : requise par l'API Microsoft Graph pour accéder aux journaux de connexion (problème connu).
    • SecurityEvents.Read.All : requis par Google Security Operations.
  5. Cliquez sur Ajouter des autorisations.
  6. Cliquez sur Accorder le consentement administrateur pour [Votre organisation].
  7. Vérifiez que la colonne État indique Accordé pour [Votre organisation] pour les trois autorisations.
Autorisation Type Description
AuditLog.Read.All Application Lire toutes les données de connexion et de journaux d'audit
Directory.Read.All Application Lire les données du répertoire (obligatoire pour l'accès à l'API)
SecurityEvents.Read.All Application Lire les événements de sécurité

Créer code secret du client

  1. Accédez à Certificats et codes secrets.
  2. Cliquez sur Nouvelle clé secrète client.
  3. Fournissez les informations de configuration suivantes :

    • Description : saisissez un nom descriptif (par exemple, Google SecOps Feed).
    • Expiration : sélectionnez une période d'expiration.
  4. Cliquez sur Ajouter.

  5. Important : Copiez immédiatement la valeur du code secret du client. Cette valeur ne s'affiche qu'une seule fois et ne peut pas être récupérée plus tard.

Vérifier l'accès à l'API avant de créer un flux

Avant de créer le flux Google SecOps, vérifiez que le principal de service peut s'authentifier et accéder à l'API Microsoft Graph.

  • Tester l'authentification à l'aide de PowerShell

    # Replace with your actual values
    $tenantId = "your-tenant-id"
    $clientId = "your-client-id"
    $clientSecret = "your-client-secret"
    
    # Token request parameters (must be lowercase)
    $tokenBody = @{
        grant_type    = "client_credentials"
        client_id     = $clientId
        client_secret = $clientSecret
        scope         = "https://graph.microsoft.com/.default"
    }
    
    # Request access token
    $tokenEndpoint = "https://login.microsoftonline.com/$tenantId/oauth2/v2.0/token"
    $tokenResponse = Invoke-RestMethod -Method Post -Uri $tokenEndpoint -Body $tokenBody -ContentType "application/x-www-form-urlencoded"
    
    if ($tokenResponse.access_token) {
        Write-Host "✓ Successfully obtained access token" -ForegroundColor Green
    
        # Test API call to sign-ins endpoint
        $apiUrl = "https://graph.microsoft.com/v1.0/auditLogs/signIns?`$top=1"
        $headers = @{
            Authorization = "Bearer $($tokenResponse.access_token)"
        }
    
        try {
            $signInResponse = Invoke-RestMethod -Method Get -Uri $apiUrl -Headers $headers
            Write-Host "✓ Successfully accessed sign-ins API" -ForegroundColor Green
            Write-Host "Sample sign-in log retrieved successfully" -ForegroundColor Green
        }
        catch {
            Write-Host "✗ Failed to access sign-ins API" -ForegroundColor Red
            Write-Host "Error: $($_.Exception.Message)" -ForegroundColor Red
        }
    }
    else {
        Write-Host "✗ Failed to obtain access token" -ForegroundColor Red
    }
    
  • Résultat attendu :

    ✓ Successfully obtained access token
    ✓ Successfully accessed sign-ins API
    Sample sign-in log retrieved successfully
    
  • Tester l'authentification à l'aide de curl

    # Replace with your actual values
    TENANT_ID="your-tenant-id"
    CLIENT_ID="your-client-id"
    CLIENT_SECRET="your-client-secret"
    
    # Request access token
    curl -X POST "https://login.microsoftonline.com/$TENANT_ID/oauth2/v2.0/token" \
    -H "Content-Type: application/x-www-form-urlencoded" \
    -d "grant_type=client_credentials" \
    -d "client_id=$CLIENT_ID" \
    -d "client_secret=$CLIENT_SECRET" \
    -d "scope=https://graph.microsoft.com/.default"
    
    # Test API access
    curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
    "https://graph.microsoft.com/v1.0/auditLogs/signIns?\$top=1"
    

Configurer des flux

Il existe deux points d'entrée différents pour configurer les flux dans la plate-forme Google SecOps :

  • Paramètres SIEM> Flux > Ajouter un flux
  • Plate-forme de contenu> Packs de contenu> Premiers pas

Configurer un flux dans Google SecOps pour ingérer les journaux de connexion Microsoft Azure AD

  1. Cliquez sur le pack Plate-forme Azure.
  2. Recherchez le type de journal Azure AD.
  3. Indiquez les valeurs des champs suivants :

    • Type de source : API tierce (recommandé)
    • ID client OAuth : ID (client) de l'application issu de l'enregistrement de l'application.
    • Code secret du client OAuth : valeur du code secret du client que vous avez copiée précédemment.
    • ID de locataire : ID de votre locataire Microsoft provenant de l'enregistrement de l'application (format UUID, par exemple 0fc279f9-fe30-41be-97d3-abe1d7681418).
    • Chemin d'accès complet de l'API : URL du point de terminaison de l'API REST Microsoft Graph :

      graph.microsoft.com/v1.0/auditLogs/signIns
      
    • Point de terminaison d'authentification de l'API : point de terminaison d'authentification Microsoft Active Directory :

      login.microsoftonline.com
      

    Options avancées :

    • Nom du flux : valeur préremplie qui identifie le flux.
    • Espace de noms du composant : espace de noms du composant auquel le flux sera associé.
    • Libellés d'ingestion : des libellés seront ajoutés à tous les événements de ce flux.
  4. Cliquez sur Créer un flux.

Une fois le flux créé, les données de contexte sont récupérées régulièrement. Il peut s'écouler jusqu'à 24 heures avant que le premier instantané de l'annuaire ne s'affiche dans Google SecOps.

Pour en savoir plus sur la configuration de plusieurs flux pour différents types de journaux dans cette famille de produits, consultez Configurer des flux par produit.

Pour en savoir plus sur les flux Google Security Operations, consultez la documentation sur les flux Google Security Operations. Pour en savoir plus sur les exigences de chaque type de flux, consultez Configuration des flux par type. Si vous rencontrez des problèmes lors de la création de flux, contactez l'assistance Google Security Operations.

Points de terminaison régionaux

Pour les déploiements Microsoft Azure AD dans des clouds souverains, utilisez les points de terminaison régionaux appropriés :

Environnement cloud Chemin complet de l'API Point de terminaison d'authentification de l'API
Monde graph.microsoft.com/v1.0/auditLogs/signIns login.microsoftonline.com
L4 pour les organismes gouvernementaux américains graph.microsoft.us/v1.0/auditLogs/signIns login.microsoftonline.us
Gouvernement américain L5 (DOD) dod-graph.microsoft.us/v1.0/auditLogs/signIns login.microsoftonline.us
Chine (21Vianet) microsoftgraph.chinacloudapi.cn/v1.0/auditLogs/signIns login.chinacloudapi.cn

Table de mappage UDM

Champ de journal Mappage UDM Logique
activityDateTime principal.event_timestamp Analysé à partir du champ activityDateTime. Si le champ n'est pas au format "aaaa-MM-jjTHH:mm:ss.SSSZ" ou "ISO8601" attendu, l'analyseur syntaxique essaiera d'autres formats tels que "MM/jj/aaaa HH:mm:ss A" ou "MM/j/aaaa HH:mm:ss A".
activityDisplayName security_result.summary Mappé directement à partir de activityDisplayName.
additionalDetails.0.value network.http.user_agent Mappé directement à partir de additionalDetails.0.value.
additionalDetails.1.key target.resource.attribute.labels.key Mappé directement à partir de additionalDetails.1.key.
additionalDetails.1.value target.resource.attribute.labels.value Mappé directement à partir de additionalDetails.1.value.
additionalInfo.[].Key network.http.user_agent, target.url Si Key est défini sur userAgent, mappez Value sur network.http.user_agent et network.http.parsed_user_agent. Si Key est alertUrl, mappez Value sur target.url.
additionalInfo.[].Value network.http.user_agent, target.url Si Key est défini sur userAgent, mappez Value sur network.http.user_agent et network.http.parsed_user_agent. Si Key est alertUrl, mappez Value sur target.url.
am_category metadata.description Mappé directement à partir de am_category.
am_tenantId metadata.product_deployment_id Mappé directement à partir de am_tenantId.
appId target.resource.attribute.labels.value Mappé directement à partir de appId avec la clé de libellé "ID d'application".
appDisplayName target.application Mappé directement à partir de appDisplayName.
appliedConditionalAccessPolicies.[].displayName security_result.[].rule_name, about.[].user.user_display_name Mappé directement à partir de appliedConditionalAccessPolicies.[].displayName.
appliedConditionalAccessPolicies.[].enforcedGrantControls security_result.[].rule_labels.value Directement mappé à partir de appliedConditionalAccessPolicies.[].enforcedGrantControls avec la clé de libellé "applied_conditional_access_policies_enforced_grant_controls".
appliedConditionalAccessPolicies.[].enforcedSessionControls security_result.[].rule_labels.value Directement mappé à partir de appliedConditionalAccessPolicies.[].enforcedSessionControls avec la clé de libellé "applied_conditional_access_policies_enforced_session_controls".
appliedConditionalAccessPolicies.[].id security_result.[].rule_id, about.[].user.userid Mappé directement à partir de appliedConditionalAccessPolicies.[].id.
appliedConditionalAccessPolicies.[].result security_result.[].detection_fields.value, about.[].labels.value Mappé directement à partir de appliedConditionalAccessPolicies.[].result avec la clé de libellé "Result".
authenticationDetails.[].authenticationMethod security_result.[].detection_fields.value Mappé directement à partir de authenticationDetails.[].authenticationMethod avec la clé de libellé "authenticationMethod".
authenticationDetails.[].authenticationMethodDetail security_result.[].detection_fields.value Mappé directement à partir de authenticationDetails.[].authenticationMethodDetail avec la clé de libellé "authenticationMethodDetail".
authenticationDetails.[].authenticationStepDateTime security_result.[].detection_fields.value Directement mappé à partir de authenticationDetails.[].authenticationStepDateTime avec la clé de libellé "authenticationStepDateTime".
authenticationDetails.[].authenticationStepRequirement security_result.[].detection_fields.value Mappé directement à partir de authenticationDetails.[].authenticationStepRequirement avec la clé de libellé "authenticationStepRequirement".
authenticationDetails.[].authenticationStepResultDetail security_result.[].detection_fields.value Directement mappé à partir de authenticationDetails.[].authenticationStepResultDetail avec la clé de libellé "authenticationStepResultDetail".
authenticationDetails.[].succeeded security_result.action Si la valeur est "true", alors ALLOW, sinon BLOCK.
authenticationRequirement additional.fields.value.string_value Mappé directement à partir de authenticationRequirement avec la clé de libellé "AuthenticationRequirement".
authenticationRequirementPolicies.[].detail security_result.detection_fields.value Mappé directement à partir de authenticationRequirementPolicies.[].detail avec la clé de libellé "detail".
authenticationRequirementPolicies.[].requirementProvider security_result.detection_fields.value Mappé directement à partir de authenticationRequirementPolicies.[].requirementProvider avec la clé de libellé "requirementProvider".
callerIpAddress principal.ip, principal.asset.ip Mappé directement à partir de callerIpAddress.
category metadata.description Mappé directement à partir de category.
clientAppUsed principal.application Mappé directement à partir de clientAppUsed.
conditionalAccessStatus additional.fields.value.string_value Directement mappé à partir de conditionalAccessStatus avec la clé de libellé "conditionalAccessStatus".
correlationId network.session_id, security_result.detection_fields.value Mappé directement à partir de correlationId. Également utilisé comme security_result.detection_fields.value avec la clé de libellé "CorrelationId".
createdDateTime when Le champ when est dérivé du champ createdDateTime. La date et l'heure sont extraites du champ createdDateTime à l'aide de grok, puis combinées pour former le champ when.
deviceDetail.browser network.http.user_agent Mappé directement à partir de deviceDetail.browser.
deviceDetail.deviceId principal.asset.asset_id, principal.asset_id Mappé directement à partir de deviceDetail.deviceId et précédé de "ID de l'appareil :".
deviceDetail.displayName principal.asset.hostname Mappé directement à partir de deviceDetail.displayName.
deviceDetail.isCompliant principal.asset.attribute.labels.value Mappé directement à partir de deviceDetail.isCompliant avec la clé de libellé "isCompliant".
deviceDetail.isManaged principal.asset.attribute.labels.value Mappé directement à partir de deviceDetail.isManaged avec la clé de libellé "isManaged".
deviceDetail.operatingSystem principal.platform_version Mappé directement à partir de deviceDetail.operatingSystem.
deviceDetail.trustType principal.asset.attribute.labels.value Mappé directement à partir de deviceDetail.trustType avec la clé de libellé "trustType".
durationMs additional.fields.value.string_value Mappé directement à partir de durationMs avec la clé de libellé "durationMs".
event.id - Non mappé conformément aux instructions (point 3).
id metadata.product_log_id Mappé directement à partir de id.
identity target.user.user_display_name Directement mappé à partir de identity s'il est différent de userId et n'est pas une adresse e-mail.
initiatedBy.user.displayName principal.user.user_display_name Mappé directement à partir de initiatedBy.user.displayName.
initiatedBy.user.id principal.user.userid, principal.user.windows_sid Mappé directement à partir de initiatedBy.user.id.
initiatedBy.user.ipAddress principal.ip, principal.asset.ip Mappé directement à partir de initiatedBy.user.ipAddress.
initiatedBy.user.userPrincipalName principal.user.email_addresses, principal.user.userid Mappé directement à partir de initiatedBy.user.userPrincipalName. Si la valeur est une adresse e-mail, elle est mappée sur email_addresses. Sinon, elle est mappée sur userid.
Level security_result.severity_details, level Mappé directement à partir de Level.
level security_result.severity_details, security_result.severity Mappé directement à partir de level. Également mappé sur security_result.severity après conversion en majuscules. Gestion spéciale des valeurs "Information", "Informational", "0", "4", "Avertissement", "1", "3", "Erreur", "2" et "Critique".
location.city principal.location.city Mappé directement à partir de location.city.
location.countryOrRegion principal.location.country_or_region Mappé directement à partir de location.countryOrRegion.
location.geoCoordinates.altitude additional.fields.value.string_value Mappé directement à partir de location.geoCoordinates.altitude avec la clé de libellé "location_geoCoordinates_altitude".
location.geoCoordinates.latitude principal.location.region_latitude, principal.location.region_coordinates.latitude Mappé directement à partir de location.geoCoordinates.latitude.
location.geoCoordinates.longitude principal.location.region_longitude, principal.location.region_coordinates.longitude Mappé directement à partir de location.geoCoordinates.longitude.
location.state principal.location.state Mappé directement à partir de location.state.
location principal.location.name Mappé directement à partir de location.
log_type metadata.log_type Mappé directement à partir de log_type.
networkLocationDetails.[].networkNames additional.fields.value.string_value Valeurs concaténées de networkLocationDetails.[].networkNames avec la clé de libellé "networkName {index}".
networkLocationDetails.[].networkType security_result.detection_fields.value, additional.fields.value.string_value Mappé directement à partir de networkLocationDetails.[].networkType avec la clé de libellé "networkType". Également utilisé comme additional.fields.value.string_value avec la clé de libellé "networkType {index}".
operationName event_type Si operationName est "Activité de connexion", alors USER_LOGIN. Si operationName est "Ajouter un membre au groupe", alors USER_CHANGE_PERMISSIONS.
operationType security_result.action_details Mappé directement à partir de operationType.
properties.activity security_result.summary Mappé directement à partir de properties.activity.
properties.activityDateTime when Analysé à partir du champ properties.activityDateTime. Si le champ n'est pas au format "aaaa-MM-jjTHH:mm:ss.SSSZ" ou "ISO8601" attendu, l'analyseur syntaxique essaiera d'autres formats tels que "MM/jj/aaaa HH:mm:ss A" ou "MM/j/aaaa HH:mm:ss A".
properties.activityDisplayName security_result.summary Mappé directement à partir de properties.activityDisplayName.
properties.additionalInfo network.http.user_agent, target.url Analysé au format JSON. Si la clé est "userAgent", mappez la valeur sur network.http.user_agent et network.http.parsed_user_agent. Si la clé est "alertUrl", mappez la valeur sur target.url.
properties.appliedConditionalAccessPolicies.[].displayName security_result.[].rule_name Mappé directement à partir de properties.appliedConditionalAccessPolicies.[].displayName.
properties.appliedConditionalAccessPolicies.[].enforcedGrantControls security_result.[].rule_labels.value Directement mappé à partir de properties.appliedConditionalAccessPolicies.[].enforcedGrantControls avec la clé de libellé "applied_conditional_access_policies_enforced_grant_controls".
properties.appliedConditionalAccessPolicies.[].enforcedSessionControls security_result.[].rule_labels.value Directement mappé à partir de properties.appliedConditionalAccessPolicies.[].enforcedSessionControls avec la clé de libellé "applied_conditional_access_policies_enforced_session_controls".
properties.appliedConditionalAccessPolicies.[].id security_result.[].rule_id Mappé directement à partir de properties.appliedConditionalAccessPolicies.[].id.
properties.appliedConditionalAccessPolicies.[].result security_result.[].detection_fields.value Mappé directement à partir de properties.appliedConditionalAccessPolicies.[].result avec la clé de libellé "Result".
properties.appId appId Mappé directement à partir de properties.appId.
properties.appDisplayName target.application Mappé directement à partir de properties.appDisplayName.
properties.authenticationDetails.[].authenticationMethod security_result.detection_fields.value Mappé directement à partir de properties.authenticationDetails.[].authenticationMethod avec la clé de libellé "authenticationMethod".
properties.authenticationDetails.[].authenticationMethodDetail security_result.detection_fields.value Mappé directement à partir de properties.authenticationDetails.[].authenticationMethodDetail avec la clé de libellé "authenticationMethodDetail".
properties.authenticationDetails.[].authenticationStepDateTime security_result.detection_fields.value Directement mappé à partir de properties.authenticationDetails.[].authenticationStepDateTime avec la clé de libellé "authenticationStepDateTime".
properties.authenticationDetails.[].authenticationStepRequirement security_result.detection_fields.value Mappé directement à partir de properties.authenticationDetails.[].authenticationStepRequirement avec la clé de libellé "authenticationStepRequirement".
properties.authenticationDetails.[].authenticationStepResultDetail security_result.detection_fields.value Directement mappé à partir de properties.authenticationDetails.[].authenticationStepResultDetail avec la clé de libellé "authenticationStepResultDetail".
properties.authenticationRequirement additional.fields.value.string_value Mappé directement à partir de properties.authenticationRequirement avec la clé de libellé "AuthenticationRequirement".
properties.authenticationRequirementPolicies.[].detail security_result.detection_fields.value Mappé directement à partir de properties.authenticationRequirementPolicies.[].detail avec la clé de libellé "detail".
properties.authenticationRequirementPolicies.[].requirementProvider security_result.detection_fields.value Mappé directement à partir de properties.authenticationRequirementPolicies.[].requirementProvider avec la clé de libellé "requirementProvider".
properties.clientAppUsed principal.application Mappé directement à partir de properties.clientAppUsed.
properties.conditionalAccessStatus additional.fields.value.string_value Directement mappé à partir de properties.conditionalAccessStatus avec la clé de libellé "conditionalAccessStatus".
properties.crossTenantAccessType additional.fields.value.string_value Mappé directement à partir de properties.crossTenantAccessType avec la clé de libellé "crossTenantAccessType".
properties.detectedDateTime additional.fields.value.string_value Mappé directement à partir de properties.detectedDateTime avec la clé de libellé "detectedDateTime".
properties.detectionTimingType additional.fields.value.string_value Mappé directement à partir de properties.detectionTimingType avec la clé de libellé "detectionTimingType".
properties.homeTenantId additional.fields.value.string_value Mappé directement à partir de properties.homeTenantId avec la clé de libellé "homeTenantId".
properties.id metadata.product_log_id Mappé directement à partir de properties.id.
properties.initiatedBy.user.displayName principal.user.user_display_name Mappé directement à partir de properties.initiatedBy.user.displayName.
properties.initiatedBy.user.id principal.user.windows_sid Mappé directement à partir de properties.initiatedBy.user.id.
properties.initiatedBy.user.ipAddress principal.ip, principal.asset.ip Mappé directement à partir de properties.initiatedBy.user.ipAddress.
properties.initiatedBy.user.userPrincipalName principal.user.email_addresses, principal.user.userid Mappé directement à partir de properties.initiatedBy.user.userPrincipalName. Si la valeur est une adresse e-mail, elle est mappée sur email_addresses. Sinon, elle est mappée sur userid.
properties.ipAddress principal.ip, principal.asset.ip Mappé directement à partir de properties.ipAddress.
properties.isGuest additional.fields.value.string_value Mappé directement à partir de properties.isGuest avec la clé de libellé "isGuest".
properties.isDeleted additional.fields.value.string_value Mappé directement à partir de properties.isDeleted avec la clé de libellé "isDeleted".
properties.isProcessing additional.fields.value.string_value Directement mappé à partir de properties.isProcessing avec la clé de libellé "isProcessing".
properties.lastUpdatedDateTime additional.fields.value.string_value Directement mappé à partir de properties.lastUpdatedDateTime avec la clé de libellé "lastUpdatedDateTime".
properties.location.city principal.location.city Mappé directement à partir de properties.location.city.
properties.location.countryOrRegion principal.location.country_or_region Mappé directement à partir de properties.location.countryOrRegion.
properties.location.geoCoordinates.latitude principal.location.region_latitude, principal.location.region_coordinates.latitude Mappé directement à partir de properties.location.geoCoordinates.latitude.
properties.location.geoCoordinates.longitude principal.location.region_longitude, principal.location.region_coordinates.longitude Mappé directement à partir de properties.location.geoCoordinates.longitude.
properties.location.state principal.location.state Mappé directement à partir de properties.location.state.
properties.networkLocationDetails.[].networkNames additional.fields.value.string_value Valeurs concaténées de properties.networkLocationDetails.[].networkNames avec la clé de libellé "properties networkName {index}".
properties.networkLocationDetails.[].networkType additional.fields.value.string_value Mappé directement à partir de properties.networkLocationDetails.[].networkType avec la clé de libellé "properties networkType {index}".
properties.riskEventType additional.fields.value.string_value Mappé directement à partir de properties.riskEventType avec la clé de libellé "riskEventType".
properties.riskLastUpdatedDateTime additional.fields.value.string_value Directement mappé à partir de properties.riskLastUpdatedDateTime avec la clé de libellé "riskLastUpdatedDateTime".
properties.riskLevel additional.fields.value.string_value Mappé directement à partir de properties.riskLevel avec la clé de libellé "riskLevel".
properties.riskLevelDuringSignIn additional.fields.value.string_value Mappé directement à partir de properties.riskLevelDuringSignIn avec la clé de libellé "riskLevelDuringSignIn".
properties.riskState additional.fields.value.string_value Mappé directement à partir de properties.riskState avec la clé de libellé "riskState".
properties.riskDetail additional.fields.value.string_value Mappé directement à partir de properties.riskDetail avec la clé de libellé "riskDetail".
properties.riskType additional.fields.value.string_value Mappé directement à partir de properties.riskType avec la clé de libellé "riskType".
properties.source additional.fields.value.string_value Mappé directement à partir de properties.source avec la clé de libellé "source".
properties.targetResources.0.id target.user.product_object_id Mappé directement à partir de properties.targetResources.0.id.
properties.targetResources.modifiedProperties.0.newValue target.group.product_object_id Mappé directement à partir de properties.targetResources.modifiedProperties.0.newValue.
properties.tokenIssuerType additional.fields.value.string_value Mappé directement à partir de properties.tokenIssuerType avec la clé de libellé "tokenIssuerType".
properties.userAgent network.http.user_agent, network.http.parsed_user_agent Mappé directement à partir de properties.userAgent.
properties.userDisplayName target.user.user_display_name Mappé directement à partir de properties.userDisplayName.
properties.userId target.user.product_object_id Mappé directement à partir de properties.userId.
properties.userPrincipalName target.user.userid, target.user.email_addresses Mappé directement à partir de properties.userPrincipalName. Si la valeur est une adresse e-mail, elle est mappée sur email_addresses. Sinon, elle est mappée sur userid.
result security_result.action, security_result.action_details Si result est défini sur "success", alors ALLOW.
resultDescription security_result.description Mappé directement à partir de resultDescription.
resultSignature additional.fields.value.string_value Mappé directement à partir de resultSignature avec la clé de libellé "resultSignature".
resultType security_result.rule_id, action, security_result.summary Si resultType est défini sur "0", ALLOW et "Connexion réussie". Sinon, BLOCK et "Échec de la connexion".
resourceId target.resource.id, target.resource.product_object_id Mappé directement à partir de resourceId.
resourceDisplayName target.resource.name, appDisplayName Mappé directement à partir de resourceDisplayName.
riskDetail additional.fields.value.string_value Mappé directement à partir de riskDetail avec la clé de libellé "riskDetail".
riskEventTypes.[]. additional.fields.value.string_value, additional.fields.value.list_value.values.string_value Les valeurs sont ajoutées à une liste avec la clé "riskEventTypes" dans additional.fields. De plus, chaque valeur est ajoutée en tant que champ distinct avec la clé "riskEventType" dans additional.fields.
riskEventTypes_v2.[]. additional.fields.value.list_value.values.string_value Les valeurs sont ajoutées à une liste avec la clé "riskEventTypes_v2" dans additional.fields.
riskLevelAggregated additional.fields.value.string_value Mappé directement à partir de riskLevelAggregated avec la clé de libellé "riskLevelAggregated".
riskLevelDuringSignIn additional.fields.value.string_value Mappé directement à partir de riskLevelDuringSignIn avec la clé de libellé "riskLevelDuringSignIn".
riskState additional.fields.value.string_value Mappé directement à partir de riskState avec la clé de libellé "riskState".
status.additionalDetails security_result.description Mappé directement à partir de status.additionalDetails.
status.errorCode security_result.rule_id, errorCode Mappé directement à partir de status.errorCode.
target.displayName resourceDisplayName Mappé directement à partir de target.displayName.
target.id resourceId Mappé directement à partir de target.id.
target.modifiedProperties.[].displayName target.resource.attribute.labels.key Mappé directement à partir de target.modifiedProperties.[].displayName.
target.modifiedProperties.[].newValue target.resource.attribute.labels.value, target.resource.product_object_id Mappé directement à partir de target.modifiedProperties.[].newValue.
target.modifiedProperties.[].oldValue target.resource.attribute.labels.value Mappé directement à partir de target.modifiedProperties.[].oldValue.
target.type target.resource.type Mappé directement à partir de target.type.
tenantId metadata.product_deployment_id Mappé directement à partir de tenantId.
time when Le champ when est dérivé du champ time. La date et l'heure sont extraites du champ time à l'aide de grok, puis combinées pour former le champ when.
userAgent network.http.user_agent, network.http.parsed_user_agent Mappé directement à partir de userAgent.
userDisplayName target.user.user_display_name Mappé directement à partir de userDisplayName.
userId target.user.product_object_id Mappé directement à partir de userId.
userPrincipalName target.user.userid, principal.administrative_domain, target.user.email_addresses Mappé directement à partir de userPrincipalName. S'il s'agit d'une adresse e-mail, elle est mappée sur email_addresses, et la partie du domaine est extraite et mappée sur principal.administrative_domain. Sinon, il est mappé sur userid.
(Logique de l'analyseur) event.idm.is_alert, event.idm.is_significant Défini sur "true" si le niveau est "Critical".
(Logique de l'analyseur) event.idm.read_only_udm.metadata.event_type Définissez-le sur "USER_LOGIN" si has_target_user est défini sur "true". Définissez la valeur sur "USER_UNCATEGORIZED" si has_principal_user est défini sur "true". Définissez sur "STATUS_UPDATE" si has_principal est défini sur "true". Sinon, définissez-le sur "GENERIC_EVENT".
(Logique de l'analyseur) event.idm.read_only_udm.metadata.vendor_name Défini sur "Microsoft".
(Logique de l'analyseur) event.idm.read_only_udm.metadata.product_name Défini sur "Azure AD".
(Logique de l'analyseur) event.idm.read_only_udm.extensions.auth.type Définissez-le sur "SSO".
(Logique de l'analyseur) event.idm.read_only_udm.extensions.auth.mechanism Définissez sur "INTERACTIVE" si isInteractive est défini sur "true". Sinon, définissez-le sur "MECHANISM_OTHER".
(Logique de l'analyseur) security_result.action Défini sur ALLOW si le résultat est positif.
(Logique de l'analyseur) security_result.action Définissez sur ALLOW si resultType est défini sur 0.
(Logique de l'analyseur) security_result.action Définissez sur BLOCK si resultType n'est pas égal à 0 et n'est pas égal à "".
(Logique de l'analyseur) security_result.category Définissez sur "AUTH_VIOLATION" si resultType n'est pas égal à 0 et n'est pas vide.
(Logique de l'analyseur) security_result.description Définissez la valeur sur "Appartenance au groupe modifiée" si operationName est "Ajouter un membre au groupe" et que le résultat est "success".
(Logique de l'analyseur) security_result.priority Définissez la valeur sur "MEDIUM_PRIORITY" si properties.riskLevelDuringSignIn est défini sur "medium".
(Logique de l'analyseur) security_result.summary Définissez la valeur sur "Connexion réussie" si resultType est défini sur 0.
(Logique de l'analyseur) security_result.summary Définissez la valeur sur "Échec de la connexion" si resultType n'est pas égal à 0 et n'est pas vide.
(Logique de l'analyseur) security_result.summary Définissez sur "properties.activityDisplayName" si elle existe.
(Logique de l'analyseur) security_result.severity Définissez sur INFORMATIONAL si le niveau est "Information", "Informational", "0" ou "4". Définissez la valeur sur "MEDIUM" si le niveau est "Warning", "1" ou "3". Définissez la valeur sur ERROR si le niveau est "Error" (Erreur) ou "2". Définissez sur CRITICAL si le niveau est "Critique".
(Logique de l'analyseur) security_result.severity Définissez sur ERROR si resultType n'est pas égal à 0 et n'est pas vide.

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