Collecter les journaux de connexion Microsoft Entra ID (anciennement Azure Active Directory)
Version de l'analyseur : 26.0
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 :
- Instance Google SecOps.
- Accès privilégié au portail Microsoft Azure.
- Rôle d'administrateur de sécurité ou d'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 son consentement pour n'importe quelle autorisation, pour n'importe quelle API.
- Administrateur de rôle privilégié : peut accorder le consentement pour n'importe quelle autorisation, pour n'importe quelle API.
- Administrateur d'applications cloud : peut accorder le consentement pour n'importe quelle autorisation pour n'importe quelle API, à l'exception des rôles d'application Microsoft Graph (autorisations d'application).
Méthode 1 : Azure Event Hub (recommandée)
Cette méthode permet de diffuser en flux continu les journaux de connexion Microsoft Entra ID via Azure Event Hub à l'aide des paramètres de diagnostic. Google SecOps ingère les journaux directement depuis Event Hub à l'aide du type de flux Azure Event Hub.
Créer un espace de noms Event Hubs
Un espace de noms Event Hubs est un conteneur de gestion pour un ou plusieurs hubs d'événements.
- Dans le portail Azure, recherchez Event Hubs.
- Cliquez sur + Créer.
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 de l'espace de noms Saisissez un nom unique (par exemple, secops-entraid-signin).Emplacement Sélectionnez la région la plus proche de votre locataire Microsoft Entra. Niveau de tarification Standard (recommandé pour la production) Unités de débit Commencer par 1, activer l'augmentation automatique (recommandé) Cliquez sur Examiner et créer.
Consultez l'aperçu, puis cliquez sur Créer.
Attendez la fin du déploiement (une à deux minutes).
Créer un hub d'événements
- Une fois l'espace de noms déployé, accédez à l'espace de noms Event Hub.
- Dans le volet de navigation de gauche, sélectionnez Event Hubs sous Entités.
- Cliquez sur + Event Hub.
Fournissez les informations de configuration suivantes :
Paramètre Valeur Nom Saisissez un nom unique (par exemple, entraid-signin-logs).Nombre de partitions 40 (recommandé pour une mise à l'échelle optimale de Google SecOps) Conservation des messages 7 jours (minimum recommandé) Capture Désactivé (non requis pour Google SecOps) Cliquez sur Créer.
Obtenir la chaîne de connexion Event Hub
Google SecOps nécessite une chaîne de connexion pour s'authentifier auprès de l'Event Hub.
Option A : Chaîne de connexion au niveau de l'espace de noms (recommandée)
- Accédez à l'espace de noms Event Hubs.
- Dans le panneau de navigation de gauche, sélectionnez Règles d'accès partagé sous Paramètres.
- Cliquez sur la règle par défaut RootManageSharedAccessKey.
- Copiez la chaîne de connexion (clé primaire).
- Enregistrez cette chaîne de connexion de manière sécurisée.
Exemple :
Original: Endpoint=sb://secops-entraid-signin.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=abc123==;EntityPath=entraid-signin-logs Remove EntityPath: Endpoint=sb://secops-entraid-signin.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=abc123==
Option B : Chaîne de connexion au niveau d'Event Hub
- Accédez au hub d'événements (et non à l'espace de noms).
- Dans le panneau de navigation de gauche, sélectionnez Règles d'accès partagé sous Paramètres.
- Cliquez sur + Ajouter pour créer une règle.
- Fournissez les informations de configuration suivantes :
- Nom de la règle : saisissez un nom descriptif (par exemple,
chronicle-read). - Autorisations : sélectionnez Écouter uniquement (accès en lecture seule).
- Nom de la règle : saisissez un nom descriptif (par exemple,
- Cliquez sur Créer.
- Cliquez sur la règle que vous venez de créer.
- Copiez la chaîne de connexion (clé primaire).
Enregistrez cette chaîne de connexion de manière sécurisée.
Configurer les paramètres de diagnostic Microsoft Entra ID
- Connectez-vous au Centre d'administration Microsoft Entra en tant qu'administrateur de la sécurité au minimum.
- Accédez à Entra ID > Surveillance et intégrité > Paramètres de diagnostic.
- Cliquez sur + Ajouter un paramètre de diagnostic.
- 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 : journaux de connexion des utilisateurs non interactifs (recommandé).
- ServicePrincipalSignInLogs : connexions du compte de service (facultatif).
- ManagedIdentitySignInLogs : connexions des identités gérées (facultatif).
- ADFSSignInLogs : journaux de connexion AD FS (facultatif, si AD FS est utilisé).
- RiskyUsers : utilisateurs signalés comme à risque par Microsoft Entra ID Protection (facultatif).
- UserRiskEvents : détails des événements de connexion à risque (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.
- Nom du paramètre de diagnostic : saisissez un nom descriptif (par exemple,
Cliquez sur Enregistrer.
(Facultatif) Configurer Azure Blob Storage pour la création de points de contrôle
Google SecOps peut utiliser Azure Blob Storage pour stocker les points de contrôle Event Hub, qui permettent de suivre les événements qui ont été traités. Cela permet d'éviter l'ingestion de doublons si le flux est temporairement interrompu.
Créer un compte de stockage pour la création de points de contrôle
- Dans le portail Azure, recherchez Comptes de stockage.
- Cliquez sur + Créer.
Fournissez les informations de configuration suivantes :
Paramètre Valeur Abonnement Sélectionnez votre abonnement Azure. Groupe de ressources Utiliser le même groupe de ressources qu'Event Hub Nom du compte de stockage Saisissez un nom unique (par exemple, secopsaadsignin).Région Même région que le hub d'événements Performances Standard Redondance LRS (stockage localement redondant) Cliquez sur Examiner et créer.
Cliquez sur Créer.
Créer un conteneur Blob
- Accédez au compte de stockage que vous avez créé.
- Dans le panneau de navigation de gauche, sélectionnez Conteneurs sous Stockage de données.
- Cliquez sur + Conteneur.
- Fournissez les informations de configuration suivantes :
- Nom : saisissez
checkpoints. - Niveau d'accès public : privé (aucun accès anonyme)
- Nom : saisissez
- Cliquez sur Créer.
Obtenir les identifiants du compte de stockage
- Dans le compte de stockage, sélectionnez Clés d'accès sous Sécurité et mise en réseau.
- Cliquez sur Afficher les clés.
- Copiez et enregistrez :
- Nom du compte de stockage : nom de votre compte de stockage.
- Clé 1 : valeur de la clé d'accès.
(Facultatif) Créer un groupe de consommateurs dédié
Par défaut, Event Hub fournit un groupe de consommateurs nommé $Default. Pour les environnements de production, il est recommandé de créer un groupe de consommateurs dédié pour Google SecOps.
- Accédez au hub d'événements (et non à l'espace de noms).
- Dans le panneau de navigation de gauche, sélectionnez Groupes de consommateurs sous Entités.
- Cliquez sur + Groupe de consommateurs.
- Fournissez les informations de configuration suivantes :
- Nom : saisissez un nom descriptif (par exemple,
chronicle).
- Nom : saisissez un nom descriptif (par exemple,
Cliquez sur Créer.
Configurer un flux dans Google SecOps pour ingérer les journaux de connexion Microsoft Entra ID
- Accédez à Paramètres SIEM> Flux.
- Cliquez sur Add New Feed (Ajouter un flux).
- Sur la page suivante, cliquez sur Configurer un seul flux.
- Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple,
Microsoft Entra ID Sign-In Logs - Event Hub). - Sélectionnez Microsoft Azure Event Hub comme type de source.
- Sélectionnez Microsoft Azure AD comme type de journal.
- Cliquez sur Suivant.
Spécifiez les valeurs des paramètres d'entrée suivants :
- Chaîne de connexion Event Hub : saisissez la chaîne de connexion Event Hub que vous avez capturée précédemment.
Si vous utilisez une chaîne de connexion au niveau de l'espace de noms :
- Assurez-vous d'avoir supprimé le paramètre
EntityPath. - Vous devez également indiquer le nom de l'Event Hub dans le champ suivant.
Si vous utilisez une chaîne de connexion au niveau du hub d'événements :
- Utilisez la chaîne de connexion telle quelle (y compris
EntityPath). Vous pouvez laisser le champ Nom du hub d'événements vide.
- Nom du hub d'événements : saisissez le nom du hub d'événements (par exemple,
entraid-signin-logs).
Obligatoire si vous utilisez une chaîne de connexion au niveau de l'espace de noms. Facultatif si vous utilisez une chaîne de connexion au niveau du hub d'événements.
- Nom du hub d'événements : saisissez le nom du hub d'événements (par exemple,
Groupe de consommateurs (facultatif) : saisissez le nom du groupe de consommateurs.
Laissez ce champ vide pour utiliser le groupe de consommateurs
$Defaultpar défaut.Si vous avez créé un groupe de consommateurs dédié, saisissez son nom (
chronicle, par exemple).Nom du conteneur Blob Storage (facultatif) : pour la création de points de contrôle, saisissez le nom du conteneur (par exemple,
checkpoints).
Si vous fournissez un stockage de blobs pour la création de points de contrôle :
- Nom du compte de stockage Azure : saisissez le nom du compte de stockage à partir de la configuration du point de contrôle.
Clé du compte de stockage Azure : saisissez la clé d'accès à partir de la configuration du point de contrôle.
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.
Cliquez sur Suivant.
Vérifiez la configuration de votre nouveau flux sur l'écran Finaliser, puis cliquez sur Envoyer.
Méthode 2 : API tierce
Cette méthode utilise l'API Microsoft Graph pour récupérer les journaux de connexion Microsoft 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
- Accédez à Paramètres SIEM> Flux.
- Cliquez sur Add New Feed (Ajouter un flux).
- Notez les plages d'adresses IP affichées dans l'interface de création de flux.
- 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 :
- Dans le centre d'administration Microsoft Entra, accédez à Protection > Accès conditionnel > Lieux nommés.
- Cliquez sur + Nouveau lieu.
- 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.
- Nom : saisissez
- Cliquez sur Créer.
- Accédez à Accès conditionnel > Stratégies.
- 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 Rangesou le principal de service spécifique.
Configurer l'accès à l'API Microsoft Entra ID
Créer un enregistrement d'application
- Connectez-vous au centre d'administration Microsoft Entra ou au portail Azure.
- Accédez à Identité > Applications > Inscriptions d'applications.
- Cliquez sur Nouvelle inscription.
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 de service).
- Nom : saisissez un nom descriptif (par exemple,
Cliquez sur S'inscrire.
Après l'enregistrement, copiez et enregistrez les valeurs suivantes :
- ID de l'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 :
- Dans l'enregistrement de l'application, accédez à Autorisations d'API.
- Cliquez sur Ajouter une autorisation.
- Sélectionnez Microsoft Graph> Autorisations de l'application.
- Sélectionnez les autorisations suivantes :
- AuditLog.Read.All : requis pour lire les journaux de connexion.
- Directory.Read.All : requis par l'API Microsoft Graph pour accéder aux journaux de connexion (problème connu).
- SecurityEvents.Read.All : requis par Google Security Operations.
- Cliquez sur Ajouter des autorisations.
- Cliquez sur Accorder le consentement administrateur pour [Votre organisation].
- 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
- Accédez à Certificats et codes secrets.
- Cliquez sur Nouvelle clé secrète client.
Fournissez les informations de configuration suivantes :
- Description : saisissez un nom descriptif (par exemple,
Google SecOps Feed). - Expiration : sélectionnez une période d'expiration.
- Description : saisissez un nom descriptif (par exemple,
Cliquez sur Ajouter.
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 du 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 un flux dans Google SecOps pour ingérer les journaux de connexion Microsoft Entra ID
Configurer le flux
- Accédez à Paramètres SIEM> Flux.
- Cliquez sur Add New Feed (Ajouter un flux).
- Sur la page suivante, cliquez sur Configurer un seul flux.
- Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple,
Microsoft Entra ID Sign-In Logs). - Sélectionnez API tierce comme type de source.
- Sélectionnez Microsoft Azure AD comme type de journal.
- Cliquez sur Suivant.
Configurer les paramètres du flux
Spécifiez les valeurs des paramètres d'entrée suivants :
- ID client OAuth : ID (client) de l'application à partir 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/signInsPoint de terminaison d'authentification de l'API : point de terminaison d'authentification Microsoft Active Directory :
login.microsoftonline.comOptions avancées :
- Nom du flux : valeur préremplie qui identifie le flux.
- Type de source : API tierce (mécanisme de collecte des journaux dans Google SecOps).
- 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.
- Cliquez sur Suivant.
Vérifiez la configuration de votre nouveau flux sur l'écran Finaliser, puis cliquez sur Envoyer.
Points de terminaison régionaux
Pour les déploiements Microsoft Entra ID dans les 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 tentera d'utiliser d'autres formats, comme "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 |
Directement mappé à partir de appId avec la clé d'étiquette "ID de l'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é d'étiquette "applied_conditional_access_policies_enforced_grant_controls". |
appliedConditionalAccessPolicies.[].enforcedSessionControls |
security_result.[].rule_labels.value |
Directement mappé à partir de appliedConditionalAccessPolicies.[].enforcedSessionControls avec la clé d'étiquette "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é d'étiquette "Result". |
authenticationDetails.[].authenticationMethod |
security_result.[].detection_fields.value |
Mappé directement à partir de authenticationDetails.[].authenticationMethod avec la clé d'étiquette "authenticationMethod". |
authenticationDetails.[].authenticationMethodDetail |
security_result.[].detection_fields.value |
Directement mappé à partir de authenticationDetails.[].authenticationMethodDetail avec la clé d'étiquette "authenticationMethodDetail". |
authenticationDetails.[].authenticationStepDateTime |
security_result.[].detection_fields.value |
Directement mappé à partir de authenticationDetails.[].authenticationStepDateTime avec la clé d'étiquette "authenticationStepDateTime". |
authenticationDetails.[].authenticationStepRequirement |
security_result.[].detection_fields.value |
Mappé directement à partir de authenticationDetails.[].authenticationStepRequirement avec la clé d'étiquette "authenticationStepRequirement". |
authenticationDetails.[].authenticationStepResultDetail |
security_result.[].detection_fields.value |
Directement mappé à partir de authenticationDetails.[].authenticationStepResultDetail avec la clé d'étiquette "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é d'étiquette "AuthenticationRequirement". |
authenticationRequirementPolicies.[].detail |
security_result.detection_fields.value |
Mappé directement à partir de authenticationRequirementPolicies.[].detail avec la clé d'étiquette "detail". |
authenticationRequirementPolicies.[].requirementProvider |
security_result.detection_fields.value |
Mappé directement à partir de authenticationRequirementPolicies.[].requirementProvider avec la clé d'étiquette "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é d'étiquette "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é d'étiquette "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é d'étiquette "isCompliant". |
deviceDetail.isManaged |
principal.asset.attribute.labels.value |
Mappé directement à partir de deviceDetail.isManaged avec la clé d'étiquette "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é d'étiquette "trustType". |
durationMs |
additional.fields.value.string_value |
Mappé directement à partir de durationMs avec la clé d'étiquette "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 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", "Warning", "1", "3", "Error", "2" et "Critical". |
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é d'étiquette "networkName {index}". |
networkLocationDetails.[].networkType |
security_result.detection_fields.value, additional.fields.value.string_value |
Mappé directement à partir de networkLocationDetails.[].networkType avec la clé d'étiquette "networkType". Également utilisé comme additional.fields.value.string_value avec la clé d'étiquette "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 tentera d'utiliser d'autres formats, comme "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é d'étiquette "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é d'étiquette "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é d'étiquette "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é d'étiquette "authenticationMethod". |
properties.authenticationDetails.[].authenticationMethodDetail |
security_result.detection_fields.value |
Directement mappé à partir de properties.authenticationDetails.[].authenticationMethodDetail avec la clé d'étiquette "authenticationMethodDetail". |
properties.authenticationDetails.[].authenticationStepDateTime |
security_result.detection_fields.value |
Directement mappé à partir de properties.authenticationDetails.[].authenticationStepDateTime avec la clé d'étiquette "authenticationStepDateTime". |
properties.authenticationDetails.[].authenticationStepRequirement |
security_result.detection_fields.value |
Mappé directement à partir de properties.authenticationDetails.[].authenticationStepRequirement avec la clé d'étiquette "authenticationStepRequirement". |
properties.authenticationDetails.[].authenticationStepResultDetail |
security_result.detection_fields.value |
Directement mappé à partir de properties.authenticationDetails.[].authenticationStepResultDetail avec la clé d'étiquette "authenticationStepResultDetail". |
properties.authenticationRequirement |
additional.fields.value.string_value |
Mappé directement à partir de properties.authenticationRequirement avec la clé d'étiquette "AuthenticationRequirement". |
properties.authenticationRequirementPolicies.[].detail |
security_result.detection_fields.value |
Mappé directement à partir de properties.authenticationRequirementPolicies.[].detail avec la clé d'étiquette "detail". |
properties.authenticationRequirementPolicies.[].requirementProvider |
security_result.detection_fields.value |
Mappé directement à partir de properties.authenticationRequirementPolicies.[].requirementProvider avec la clé d'étiquette "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é d'étiquette "conditionalAccessStatus". |
properties.crossTenantAccessType |
additional.fields.value.string_value |
Mappé directement à partir de properties.crossTenantAccessType avec la clé d'étiquette "crossTenantAccessType". |
properties.detectedDateTime |
additional.fields.value.string_value |
Mappé directement à partir de properties.detectedDateTime avec la clé d'étiquette "detectedDateTime". |
properties.detectionTimingType |
additional.fields.value.string_value |
Mappé directement à partir de properties.detectionTimingType avec la clé d'étiquette "detectionTimingType". |
properties.homeTenantId |
additional.fields.value.string_value |
Mappé directement à partir de properties.homeTenantId avec la clé d'étiquette "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 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é d'étiquette "isGuest". |
properties.isDeleted |
additional.fields.value.string_value |
Mappé directement à partir de properties.isDeleted avec la clé d'étiquette "isDeleted". |
properties.isProcessing |
additional.fields.value.string_value |
Directement mappé à partir de properties.isProcessing avec la clé d'étiquette "isProcessing". |
properties.lastUpdatedDateTime |
additional.fields.value.string_value |
Directement mappé à partir de properties.lastUpdatedDateTime avec la clé d'étiquette "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é d'étiquette "properties networkName {index}". |
properties.networkLocationDetails.[].networkType |
additional.fields.value.string_value |
Mappé directement à partir de properties.networkLocationDetails.[].networkType avec la clé d'étiquette "properties networkType {index}". |
properties.riskEventType |
additional.fields.value.string_value |
Mappé directement à partir de properties.riskEventType avec la clé d'étiquette "riskEventType". |
properties.riskLastUpdatedDateTime |
additional.fields.value.string_value |
Directement mappé à partir de properties.riskLastUpdatedDateTime avec la clé d'étiquette "riskLastUpdatedDateTime". |
properties.riskLevel |
additional.fields.value.string_value |
Mappé directement à partir de properties.riskLevel avec la clé d'étiquette "riskLevel". |
properties.riskLevelDuringSignIn |
additional.fields.value.string_value |
Mappé directement à partir de properties.riskLevelDuringSignIn avec la clé d'étiquette "riskLevelDuringSignIn". |
properties.riskState |
additional.fields.value.string_value |
Mappé directement à partir de properties.riskState avec la clé d'étiquette "riskState". |
properties.riskDetail |
additional.fields.value.string_value |
Mappé directement à partir de properties.riskDetail avec la clé d'étiquette "riskDetail". |
properties.riskType |
additional.fields.value.string_value |
Mappé directement à partir de properties.riskType avec la clé d'étiquette "riskType". |
properties.source |
additional.fields.value.string_value |
Mappé directement à partir de properties.source avec la clé d'étiquette "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é d'étiquette "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 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é d'étiquette "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é d'étiquette "riskDetail". |
riskEventTypes.[]. |
additional.fields.value.string_value, additional.fields.value.list_value.values.string_value |
Les valeurs sont ajoutées à une liste dont la clé est "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é d'étiquette "riskLevelAggregated". |
riskLevelDuringSignIn |
additional.fields.value.string_value |
Mappé directement à partir de riskLevelDuringSignIn avec la clé d'étiquette "riskLevelDuringSignIn". |
riskState |
additional.fields.value.string_value |
Mappé directement à partir de riskState avec la clé d'étiquette "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éfinissez-le 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 sur "Appartenance à un 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-le sur "MEDIUM_PRIORITY" si properties.riskLevelDuringSignIn est défini sur "medium". |
| (Logique de l'analyseur) | security_result.summary |
Définissez sur "Connexion réussie" si resultType est défini sur 0. |
| (Logique de l'analyseur) | security_result.summary |
Définissez 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-le 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-le sur ERROR si le niveau est "Error" 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 ni à "". |
Journal des modifications
Afficher le journal des modifications pour ce parseur
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.