Tutoriel : Rapports personnalisés dans Azure Data Explorer à l’aide de données de Microsoft Entra
Dans ce tutoriel, vous allez apprendre à créer des rapports personnalisés dans Azure Data Explorer (ADX) à l’aide de données provenant des services Microsoft Entra ID et Microsoft Entra ID Governance. Ce tutoriel complète d’autres options de création de rapports, telles que rapport Archive & avec Azure Monitor et la gestion des droits d’utilisation, qui se concentrent sur l’exportation du journal d’audit dans Azure Monitor pour la rétention et l’analyse. Par comparaison, l’exportation des données d’ID Microsoft Entra vers Azure Data Explorer offre une flexibilité pour créer des rapports personnalisés sur des objets Microsoft Entra, notamment des objets historiques et supprimés. En outre, l’utilisation d’Azure Data Explorer permet l’agrégation de données à partir de sources supplémentaires, avec une scalabilité massive, un schéma flexible et des stratégies de rétention. Azure Data Explorer est particulièrement utile lorsque vous devez conserver les données d’accès pendant des années, effectuer des enquêtes ad hoc ou exécuter des requêtes personnalisées sur les données d’accès utilisateur.
Cet article explique comment afficher la configuration, les utilisateurs et les droits d’accès exportés à partir de Microsoft Entra, ainsi que les données exportées à partir d’autres sources, telles que les applications disposant de droits d’accès dans leurs propres bases de données SQL. Vous pouvez ensuite utiliser le langage de requête Kusto (KQL) dans Azure Data Explorer pour créer des rapports personnalisés en fonction des exigences de votre organisation.
Pour créer ces rapports, procédez comme suit :
- configurer azure Data Explorer dans un abonnement Azure ou créer un cluster gratuit.
- Extraire des données de l’ID Microsoft Entra à l’aide de scripts PowerShell et de Microsoft Graph.
- Créer des tables et importer ces données à partir de Microsoft Entra ID dans Azure Data Explorer.
- Extraire des données de Microsoft Entra ID Governance.
- Créer des tables et importer ces données à partir de Microsoft Entra ID Governance dans Azure Data Explorer.
- Créez une requête personnalisée à l’aide du langage de requête Kusto.
À la fin de ce tutoriel, vous pourrez développer des vues personnalisées des droits d’accès et des autorisations des utilisateurs. Ces vues s’étendent sur différentes applications à l’aide d’outils pris en charge par Microsoft. Vous pouvez également importer des données provenant de bases de données ou d’applications tierces pour les signaler également.
Prérequis
Si vous débutez avec Azure Data Explorer et que vous souhaitez découvrir les scénarios présentés dans cet article, vous pouvez obtenir un cluster Azure Data Explorer gratuit. Pour une utilisation prise en charge en production avec un contrat de niveau de service pour Azure Data Explorer, vous avez besoin d’un abonnement Azure pour héberger un cluster Azure Data Explorer complet.
Déterminez les données que vous souhaitez inclure dans vos rapports. Les scripts de cet article fournissent des exemples avec des données spécifiques provenant d’utilisateurs, de groupes et d’applications de Microsoft Entra. Ces exemples sont destinés à illustrer les types de rapports que vous pouvez générer avec cette approche, mais vos besoins de création de rapports spécifiques peuvent varier et nécessiter des données différentes ou supplémentaires. Vous pouvez commencer par ces objets et apporter plus de types d’objets Microsoft Entra au fil du temps.
- Cet article illustre la récupération des données de Microsoft Entra en tant qu’utilisateur connecté. Pour ce faire, vérifiez que vous disposez des attributions de rôles requises pour récupérer des données de Microsoft Entra. Vous avez besoin des rôles disposant des autorisations appropriées pour exporter le type de données Microsoft Entra avec lesquelles vous souhaitez travailler.
- Données utilisateur : Administrateur général, Administrateur de rôle privilégié, Administrateur d’utilisateur
- Données de groupes : Administrateur général, Administrateur de rôle privilégié, Administrateur de groupe
- Attribution de rôle d’application : Administrateur de rôle privilégié, Administrateur d’application cloud ou Administrateur d’application
- Microsoft Graph PowerShell doit être accepté pour permettre la récupération d’objets Microsoft Entra via Microsoft Graph. Les exemples de ce didacticiel nécessitent les autorisations User.Read.All, Group.Read.All, Application.Read.All et Directory.Read.All déléguées. Si vous envisagez de récupérer des données à l’aide d’Automation sans utilisateur connecté, consentez plutôt aux autorisations d’application correspondantes. Consultez la documentation de référence sur les autorisations Microsoft Graph pour plus d’informations. Si vous n’avez pas déjà consenti à Microsoft Graph PowerShell à ces autorisations, vous devez être administrateur général pour effectuer cette opération de consentement.
- Ce didacticiel n’illustre pas les attributs de sécurité personnalisés. Par défaut, l’administrateur général et d’autres rôles d’administrateur n’incluent pas d’autorisations pour lire les attributs de sécurité personnalisés des utilisateurs de Microsoft Entra. Si vous envisagez de récupérer des attributs de sécurité personnalisés, d’autres rôles et autorisations peuvent être nécessaires.
- Sur l’ordinateur sur lequel Microsoft Graph PowerShell est installé, vérifiez que vous disposez d’un accès en écriture au répertoire du système de fichiers. C’est là que vous installez les modules PowerShell Microsoft Graph requis et où les données Microsoft Entra exportées sont enregistrées.
- Vérifiez que vous disposez des autorisations nécessaires pour récupérer des données à partir d’autres sources de données au-delà de Microsoft Entra, si vous souhaitez également incorporer ces données dans Azure Data Explorer.
1 : Configurer Azure Data Explorer
Si vous n’avez pas déjà utilisé Azure Data Explorer, vous devez d’abord le configurer. Vous pouvez créer un cluster gratuit sans abonnement Azure ou carte de crédit ou un cluster complet qui nécessite un abonnement Azure. Consultez Démarrage rapide : Créer un cluster et une base de données pour l’Explorateur de données Azure pour commencer.
2 : Extraire des données d’ID Microsoft Entra avec PowerShell
Dans cette section, vous installez des modules Microsoft Graph PowerShell et, dans PowerShell, connectez-vous à Microsoft Graph pour extraire les données Microsoft Entra ID.
La première fois que votre organisation utilise ces modules pour ce scénario, vous devez être dans un rôle d’administrateur général pour permettre à Microsoft Graph PowerShell d’accorder le consentement pour une utilisation dans votre locataire. Les interactions suivantes peuvent utiliser un rôle à privilèges inférieurs.
- Ouvrez PowerShell.
- Si vous n’avez pas tous les modules Microsoft Graph PowerShell déjà installés, installez les modules Microsoft Graph requis. Les modules suivants sont requis pour cette section du didacticiel :
Microsoft.Graph.Authentication
,Microsoft.Graph.Users
,Microsoft.Graph.Groups
,Microsoft.Graph.Applications
,Microsoft.Graph.DirectoryObjects
. Si ces modules sont déjà installés, passez à l’étape suivante.
$modules = @('Microsoft.Graph.Users', 'Microsoft.Graph.Groups', 'Microsoft.Graph.Applications', 'Microsoft.Graph.DirectoryObjects')
foreach ($module in $modules) {
Install-Module -Name $module -Scope CurrentUser -AllowClobber -Force
}
- Importez les modules dans la session PowerShell actuelle.
$modules = @('Microsoft.Graph.Users', 'Microsoft.Graph.Groups', 'Microsoft.Graph.Applications', 'Microsoft.Graph.DirectoryObjects')
foreach ($module in $modules) {
Import-Module -Name $module
}
- Connectez-vous à Microsoft Graph. Cette section du tutoriel illustre la lecture des utilisateurs, des groupes et des applications, et nécessite les étendues d’autorisations
User.Read.All
,Group.Read.All
,Application.Read.All
etDirectory.Read.All
. Pour plus d’informations sur les autorisations, consultez Référence d’autorisations Microsoft Graph.
Connect-MgGraph -Scopes "User.Read.All", "Group.Read.All", "Application.Read.All", "Directory.Read.All" -ContextScope Process -NoWelcome
Cette commande vous invite à vous connecter avec vos informations d’identification Microsoft Entra. Après vous être connecté, vous devrez peut-être donner votre consentement aux autorisations requises s’il s’agit de votre première connexion ou si de nouvelles autorisations sont requises.
Requêtes PowerShell pour extraire les données d’ID Microsoft Entra nécessaires pour générer des rapports personnalisés dans Azure Data Explorer
Les requêtes suivantes extraient les données d’ID Microsoft Entra de Microsoft Graph à l’aide de PowerShell et exportent les données vers des fichiers JSON importés dans Azure Data Explorer dans la section 3 suivante. Il peut y avoir plusieurs scénarios pour générer des rapports avec ce type de données, notamment :
- Un auditeur souhaite voir un rapport qui réunit les membres de 10 groupes, organisés par le département des membres.
- Un auditeur souhaite voir un rapport de tous les utilisateurs qui ont accédé à une application entre deux dates.
Vous pouvez également importer des données dans Azure Data Explorer à partir d’autres sources au-delà de Microsoft Entra. Cela active des scénarios tels que :
- Un administrateur souhaite afficher tous les utilisateurs ajoutés à une application à partir de l’ID Microsoft Entra et leurs droits d’accès dans le propre référentiel de l’application, tels que les bases de données SQL.
Ces types de rapports ne sont pas intégrés à l’ID Microsoft Entra. Toutefois, vous pouvez créer ces rapports vous-même en extrayant des données d’Entra et en les combinant à l’aide de requêtes personnalisées dans Azure Data Explorer. Cela sera abordé plus loin dans le tutoriel, dans la section Apporter des données à partir d'autres sources.
Pour ce tutoriel, nous extrayons les données d’ID Microsoft Entra à partir de plusieurs domaines :
- Les informations utilisateur telles que le nom d’affichage, l’UPN et les détails du travail
- Informations de groupe, y compris leurs appartenances
- Attributions des applications et des rôles d’application
Ce jeu de données nous permet d’effectuer un large ensemble de requêtes autour de qui a été donné l’accès à une application, avec ses informations de rôle d’application et la période associée. Notez qu’il s’agit d’exemples de requêtes, et que vos données et exigences spécifiques peuvent différer de ce qui est affiché ici.
Remarque
Les locataires plus volumineux peuvent rencontrer des erreurs de limitation / 429 erreurs qui sont gérées par le module Microsoft Graph. Azure Data Explorer peut également limiter les tailles de chargement de fichiers.
Dans ces scripts PowerShell, nous exportons les propriétés sélectionnées des objets Microsoft Entra vers des fichiers JSON. Les données de ces propriétés exportées sont utilisées pour générer des rapports personnalisés dans Azure Data Explorer. Les propriétés spécifiques suivantes ont été incluses dans ces exemples, car nous utilisons ces données pour illustrer les types de rapports que vous pouvez créer dans Azure Data Explorer. Étant donné que vos besoins de rapport spécifiques varient probablement de ce qui s’affiche, vous devez inclure les propriétés spécifiques dans ces scripts que vous souhaitez voir dans vos rapports. Toutefois, vous pouvez suivre le même modèle illustré pour vous aider à générer vos scripts.
Sélectionner une date de capture instantanée
Nous avons inclus une date de capture instantanée codée en dur qui identifie les données du fichier JSON avec une date spécifique et nous permet de suivre les jeux de données similaires au fil du temps dans Azure Data Explorer. La date d’instantané est également utile pour comparer les modifications apportées aux données entre deux dates d’instantané.
$SnapshotDate = Get-Date -AsUTC -Format "yyyy-MM-dd"
Obtenir les données utilisateur Entra
Ce script exporte les propriétés sélectionnées de l’objet utilisateur Entra vers un fichier JSON. Nous allons importer ces données et d’autres données à partir d’autres fichiers JSON dans Azure Data Explorer dans une section suivante de ce didacticiel.
function Export-EntraUsersToJson {
# Define a hash table for property mappings
$propertyMappings = @{
"Id" = "ObjectID"
"DisplayName" = "DisplayName"
"UserPrincipalName" = "UserPrincipalName"
"EmployeeId" = "EmployeeId"
"UserType" = "UserType"
"CreatedDateTime" = "CreatedDateTime"
"JobTitle" = "JobTitle"
"Department" = "Department"
"AccountEnabled" = "AccountEnabled"
# Add custom properties as needed
"custom_extension" = "CustomExtension"
}
# Retrieve users with specified properties and create custom objects directly
$users = Get-MgUser -Select ($propertyMappings.Keys) -All | ForEach-Object {
$userObject = @{}
foreach ($key in $propertyMappings.Keys) {
if ($key -eq "CreatedDateTime") {
# Convert date string directly to DateTime and format it
$date = [datetime]::Parse($_.$key)
$userObject[$propertyMappings[$key]] = $date.ToString("yyyy-MM-dd")
} else {
$userObject[$propertyMappings[$key]] = $_.$key
}
}
# Additional properties or transformations
$userObject["SnapshotDate"] = $SnapshotDate
[pscustomobject]$userObject
}
# Convert the user data to JSON and save it to a file
$users | ConvertTo-Json -Depth 2 | Set-Content ".\EntraUsers.json"
}
# Execute the function
Export-EntraUsersToJson
Obtenir des données de groupe
Générez un fichier JSON avec des noms de groupe et des ID utilisés pour créer des vues personnalisées dans Azure Data Explorer. L’exemple inclut tous les groupes, mais un filtrage supplémentaire peut être inclus si nécessaire. Si vous filtrez pour inclure uniquement certains groupes, vous pouvez inclure la logique dans votre script pour rechercher des groupes imbriqués.
# Get all groups and select Id and DisplayName
$groups = Get-MgGroup -All | Select-Object Id,DisplayName
# Export the groups to a JSON file
$groups | ConvertTo-Json | Set-Content ".\EntraGroups.json"
Obtenir les données d’appartenance de groupe
Générez un fichier JSON avec l’appartenance au groupe qui est utilisé pour créer des vues personnalisées dans Azure Data Explorer. L’exemple inclut tous les groupes, mais un filtrage supplémentaire peut être inclus si nécessaire.
# Retrieve all groups from Microsoft Entra (Azure AD)
$groups = Get-MgGroup -All
# Initialize an array to store results
$results = @()
# Iterate over each group
foreach ($group in $groups) {
# Extract the group ID
$groupId = $group.Id
# Get members of the current group and select their IDs
$members = Get-MgGroupMember -GroupId $groupId | Select-Object -ExpandProperty Id
# Add a custom object with group ID and member IDs to the results array
$results += [PSCustomObject]@{
GroupId = $groupId
Members = $members
SnapshotDate = $SnapshotDate
}
# Pause for a short time to avoid rate limits
Start-Sleep -Milliseconds 200
}
# Convert the results array to JSON format and save it to a file
$results | ConvertTo-Json | Set-Content "EntraGroupMembership.json"
Obtenir des données d’application et de principal de service
Génère un fichier JSON avec toutes les applications et les principaux de service correspondants dans le locataire. Nous allons importer ces données dans Azure Data Explorer dans une section suivante de ce didacticiel qui nous permet de générer des rapports personnalisés liés aux applications en fonction de ces données.
# Fetch applications and their corresponding service principals, then export to JSON
Get-MgApplication -All | ForEach-Object {
$app = $_
$sp = Get-MgServicePrincipal -Filter "appId eq '$($app.AppId)'"
[pscustomobject]@{
Name = $app.DisplayName
ApplicationId = $app.AppId
ServicePrincipalId = $sp.Id
SnapshotDate = $SnapshotDate
}
} | ConvertTo-Json -Depth 10 | Set-Content "Applications.json"
Obtenir des données AppRole
Générez un fichier JSON de tous les appRoles des applications d'entreprise dans Microsoft Entra. Une fois importés dans Azure Data Explorer, nous utilisons ces données pour générer des rapports impliquant des attributions de rôles d’application pour les utilisateurs.
# Get a list of all applications, handle pagination manually if necessary
$apps = Get-MgApplication -All
# Loop through each application to gather the desired information
$results = foreach ($app in $apps) {
# Get the service principal for the application using its appId
$spFilter = "appId eq '$($app.AppId)'"
$sp = Get-MgServicePrincipal -Filter $spFilter | Select-Object -First 1
# Process AppRoles, if any, for the application
$appRoles = if ($app.AppRoles) {
$app.AppRoles | Where-Object { $_.AllowedMemberTypes -contains "User" } |
Select-Object Id, Value, DisplayName
}
# Construct a custom object with application and service principal details
[PSCustomObject]@{
ApplicationId = $app.AppId
DisplayName = $app.DisplayName
ServicePrincipalId = $sp.Id
AppRoles = $appRoles
SnapshotDate = $SnapshotDate
}
}
# Export the results to a JSON file
$results | ConvertTo-Json -Depth 4 | Out-File 'AppRoles.json'
Obtenir les données d’affectation AppRole
Générez un fichier JSON de toutes les attributions de rôles d’application des utilisateurs dans le locataire.
$users = Get-MgUser -All
$result = @()
foreach ($user in $users) {
Get-MgUserAppRoleAssignment -UserId $user.Id | ForEach-Object {
# Use the same date formatting approach
$createdDateTime = $_.CreatedDateTime -replace "\\/Date\((\d+)\)\\/", '$1'
# Convert the milliseconds timestamp to a readable date format if needed
$result += [PSCustomObject]@{
AppRoleId = $_.AppRoleId
CreatedDateTime = $createdDateTime
PrincipalDisplayName = $_.PrincipalDisplayName
PrincipalId = $_.PrincipalId
ResourceDisplayName = $_.ResourceDisplayName
ResourceId = $_.ResourceId
SnapshotDate = $SnapshotDate
}
}
}
$result | ConvertTo-Json -Depth 10 | Out-File "AppRoleAssignments.json"
3 : Créer des tables et importer des fichiers JSON avec des données de Microsoft Entra ID dans Azure Data Explorer
Dans cette section, nous importons les fichiers JSON nouvellement créés pour les services d’ID Microsoft Entra en tant que tables dans Azure Data Explorer pour une analyse plus approfondie. Lors de la première importation à l’aide de l’interface utilisateur web Azure Data Explorer, vous allez créer les tables en fonction du schéma que l’interface utilisateur web suggère à partir de chaque fichier JSON.
Une fois que vous avez configuré une base de données dans votre cluster Azure Data Explorer ou un cluster gratuit, comme décrit dans la première section de cet article, accédez à cette base de données.
- Connectez-vous à l’interface utilisateur web d’Azure Data Explorer .
- Dans le menu de gauche, sélectionnez Requête.
Ensuite, suivez ces étapes pour chaque fichier JSON exporté pour obtenir vos données exportées dans cette base de données Azure Data Explorer en tant que nouvelle table.
Cliquez avec le bouton droit sur le nom de la base de données dans laquelle vous souhaitez ingérer les données. Sélectionnez Obtenir des données.
Sélectionnez la source de données dans la liste disponible. Dans ce tutoriel, vous ingérerez des données à partir d’un fichier local .
Sélectionnez + Nouvelle table et entrez un nom de table, en fonction du nom du fichier JSON que vous importez, par exemple, si vous importez EntraUsers.json, nommez la table EntraUsers. Une fois la première importation terminée, la table existe déjà et vous pouvez la sélectionner comme table cible pour une importation ultérieure.
Sélectionnez Rechercher des fichiers, sélectionnez le fichier JSON, puis sélectionnez Suivant.
Azure Data Explorer détecte automatiquement le schéma et fournit un aperçu sous l’onglet Inspecter. Sélectionnez Terminer pour créer la table et importer les données à partir de ce fichier. Une fois les données ingérées, cliquez sur Fermer.
Répétez chacune des étapes précédentes pour chacun des fichiers JSON que vous avez générés dans la section précédente.
À la fin de ces étapes, vous aurez les tables EntraUsers
, EntraGroups
, EntraGroupMembership
, Applications
, AppRoles
et AppRoleAssignments
dans la base de données.
4 : Extraire les données de gouvernance d’ID Microsoft Entra avec PowerShell
Dans cette section, vous allez utiliser PowerShell pour extraire des données des services microsoft Entra ID Governance. Si vous n’avez pas microsoft Entra ID Governance, Microsoft Entra ID P2 ou Microsoft Entra Suite, continuez dans la section utilisez Azure Data Explorer pour générer des rapports personnalisés.
Pour cela, vous devrez peut-être installer des modules PowerShell Microsoft Graph pour extraire les données de gouvernance des ID Microsoft Entra. La première fois que votre organisation utilise ces modules pour ce scénario, vous devez être dans un rôle d’administrateur général pour permettre à Microsoft Graph PowerShell d’accorder le consentement pour une utilisation dans votre locataire. Les interactions suivantes peuvent utiliser un rôle à privilèges inférieurs.
- Ouvrez PowerShell.
- Si vous n’avez pas tous les modules Microsoft Graph PowerShell déjà installés, installez les modules Microsoft Graph requis. Les modules suivants sont requis pour cette section du didacticiel :
Microsoft.Graph.Identity.Governance
. Si ces modules sont déjà installés, passez à l’étape suivante.
$modules = @('Microsoft.Graph.Identity.Governance')
foreach ($module in $modules) {
Install-Module -Name $module -Scope CurrentUser -AllowClobber -Force
}
- Importez les modules dans la session PowerShell actuelle.
$modules = @('Microsoft.Graph.Identity.Governance')
foreach ($module in $modules) {
Import-Module -Name $module
}
- Connectez-vous à Microsoft Graph. Cette section du didacticiel illustre la récupération des données à partir de la gestion des droits d’utilisation et des révisions d’accès, ce qui nécessite les étendues d’autorisation
AccessReview.Read.All
etEntitlementManagement.Read.All
. Pour d'autres cas d'utilisation de création de rapports, tels que PIM ou flux de cycle de vie, mettez à jour le paramètreScopes
avec les autorisations nécessaires. Pour plus d'informations sur les autorisations, consultez la référence des autorisations Microsoft Graph .
Connect-MgGraph -Scopes "AccessReview.Read.All, EntitlementManagement.Read.All" -ContextScope Process -NoWelcome
Cette commande vous invite à vous connecter avec vos informations d’identification Microsoft Entra. Après vous être connecté, vous devrez peut-être donner votre consentement aux autorisations requises s’il s’agit de votre première connexion ou si de nouvelles autorisations sont requises.
Requêtes PowerShell pour extraire les données de gouvernance d’ID Microsoft Entra nécessaires pour générer des rapports personnalisés dans Azure Data Explorer
Vous pouvez utiliser des requêtes pour extraire des données microsoft Entra ID Governance à partir de Microsoft Graph à l’aide de PowerShell et exporter les données vers des fichiers JSON, qui sont importés dans Azure Data Explorer dans la section suivante. Il peut y avoir plusieurs scénarios pour générer des rapports avec ce type de données, notamment :
- rapports sur l’historique des révisions d’accès
- rapports sur les affectations via la gestion des droits d’utilisation
Obtenir les données de définition de programme de révision d’accès
Générez un fichier JSON avec des noms de définition de révision d’accès et des ID utilisés pour créer des vues personnalisées dans Azure Data Explorer. L’exemple inclut toutes les révisions d’accès, mais un filtrage supplémentaire peut être inclus si nécessaire. Pour plus d’informations, voyez et utilisez le paramètre de requête de filtre.
$allsched = Get-MgIdentityGovernanceAccessReviewDefinition -All
$definitions = @()
# Iterate over each definition
foreach ($definition in $allsched) {
$definitions += [PSCustomObject]@{
Id = $definition.Id
DisplayName = $definition.DisplayName
SnapshotDate = $SnapshotDate
}
}
$definitions | ConvertTo-Json -Depth 10 | Set-Content "EntraAccessReviewDefinitions.json"
Obtenir les données du package d’accès à la gestion des droits d’utilisation
Générez un fichier JSON avec des noms de package d’accès et des ID utilisés pour créer des vues personnalisées dans Azure Data Explorer. L’exemple inclut tous les packages d’accès, mais un filtrage supplémentaire peut être inclus si nécessaire.
$accesspackages1 = Get-MgEntitlementManagementAccessPackage -All
$accesspackages2 = @()
# Iterate over each access package
foreach ($accesspackage in $accesspackages1) {
$accesspackages2 += [PSCustomObject]@{
Id = $accesspackage.Id
DisplayName = $accesspackage.DisplayName
SnapshotDate = $SnapshotDate
}
}
$accesspackages2 | ConvertTo-Json -Depth 10 | Set-Content "EntraAccessPackages.json"
Obtenir les données d'attribution de forfait d'accès à la gestion des habilitations
Générez un fichier JSON avec des affectations pour accéder aux packages utilisés pour créer des vues personnalisées dans Azure Data Explorer. L’exemple inclut toutes les affectations fournies, mais un filtrage supplémentaire peut être inclus si nécessaire.
$apassignments1 = Get-MgEntitlementManagementAssignment -ExpandProperty target,accessPackage -filter "state eq 'Delivered'" -all
$apassignments2 = @()
# Iterate over each access package assignment
foreach ($assignment in $apassignments1) {
$apassignments2 += [PSCustomObject]@{
Id = $assignment.Id
ScheduleStartDateTime = $assignment.Schedule.StartDateTime -replace "\\/Date\((\d+)\)\\/", '$1'
AccessPackageId = $assignment.AccessPackage.Id
AccessPackageDisplayName = $assignment.AccessPackage.DisplayName
TargetId = $assignment.Target.Id
TargetDisplayName = $assignment.Target.DisplayName
TargetEmail = $assignment.Target.Email
TargetObjectId = $assignment.Target.ObjectId
TargetPrincipalName = $assignment.Target.PrincipalName
TargetSubjectType = $assignment.Target.SubjectType
SnapshotDate = $SnapshotDate
}
}
$apassignments2 | ConvertTo-Json -Depth 10 | Set-Content "EntraAccessPackageAssignments.json"
5 : Créer des tables et importer des fichiers JSON avec des données de Microsoft Entra ID Governance dans Azure Data Explorer
Dans cette section, nous importons les fichiers JSON nouvellement créés pour les services microsoft Entra ID Governance dans Azure Data Explorer, ainsi que les données déjà importées pour les services d’ID Microsoft Entra, pour une analyse plus approfondie. Lors de la première importation à l’aide de l’interface utilisateur web d’Azure Data Explorer, vous allez créer des tables basées sur le schéma que l’interface utilisateur web suggère à partir de chaque fichier JSON.
Dans votre cluster Azure Data Explorer ou cluster gratuit, accédez à la base de données qui contient vos données d’ID Microsoft Entra.
- Connectez-vous à l’interface utilisateur web d’Azure Data Explorer .
- Dans le menu de gauche, sélectionnez Requête.
Suivez ensuite ces étapes pour chaque fichier JSON exporté de la section précédente pour obtenir vos données exportées dans cette base de données Azure Data Explorer en tant que nouvelle table.
Sélectionnez avec le bouton droit le nom de la base de données où vous souhaitez ingérer les données. Sélectionnez Obtenir des données.
Sélectionnez la source de données dans la liste disponible. Dans ce tutoriel, vous ingérerez des données à partir d’un fichier local .
Sélectionnez + Nouvelle table et entrez un nom de table, en fonction du nom du fichier JSON que vous importez, après la première importation, la table existe déjà et vous pouvez la sélectionner comme table cible pour une importation ultérieure.
Sélectionnez Rechercher des fichiers, sélectionnez le fichier JSON, et sélectionnez Suivant.
Azure Data Explorer détecte automatiquement le schéma et fournit un aperçu sous l’onglet Inspecter. Sélectionnez Terminer pour créer la table et importer les données à partir de ce fichier. Une fois les données ingérées, cliquez sur Fermer.
Répétez chacune des étapes précédentes pour chacun des fichiers JSON que vous avez générés dans la section précédente.
À la fin de ces étapes, vous aurez les tables EntraAccessReviewDefinitions
, EntraAccessPackages
et EntraAccessPackageAssignments
dans la base de données, en plus des tables créées dans la section 3.
6 : Utiliser Azure Data Explorer pour créer des rapports personnalisés
Avec les données désormais disponibles dans Azure Data Explorer, vous êtes prêt à commencer à créer des rapports personnalisés en fonction des besoins de votre entreprise.
Azure Data Explorer est un puissant outil d’analyse des données hautement évolutif et flexible qui fournit un environnement idéal pour générer des rapports d’accès utilisateur personnalisés. Azure Data Explorer utilise le langage de requête Kusto (KQL).
Les requêtes suivantes fournissent des exemples de rapports courants, mais vous pouvez personnaliser ces rapports en fonction de vos besoins et créer des rapports supplémentaires.
Exemple 1 : Générer des attributions de rôles d’application pour les attributions de groupes et directes pour une date d’instantané spécifique
Ce rapport permet de voir qui a eu accès à l’application cible et quand, et peut être utilisé pour les audits de sécurité, la vérification de conformité et pour comprendre des modèles d’accès au sein de l’organisation.
Cette requête cible une application spécifique dans Microsoft Entra AD et analyse les attributions de rôles à partir d’une certaine date. La requête récupère des attributions de rôles directes et basées sur des groupes, en fusionnant ces données avec les détails de l’utilisateur à partir de la table EntraUsers
et des informations de rôle de la table AppRoles
. Dans la requête ci-dessous, définissez targetSnapshotDate
à la valeur snapshotDate
utilisée lors du chargement des données.
/// Define constants
let targetServicePrincipalId = "<your service principal-id>"; // Target Service Principal ID
let targetSnapshotDate = datetime("2024-01-13"); // Target Snapshot Date for the data
// Extract role assignments for the target Service Principal and Snapshot Date
let roleAssignments = AppRoleAssignments
| where ResourceId == targetServicePrincipalId and startofday(SnapshotDate) == targetSnapshotDate
| extend AppRoleIdStr = tostring(AppRoleId); // Convert AppRoleId to string for easier comparison
// Prepare user data from EntraUsers table
let users = EntraUsers
| project ObjectID, UserPrincipalName, DisplayName, ObjectIDStr = tostring(ObjectID); // Include ObjectID as string for joining
// Prepare role data from AppRoles table
let roles = AppRoles
| mvexpand AppRoles // Expand AppRoles to handle multiple roles
| extend RoleName = AppRoles.DisplayName, RoleId = tostring(AppRoles.Id) // Extract Role Name and ID
| project RoleId, RoleName;
// Process direct assignments
let directAssignments = roleAssignments
| join kind=inner users on $left.PrincipalId == $right.ObjectID // Join with EntraUsers on PrincipalId
| join kind=inner roles on $left.AppRoleIdStr == $right.RoleId // Join with roles to get Role Names
| project UserPrincipalName, DisplayName, CreatedDateTime, RoleName, AssignmentType = "Direct", SnapshotDate;
// Process group-based assignments
let groupAssignments = roleAssignments
| join kind=inner EntraGroupMembership on $left.PrincipalId == $right.GroupId // Join with Group Membership
| mvexpand Members // Expand group members
| extend MembersStr = tostring(Members) // Convert member ID to string
| distinct MembersStr, CreatedDateTime, AppRoleIdStr, SnapshotDate // Get distinct values
| join kind=inner users on $left.MembersStr == $right.ObjectIDStr // Join with EntraUsers for user details
| join kind=inner roles on $left.AppRoleIdStr == $right.RoleId // Join with roles for role names
| project UserPrincipalName, DisplayName, CreatedDateTime, RoleName, AssignmentType = "Group", SnapshotDate;
// Combine results from direct and group-based assignments
directAssignments
| union groupAssignments
Exemple 2 : Créer un rapport d’auditeur de base avec des données Entra montrant qui avait accès à une application entre ces deux dates
Ce rapport permet de voir qui a eu accès à l’application cible entre deux dates, et peut être utilisé pour les audits de sécurité, la vérification de conformité et pour comprendre des modèles d’accès au sein de l’organisation.
Cette requête cible une application spécifique dans Microsoft Entra ID et analyse les attributions de rôles entre deux dates. La requête récupère les attributions de rôles directes à partir de la table AppRoleAssignments
et fusionne ces données avec les détails de l’utilisateur à partir de la table EntraUsers
et des informations de rôle de la table AppRoles
.
// Set the date range and service principal ID for the query
let startDate = datetime('2024-01-01');
let endDate = datetime('2024-03-14');
let servicePrincipalId = "<your service principal-id>";
// Query AppRoleAssignments for the specified service principal within the date range
AppRoleAssignments
| where ResourceId == servicePrincipalId and
todatetime(CreatedDateTime) between (startDate .. endDate)
// Extend AppRoleId to a string for joining
| extend AppRoleIdStr = tostring(AppRoleId)
// Project the necessary fields for the join with EntraUsers and AppRoles
| project PrincipalId, AppRoleIdStr, CreatedDateTime
// Join with EntraUsers to get user details
| join kind=inner (EntraUsers | project UserPrincipalName, DisplayName, ObjectID) on $left.PrincipalId == $right.ObjectID
// Join with AppRoles to get the role display names
| join kind=inner (
AppRoles | mvexpand AppRoles | project RoleIdStr = tostring(AppRoles.Id), RoleDisplayName = tostring(AppRoles.DisplayName)
) on $left.AppRoleIdStr == $right.RoleIdStr
// Final projection of the report with the current date and time
| project UserPrincipalName, DisplayName, RoleDisplayName, CreatedDateTime, ReportDate = now()
Exemple 3 : Obtenir des utilisateurs ajoutés à une application entre deux dates d’instantané de données
Ces rapports permettent de voir quels utilisateurs ont reçu une attribution de rôle d’application à l’application cible entre deux dates. Ces rapports peuvent être utilisés pour suivre les modifications apportées à l’accès aux applications au fil du temps.
Cette requête cible une application spécifique dans Microsoft Entra ID et change les attributions de rôles entre une date de début et de fin.
// Define the date range and service principal ID for the query
let startDate = datetime("2024-03-01");
let endDate = datetime("2024-03-14");
let servicePrincipalId = "<your service principal-id>";
let earlierDate = startDate; // Update this to your specific earlier date
AppRoleAssignments
| where SnapshotDate < endDate and ResourceId == servicePrincipalId
| project PrincipalId, AppRoleId2 = tostring(AppRoleId), CreatedDateTime
| join kind=anti (
AppRoleAssignments
| where SnapshotDate < earlierDate and ResourceId == servicePrincipalId
| project PrincipalId, AppRoleId1 = tostring(AppRoleId)
) on PrincipalId
| join kind=inner (EntraUsers) on $left.PrincipalId == $right.ObjectID
| join kind=inner (AppRoles
| mvexpand AppRoles
| project AppRoleId=tostring(AppRoles.Id), RoleDisplayName=tostring(AppRoles.DisplayName)
) on $left.AppRoleId2 == $right.AppRoleId
| project UserPrincipalName, DisplayName, RoleDisplayName, CreatedDateTime, PrincipalId, Change = "Added"
Configurer des importations en cours
Ce tutoriel illustre un processus unique d'extraction, de transformation et de chargement (ETL) pour importer un instantané unique dans Azure Data Explorer à des fins de création de rapports. Pour la création de rapports en cours ou pour comparer les modifications au fil du temps, vous pouvez automatiser le processus de remplissage d’Azure Data Explorer à partir de Microsoft Entra, afin que votre base de données continue d’avoir des données actuelles.
Vous pouvez utiliser azure Automation, un service cloud Azure, pour héberger les scripts PowerShell nécessaires pour extraire des données à partir de l’ID Microsoft Entra et de la gouvernance des ID Microsoft Entra. Pour plus d’informations, consultez Automatiser les tâches de gouvernance des ID Microsoft Entra avec Azure Automation.
Vous pouvez également utiliser des fonctionnalités Azure ou des outils en ligne de commande tels que lightingest
pour importer des données et remplir une table déjà existante. Pour plus d’informations, consultez pour voir comment utiliser LightIngest pour ingérer des données dans Azure Data Explorer.
Par exemple, pour charger un fichier EntraAccessPackages.json
dans le répertoire actif dans la table EntraAccessPackages
en tant qu’utilisateur actuellement connecté :
az login
LightIngest.exe "https://ingest-CLUSTERHOSTNAME;Fed=True" -database:"DATABASE" -table:EntraAccessPackages -sourcepath:"." -pattern:"EntraAccessPackages.json" -format:multijson -azcli:true
Importer des données à partir d’autres sources
Vous pouvez également créer des tables supplémentaires dans Azure Data Explorer pour ingérer des données à partir d’autres sources. Si les données se trouvent dans un fichier JSON, comme dans les exemples ci-dessus ou dans un fichier CSV, vous pouvez créer la table au moment où vous obtenez les données à partir du fichier. Une fois que la table est créée, vous pouvez également utiliser LightIngest pour ingérer des données dans Azure Data Explorer à partir d’un fichier JSON ou CSV.
Pour plus d’informations sur l’ingestion des données, consultez vue d’ensemble de l’ingestion de données Azure Data Explorer.
Exemple 4 : Combiner les affectations d’applications d’un Entra et d’une autre source pour créer un rapport de tous les utilisateurs ayant eu accès à une application entre deux dates
Ce rapport montre comment combiner des données à partir de deux systèmes distincts pour créer des rapports personnalisés dans Azure Data Explorer. Il agrège les données sur les utilisateurs, sur leurs rôles et sur d’autres attributs de deux systèmes dans un format unifié pour l’analyse ou la création de rapports.
Cet exemple suppose qu’il existe une table nommée salesforceAssignments
qui a été remplie en apportant des données d’une autre application.
// Define the date range and service principal ID for the query
let startDate = datetime("2023-06-01");
let endDate = datetime("2024-03-13");
let servicePrincipalId = "<your service principal-id>";
// Pre-process AppRoleAssignments with specific filters and projections
let processedAppRoleAssignments = AppRoleAssignments
| where ResourceId == servicePrincipalId and todatetime(CreatedDateTime) between (startDate .. endDate)
| extend AppRoleId = tostring(AppRoleId)
| project PrincipalId, AppRoleId, CreatedDateTime, ResourceDisplayName; // Exclude DeletedDateTime and keep ResourceDisplayName
// Pre-process AppRoles to get RoleDisplayName for each role
let processedAppRoles = AppRoles
| mvexpand AppRoles
| project AppRoleId = tostring(AppRoles.Id), RoleDisplayName = tostring(AppRoles.DisplayName);
// Main query: Process EntraUsers by joining with processed role assignments and roles
EntraUsers
| join kind=inner processedAppRoleAssignments on $left.ObjectID == $right.PrincipalId // Join with role assignments
| join kind=inner processedAppRoles on $left.AppRoleId == $right.AppRoleId // Join with roles to get display names
// Summarize to get the latest record for each unique combination of user and role attributes
| summarize arg_max(AccountEnabled, *) by UserPrincipalName, DisplayName, tostring(EmployeeId), Department, JobTitle, ResourceDisplayName, RoleDisplayName, CreatedDateTime
// Final projection of relevant fields including source indicator and report date
| project UserPrincipalName, DisplayName, EmployeeId=tostring(EmployeeId), Department, JobTitle, AccountEnabled=tostring(AccountEnabled), ResourceDisplayName, RoleDisplayName, CreatedDateTime, Source="EntraUsers", ReportDate = now()
// Union with processed salesforceAssignments to create a combined report
| union (
salesforceAssignments
// Project fields from salesforceAssignments to align with the EntraUsers data structure
| project UserPrincipalName = UserName, DisplayName = Name, EmployeeId = tostring(EmployeeId), Department, JobTitle, AccountEnabled = "N/A", ResourceDisplayName = AppName, RoleDisplayName = Role, CreatedDateTime, Source = "salesforceAssignments", ReportDate = now()
)