Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Lernprogramm erfahren Sie, wie Sie benutzerdefinierte Berichte im Azure-Daten-Explorer mithilfe von Daten von Microsoft Entra ID und Microsoft Entra ID Governance-Diensten erstellen.
Dieses Lernprogramm ergänzt Berichterstellungsoptionen wie Archivierung und Berichterstellung mit Azure Monitor und Berechtigungsverwaltung, die sich auf das Exportieren des Überwachungsprotokolls in Azure Monitor zur Aufbewahrung und Analyse konzentriert. Im Vergleich dazu bietet das Exportieren von Microsoft Entra ID- und Microsoft Entra ID Governance-Daten nach Azure Data Explorer Flexibilität beim Erstellen benutzerdefinierter Berichte zu Microsoft Entra-Objekten, einschließlich historischer und gelöschter Objekte.
Hier ist ein Video, das einen schnellen Überblick über Berichte zu den Daten der Microsoft Entra ID Governance mithilfe von Azure Data Explorer bietet.
Die Verwendung von Azure Data Explorer ermöglicht auch die Datenaggregation aus zusätzlichen Quellen mit massiver Skalierbarkeit, flexiblen Schemas und Aufbewahrungsrichtlinien. Azure Data Explorer ist besonders hilfreich, wenn Sie Benutzerzugriffsdaten für Jahre aufbewahren, Ad-hoc-Untersuchungen durchführen oder benutzerdefinierte Abfragen für Zugriffsdaten ausführen müssen.
In diesem Lernprogramm wird veranschaulicht, wie Sie Konfiguration, Benutzer und Zugriffsrechte anzeigen, die aus Microsoft Entra exportiert werden, zusammen mit Daten, die aus anderen Quellen exportiert wurden, z. B. Anwendungen mit Zugriffsrechten in ihren eigenen SQL-Datenbanken. Anschließend können Sie in Azure Data Explorer die Kusto-Abfragesprache (KQL) verwenden, um benutzerdefinierte Berichte basierend auf den Anforderungen Ihrer Organisation zu erstellen.
In diesem Tutorial erfahren Sie:
- Richten Sie azure Data Explorer in einem Azure-Abonnement ein, oder erstellen Sie einen kostenlosen Cluster.
- Extrahieren Sie Daten aus der Microsoft Entra-ID mithilfe von PowerShell-Skripts und Microsoft Graph.
- Erstellen Sie Tabellen, und importieren Sie Daten aus der Microsoft Entra-ID in Azure Data Explorer.
- Extrahieren Sie Daten aus der Microsoft Entra ID Governance.
- Erstellen Sie Tabellen, und importieren Sie Daten aus microsoft Entra ID Governance in Azure Data Explorer.
- Erstellen Sie eine benutzerdefinierte Abfrage mithilfe von KQL.
- Abfragedaten in Azure Monitor.
Am Ende dieses Tutorials können Sie angepasste Sichten der Zugriffsrechte und Benutzerberechtigungen entwickeln. Diese Ansichten umfassen mehrere Anwendungen über von Microsoft unterstützte Tools. Sie können auch Daten aus Nicht-Microsoft-Datenbanken oder -Anwendungen einbinden, um diese Zugriffsrechte und Berechtigungen zu melden.
Voraussetzungen
Wenn Sie mit Azure Data Explorer noch nicht fertig sind und die Szenarien kennen lernen möchten, die in diesem Lernprogramm gezeigt werden, können Sie einen kostenlosen Azure Data Explorer-Cluster abrufen. Für die produktionsgestützte Verwendung mit einer Vereinbarung auf Dienstebene für Azure Data Explorer benötigen Sie ein Azure-Abonnement, um einen vollständigen Azure Data Explorer-Cluster zu hosten.
Bestimmen Sie, welche Daten in Ihre Berichte aufgenommen werden sollen. Die Skripts in diesem Lernprogramm enthalten Beispiele für bestimmte Daten von Benutzern, Gruppen und Anwendungen von Microsoft Entra. Diese Beispiele veranschaulichen die Typen von Berichten, die Sie mit diesem Ansatz generieren können, aber Ihre spezifischen Berichtsanforderungen können variieren und unterschiedliche oder zusätzliche Daten erfordern. Sie können mit diesen Objekten beginnen und mit der Zeit weitere Arten von Microsoft Entra-Objekten hinzufügen.
In diesem Lernprogramm wird das Abrufen von Daten von Microsoft Entra als angemeldeter Benutzer veranschaulicht. Stellen Sie dazu sicher, dass Sie über die erforderlichen Rollenzuweisungen verfügen. Sie benötigen die Rollen mit den richtigen Berechtigungen zum Exportieren der Art von Microsoft Entra-Daten, mit denen Sie arbeiten möchten:
- Benutzerdaten: globaler Administrator, Administrator für privilegierte Rolle, Benutzeradministrator
- Gruppendaten: Globaler Administrator, Administrator privilegierter Rollen, Gruppenadministrator
- Anwendungs- und App-Rollenzuweisungen: globaler Administrator, Administrator privilegierter Rollen, Anwendungsadministrator, Cloudanwendungsadministrator
Microsoft Graph PowerShell benötigt die Zustimmung zum Abrufen von Microsoft Entra-Objekten über Microsoft Graph. Die Beispiele in diesem Lernprogramm erfordern die delegierten
User.Read.All, ,Group.Read.All,Application.Read.AllundDirectory.Read.AllBerechtigungen. Wenn Sie planen, Daten mithilfe der Automatisierung ohne einen angemeldeten Benutzer abzurufen, stimmen Sie stattdessen den entsprechenden Anwendungsberechtigungen zu. Weitere Informationen finden Sie in der Microsoft Graph-Referenz zu Berechtigungen.Wenn Sie Microsoft Graph PowerShell noch nicht zu diesen Berechtigungen zugestimmt haben, müssen Sie ein Globaler Administrator sein, um diesen Zustimmungsvorgang auszuführen.
In diesem Lernprogramm werden keine benutzerdefinierten Sicherheitsattribute veranschaulicht. Standardmäßig enthalten globale Administratorrollen und weitere Administratorrollen keine Berechtigungen zum Lesen benutzerdefinierter Sicherheitsattribute von Microsoft Entra-Benutzern. Wenn Sie planen, benutzerdefinierte Sicherheitsattribute abzurufen, benötigen Sie möglicherweise mehr Rollen und Berechtigungen.
Stellen Sie auf dem Computer, auf dem Microsoft Graph PowerShell installiert ist, sicher, dass Sie Schreibzugriff auf das Dateisystemverzeichnis haben. In diesem Verzeichnis installieren Sie die erforderlichen Microsoft Graph PowerShell-Module und dort, wo die exportierten Microsoft Entra-Daten gespeichert werden.
Stellen Sie sicher, dass Sie über Berechtigungen zum Abrufen von Daten aus anderen Datenquellen verfügen, die über Microsoft Entra hinausgehen, wenn Sie diese Daten auch in Azure Data Explorer integrieren möchten.
Einrichten des Azure-Daten-Explorers
Wenn Sie azure Data Explorer noch nicht verwendet haben, müssen Sie ihn zuerst einrichten. Sie können einen kostenlosen Cluster ohne Azure-Abonnement oder Kreditkarte erstellen. Oder Sie können einen vollständigen Cluster erstellen, der ein Azure-Abonnement erfordert. Erste Schritte finden Sie in der Schnellstartanleitung: Erstellen eines Azure Data Explorer-Clusters und einer Datenbank.
Extrahieren von Microsoft Entra-ID-Daten mithilfe von PowerShell
In diesem Abschnitt installieren Sie Microsoft Graph PowerShell-Module. In PowerShell stellen Sie eine Verbindung mit Microsoft Graph her , um Microsoft Entra-ID-Daten zu extrahieren.
Wenn Ihre Organisation diese Module zum ersten Mal für dieses Szenario verwendet, müssen Sie über eine globale Administratorrolle verfügen, damit Microsoft Graph PowerShell die Zustimmung zur Verwendung in Ihrem Mandanten erteilen kann. Für nachfolgende Interaktionen können Rollen mit geringerem Berechtigungsumfang verwendet werden.
Öffnen Sie PowerShell.
Wenn Sie nicht bereits alle Microsoft Graph PowerShell-Module installiert haben, installieren Sie die erforderlichen Microsoft Graph-Module. Für diesen Abschnitt des Lernprogramms sind die folgenden Module erforderlich:
Microsoft.Graph.Authentication,Microsoft.Graph.Users, ,Microsoft.Graph.Groups,Microsoft.Graph.ApplicationsundMicrosoft.Graph.DirectoryObjects. Wenn Sie diese Module bereits installiert haben, überspringen Sie diesen Schritt.$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 }Importieren Sie die Module in die aktuelle PowerShell-Sitzung:
$modules = @('Microsoft.Graph.Users', 'Microsoft.Graph.Groups', 'Microsoft.Graph.Applications', 'Microsoft.Graph.DirectoryObjects') foreach ($module in $modules) { Import-Module -Name $module }Stellen Sie eine Verbindung mit Microsoft Graph her. In diesem Abschnitt des Tutorials wird das Lesen von Benutzern, Gruppen und Anwendungen veranschaulicht. Daher sind die Berechtigungsspektren
User.Read.All,Group.Read.All,Application.Read.AllundDirectory.Read.Allerforderlich. Weitere Informationen zu Berechtigungen finden Sie in der Microsoft Graph-Berechtigungsübersicht.Connect-MgGraph -Scopes "User.Read.All", "Group.Read.All", "Application.Read.All", "Directory.Read.All" -ContextScope Process -NoWelcomeDieser Befehl fordert Sie dazu auf, sich mit Ihren Microsoft Entra-Anmeldeinformationen anzumelden. Nachdem Sie sich angemeldet haben, müssen Sie möglicherweise den erforderlichen Berechtigungen zustimmen, wenn sie zum ersten Mal eine Verbindung herstellen oder neue Berechtigungen erforderlich sind.
PowerShell-Abfragen zum Extrahieren von Microsoft Entra-ID-Daten für benutzerdefinierte Berichte
Die folgenden Abfragen extrahieren Microsoft Entra-ID-Daten aus Microsoft Graph mithilfe von PowerShell und exportieren die Daten in JSON-Dateien. Sie importieren diese Dateien in Azure Data Explorer in einem späteren Abschnitt dieses Lernprogramms.
Szenarien zum Generieren von Berichten mit dieser Art von Daten umfassen:
- Ein Auditor möchte einen Bericht anzeigen, in dem die Gruppenmitglieder für 10 Gruppen aufgelistet sind, die von der Abteilung der Mitglieder organisiert sind.
- Ein Auditor möchte einen Bericht aller Benutzer anzeigen, die Zugriff auf eine Anwendung zwischen zwei Datumsangaben hatten.
Sie können auch Daten aus Quellen, die über Microsoft Entra hinausgehen, in Azure-Daten-Explorer übertragen. Ein Szenario für diese Funktion kann sein:
- Ein Administrator möchte alle Benutzer anzeigen, die aus Microsoft Entra ID zu einer Anwendung hinzugefügt wurden, sowie deren Zugriffsrechte im Repository der Anwendung, wie z. B. einer SQL-Datenbank.
Diese Arten von Berichten sind nicht in die Microsoft Entra-ID integriert. Sie können diese Berichte jedoch selbst erstellen, indem Sie Daten aus der Microsoft Entra-ID extrahieren und Daten mithilfe benutzerdefinierter Abfragen im Azure-Daten-Explorer kombinieren. In diesem Lernprogramm wird dieser Vorgang später im Artikel "Einbinden von Daten aus anderen Quellen " behandelt.
In diesem Lernprogramm extrahieren Sie Microsoft Entra ID-Daten aus diesen Bereichen:
- Benutzerinformationen wie Anzeigename, UPN und Auftragsdetails
- Gruppeninformationen, einschließlich ihrer Mitgliedschaften
- Anwendungen und Zuweisungen zu Anwendungsrollen
Mit diesem Datensatz können Sie eine umfassende Reihe von Abfragen darüber durchführen, wer zu einem bestimmten Zeitpunkt Zugriff auf eine Anwendung erhalten hat, einschließlich ihrer Anwendungsrolleninformationen und des zugehörigen Zeitrahmens. Denken Sie daran, dass es sich hierbei um Beispielabfragen handelt, und Ihre Daten und spezifischen Anforderungen können von den hier gezeigten Angaben abweichen.
Hinweis
Größere Mandanten könnten auf Drosselung und 429-Fehler stoßen, die vom Microsoft Graph-Modul behandelt werden. Der Azure-Daten-Explorer schränkt möglicherweise auch die Dateigrößen des Dateiuploads ein.
In diesen PowerShell-Skripts exportieren Sie ausgewählte Eigenschaften aus den Microsoft Entra-Objekten in JSON-Dateien. Die Daten aus diesen exportierten Eigenschaften werden verwendet, um in Azure Data Explorer benutzerdefinierte Berichte zu generieren.
Die folgenden spezifischen Eigenschaften sind in diesen Beispielen enthalten, da wir diese Daten verwenden, um die Typen von Berichten zu veranschaulichen, die Sie im Azure-Daten-Explorer erstellen können. Da ihre spezifischen Berichterstellungsanforderungen wahrscheinlich von der Darstellung dieses Lernprogramms abweichen, sollten Sie die spezifischen Eigenschaften in diese Skripts einschließen, die Sie für die Anzeige in Ihren Berichten interessieren. Sie können jedoch demselben Muster folgen, das angezeigt wird, um ihre Skripts zu erstellen.
Auswählen des Datums der Momentaufnahme
Ein hartcodiertes Momentaufnahmedatum identifiziert die Daten in der JSON-Datei mit einem bestimmten Datum. Sie können es verwenden, um ähnliche Datasets im Laufe der Zeit im Azure-Daten-Explorer nachzuverfolgen. Mithilfe des Momentaufnahmedatums können auch Änderungen der Daten zwischen zwei Momentaufnahmen mit jeweils unterschiedlichem Datum verglichen werden.
$SnapshotDate = Get-Date -AsUTC -Format "yyyy-MM-dd"
Abrufen von Microsoft Entra-Benutzerdaten
Dieses Skript exportiert ausgewählte Eigenschaften aus dem Microsoft Entra-Benutzerobjekt in eine JSON-Datei. Sie importieren diese Datei und zusätzliche Daten aus anderen JSON-Dateien in Azure Data Explorer in einem späteren Abschnitt dieses Lernprogramms.
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
Abrufen von Gruppendaten
Generieren Sie eine JSON-Datei mit Gruppennamen und IDs, die in Azure Data Explorer zum Erstellen benutzerdefinierter Sichten verwendet werden. Das Beispiel enthält alle Gruppen, Sie können aber bei Bedarf zusätzliche Filterung einschließen. Wenn Sie filtern, um nur bestimmte Gruppen einzuschließen, sollten Sie logik in Ihr Skript einschließen, um nach geschachtelten Gruppen zu suchen.
# Get all groups and select Id and DisplayName
$groups = Get-MgGroup -All | Foreach-Object {
$groupObject = @{}
$groupObject["Id"] = $_.Id
$groupObject["DisplayName"] = $_.DisplayName
$groupObject["SecurityEnabled"] = $_.SecurityEnabled
$groupObject["MailEnabled"] = $_.MailEnabled
$groupObject["MailNickname"] = $_.MailNickname
$groupObject["SecurityIdentifier"] = $_.SecurityIdentifier
$date = [datetime]::Parse($_.CreatedDateTime)
$groupObject["CreatedDateTime"] = $date.ToString("yyyy-MM-dd")
$groupObject["SnapshotDate"] = $SnapshotDate
[pscustomobject]$groupObject
}
# Export the groups to a JSON file
$groups | ConvertTo-Json | Set-Content ".\EntraGroups.json"
Abrufen von Gruppenmitgliedschaftsdaten
Generieren Sie eine JSON-Datei mit Gruppenmitgliedschaft, die zum Erstellen benutzerdefinierter Ansichten im Azure-Daten-Explorer verwendet wird. Das Beispiel enthält alle Gruppen, Sie können aber bei Bedarf zusätzliche Filterung einschließen.
# Retrieve all groups from Microsoft Entra ID
$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 "EntraGroupMemberships.json"
Abrufen von Anwendungs- und Dienstprinzipaldaten
Generieren Sie eine JSON-Datei mit allen Anwendungen und den entsprechenden Dienstprinzipalen im Mandanten. Sie importieren diese Daten in Azure Data Explorer in einen späteren Abschnitt dieses Lernprogramms, sodass Sie benutzerdefinierte Berichte für Anwendungen basierend auf diesen Daten generieren können.
# Fetch applications and their corresponding service principals, and then export to JSON
Get-MgApplication -All | ForEach-Object {
$app = $_
$sp = Get-MgServicePrincipal -Filter "appId eq '$($app.AppId)'"
$date = [datetime]::Parse($app.CreatedDateTime)
[pscustomobject]@{
DisplayName = $app.DisplayName
ApplicationId = $app.AppId
ServicePrincipalId = $sp.Id
SnapshotDate = $SnapshotDate
CreatedDateTime = $date.ToString("yyyy-MM-dd")
}
} | ConvertTo-Json -Depth 10 | Set-Content "Applications.json"
App-Rollendaten abrufen
Generieren Sie eine JSON-Datei aller App-Rollen für Unternehmens-Apps in Microsoft Entra. Nachdem Sie diese Daten in Azure Data Explorer importiert haben, verwenden Sie sie, um Berichte zu generieren, die App-Rollenzuweisungen für Benutzer umfassen.
# Get a list of all applications, and 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 by using its app ID
$spFilter = "appId eq '$($app.AppId)'"
$sp = Get-MgServicePrincipal -Filter $spFilter | Select-Object -First 1
# Process app roles, 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'
Abrufen von App-Rollenzuweisungsdaten
Generieren Sie eine JSON-Datei aller App-Rollenzuweisungen von Benutzern im Mandanten:
$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 necessary
$result += [PSCustomObject]@{
Id = $_.Id
AppRoleId = $_.AppRoleId
CreatedDateTime = $createdDateTime
PrincipalDisplayName = $user.DisplayName
PrincipalId = $user.Id
AssignmentPrincipalType = $_.PrincipalType
AssignmentPrincipalDisplayName = $_.PrincipalDisplayName
AssignmentPrincipalId = $_.PrincipalId
ResourceDisplayName = $_.ResourceDisplayName
ResourceId = $_.ResourceId
SnapshotDate = $SnapshotDate
}
}
}
$result | ConvertTo-Json -Depth 10 | Out-File "AppRoleAssignments.json"
Erstellen von Tabellen und Importieren von JSON-Dateien mit Daten aus der Microsoft Entra-ID in Azure Data Explorer
In diesem Abschnitt importieren Sie die neu erstellten JSON-Dateien für die Microsoft Entra ID-Dienste als Tabellen im Azure-Daten-Explorer zur weiteren Analyse. Beim ersten Import über die Azure Data Explorer-Web-UI erstellen Sie die Tabellen basierend auf Schemas, die die Web-UI aus jeder JSON-Datei vorschlägt.
Melden Sie sich bei der Azure Data Explorer-Webbenutzeroberfläche an.
Wechseln Sie zu der Datenbank, die Sie in Ihrem Azure Data Explorer-Cluster oder einem kostenlosen Cluster zuvor in diesem Lernprogramm eingerichtet haben.
Wählen Sie im linken Menü "Abfrage" aus.
Führen Sie die folgenden Schritte für jede exportierte JSON-Datei aus, um Ihre exportierten Daten als neue Tabelle in diese Azure Data Explorer-Datenbank zu integrieren:
Klicken Sie mit der rechten Maustaste auf den Namen der Datenbank, in der Sie die Daten aufnehmen möchten. Wählen Sie dann " Daten abrufen" aus.
Wählen Sie die Datenquelle aus der verfügbaren Liste aus. In diesem Lernprogramm nehmen Sie Daten aus einer lokalen Datei ein, und wählen Sie daher "Lokale Datei" aus.
Wählen Sie +Neue Tabelle aus, und geben Sie einen Tabellennamen ein, basierend auf dem Namen der JSON-Datei, die Sie importieren. Wenn Sie z. B. EntraUsers.jsonimportieren, nennen Sie die Tabelle EntraUsers. Nach dem ersten Import ist die Tabelle bereits vorhanden, und Sie können diese als Zieltabelle für einen nachfolgenden Import auswählen.
Wählen Sie "Nach Dateien suchen", wählen Sie die JSON-Datei und dann "Weiter" aus.
Der Azure-Daten-Explorer erkennt das Schema automatisch und bietet eine Vorschau auf der Registerkarte "Prüfen ". Wählen Sie "Fertig stellen" aus, um die Tabelle zu erstellen und die Daten aus dieser Datei zu importieren. Nachdem die Daten aufgenommen wurden, wählen Sie "Schließen" aus.
Wiederholen Sie die vorherigen Schritte für jede der JSON-Dateien, die Sie im vorherigen Abschnitt generiert haben.
Am Ende dieser Schritte haben Sie die Tabellen EntraUsers, EntraGroups, , EntraGroupMemberships, Applications, und AppRolesAppRoleAssignments in der Datenbank.
Extrahieren von Microsoft Entra ID Governance-Daten mithilfe von PowerShell
In diesem Abschnitt verwenden Sie PowerShell, um Daten aus Microsoft Entra ID Governance-Diensten zu extrahieren. Wenn Sie nicht über Microsoft Entra ID Governance, Microsoft Entra ID P2 oder Microsoft Entra Suite verfügen, fahren Sie im Abschnitt Verwenden des Azure-Daten-Explorers zum Erstellen benutzerdefinierter Berichte fort.
Für die folgenden Schritte müssen Sie möglicherweise Microsoft Graph PowerShell-Module installieren , um Microsoft Entra ID Governance-Daten zu extrahieren. Wenn Ihre Organisation diese Module zum ersten Mal für dieses Szenario verwendet, müssen Sie über eine globale Administratorrolle verfügen, damit Microsoft Graph PowerShell die Zustimmung zur Verwendung in Ihrem Mandanten erteilen kann. Für nachfolgende Interaktionen können Rollen mit geringerem Berechtigungsumfang verwendet werden.
Öffnen Sie PowerShell.
Wenn Sie nicht bereits alle Microsoft Graph PowerShell-Module installiert haben, installieren Sie die erforderlichen Microsoft Graph-Module. Das folgende Modul ist für diesen Abschnitt des Lernprogramms erforderlich:
Microsoft.Graph.Identity.Governance. Wenn Sie die Module bereits installiert haben, fahren Sie mit dem nächsten Schritt fort.$modules = @('Microsoft.Graph.Identity.Governance') foreach ($module in $modules) { Install-Module -Name $module -Scope CurrentUser -AllowClobber -Force }Importieren Sie die Module in die aktuelle PowerShell-Sitzung:
$modules = @('Microsoft.Graph.Identity.Governance') foreach ($module in $modules) { Import-Module -Name $module }Stellen Sie eine Verbindung mit Microsoft Graph her. In diesem Abschnitt des Lernprogramms wird das Abrufen von Daten aus der Berechtigungsverwaltung und Zugriffsprüfungen veranschaulicht. Daher sind die Berechtigungsbereiche
AccessReview.Read.AllundEntitlementManagement.Read.Allerforderlich. Aktualisieren Sie für andere Berichtsanwendungsfälle, z. B. für Privileged Identity Management (PIM) oder Lebenszyklusworkflows, denScopesParameter mit den erforderlichen Berechtigungen. Weitere Informationen zu Berechtigungen finden Sie in der Microsoft Graph-Berechtigungsübersicht.Connect-MgGraph -Scopes "AccessReview.Read.All, EntitlementManagement.Read.All" -ContextScope Process -NoWelcomeDieser Befehl fordert Sie dazu auf, sich mit Ihren Microsoft Entra-Anmeldeinformationen anzumelden. Nachdem Sie sich angemeldet haben, müssen Sie möglicherweise den erforderlichen Berechtigungen zustimmen, wenn sie zum ersten Mal eine Verbindung herstellen oder neue Berechtigungen erforderlich sind.
PowerShell-Abfragen zum Extrahieren von Microsoft Entra ID Governance-Daten für benutzerdefinierte Berichte
Die folgenden Abfragen extrahieren Microsoft Entra ID Governance-Daten aus Microsoft Graph mithilfe von PowerShell und exportieren die Daten in JSON-Dateien. Sie importieren diese Dateien in Azure Data Explorer in einem späteren Abschnitt dieses Lernprogramms.
Szenarien zum Generieren von Berichten mit dieser Art von Daten umfassen:
- Berichterstellung über historische Zugriffsüberprüfungen.
- Berichterstellung zu Zuweisungen durch die Berechtigungsverwaltung.
Abrufen von Zeitplandefinitionsdaten für Zugriffsüberprüfungen
Generieren Sie eine JSON-Datei mit Zugriffsüberprüfungsdefinitionsnamen und IDs, die zum Erstellen benutzerdefinierter Ansichten in Azure Data Explorer verwendet werden. Das Beispiel enthält alle Zugriffsüberprüfungen, sie können aber bei Bedarf zusätzliche Filterung einschließen. Weitere Informationen finden Sie unter Verwenden des Filterabfrageparameters.
$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"
Abrufen von Instanzdaten für Zugriffsüberprüfungen
Um alle Zugriffsüberprüfungsdefinitionen, Instanzen und Entscheidungen mithilfe von PowerShell in ein strukturiertes Ordnerformat zu exportieren, können Sie die Microsoft Graph-API verwenden. Mit diesem Ansatz wird sichergestellt, dass Ihre Daten hierarchisch organisiert und an der angegebenen Ordnerstruktur ausgerichtet sind.
Bevor Sie beginnen, beachten Sie die folgenden Punkte:
- Stellen Sie sicher, dass Sie über die erforderlichen Berechtigungen für den Zugriff auf Überprüfungsdaten in Microsoft Graph verfügen.
- Je nach Datenvolumen kann die Ausführungszeit des Skripts variieren. Überwachen Sie den Prozess, und passen Sie die Parameter nach Bedarf an.
So rufen Sie die Instanzdaten ab:
Laden Sie das Export_Access_Reviews.ps1 Skript herunter, und speichern Sie es lokal.
Heben Sie im Datei-Explorer die Blockierung des Skripts auf, damit Sie es in PowerShell ausführen können.
Führen Sie den folgenden Befehl aus. Die Ausgabe platziert alle Daten in drei Unterordner:
ReviewInstances, ,ReviewInstanceDecisionItemsundReviewInstanceContactedReviewers..\ExportAccessReviews.ps1 -InstanceStartDate "11/15/2024" -InstanceEndDate "12/15/2024" -ExportFolder "C:\AccessReviewsExport\11_15_to_12_15"
Abrufen von Zugriffspaketdaten für die Berechtigungsverwaltung
Generieren Sie eine JSON-Datei mit Zugriffspaketnamen und IDs, die in Azure Data Explorer zum Erstellen benutzerdefinierter Sichten verwendet werden. Das Beispiel enthält alle Zugriffspakete, sie können aber bei Bedarf zusätzliche Filterung einschließen.
$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"
Zugriffspaket-Zuweisungsdaten für die Berechtigungsverwaltung abrufen
Generieren Sie eine JSON-Datei mit Zuweisungen für Zugriffspakete, die in Azure Data Explorer zum Erstellen benutzerdefinierter Sichten verwendet werden. Die Stichprobe umfasst alle übermittelten Zuweisungen, Sie können jedoch bei Bedarf zusätzliche Filter anwenden.
$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"
Erstellen von Tabellen und Importieren von JSON-Dateien mit Daten aus microsoft Entra ID Governance in Azure Data Explorer
In diesem Abschnitt importieren Sie die neu erstellten JSON-Dateien für die Microsoft Entra ID Governance-Dienste in Azure Data Explorer zur weiteren Analyse. Diese Dateien verknüpfen die Daten, die Sie bereits für die Microsoft Entra ID-Dienste importiert haben. Beim ersten Import über die Azure Data Explorer-Web-UI erstellen Sie Tabellen basierend auf Schemas, die die Web-UI aus jeder JSON-Datei vorschlägt.
Melden Sie sich bei der Azure Data Explorer-Webbenutzeroberfläche an.
Wechseln Sie in Ihrem Azure Data Explorer-Cluster oder einem kostenlosen Cluster zu der Datenbank, die Ihre Microsoft Entra-ID-Daten enthält.
Wählen Sie im linken Menü "Abfrage" aus.
Führen Sie die folgenden Schritte für jede exportierte JSON-Datei aus, um Ihre exportierten Daten als neue Tabelle in diese Azure Data Explorer-Datenbank zu integrieren:
Klicken Sie mit der rechten Maustaste auf den Datenbanknamen der Datenbank, in der Sie die Daten aufnehmen möchten. Wählen Sie dann " Daten abrufen" aus.
Wählen Sie die Datenquelle aus der verfügbaren Liste aus. In diesem Lernprogramm nehmen Sie Daten aus einer lokalen Datei ein, und wählen Sie daher "Lokale Datei" aus.
Wählen Sie +Neue Tabelle aus, und geben Sie einen Tabellennamen ein, basierend auf dem Namen der JSON-Datei, die Sie importieren. Nach dem ersten Import ist die Tabelle bereits vorhanden, und Sie können diese als Zieltabelle für einen nachfolgenden Import auswählen.
Wählen Sie "Nach Dateien suchen", wählen Sie die JSON-Datei und dann "Weiter" aus.
Der Azure-Daten-Explorer erkennt das Schema automatisch und bietet eine Vorschau auf der Registerkarte "Prüfen ". Wählen Sie "Fertig stellen" aus, um die Tabelle zu erstellen und die Daten aus dieser Datei zu importieren. Nachdem die Daten aufgenommen wurden, wählen Sie "Schließen" aus.
Wiederholen Sie die vorstehenden Schritte für jede der JSON-Dateien, die Sie im vorherigen Abschnitt generiert haben, für jeden ordner.
Wenn es viele Dateien in einem Ordner gibt, können Sie
lightingestden Rest importieren, nachdem die Tabelle erstellt wurde.
Am Ende dieser Schritte verfügen Sie über die Tabellen EntraAccessReviewDefinitions, , , EntraAccessPackages, EntraAccessPackageAssignments, und ReviewInstancesReviewInstanceDecisionItems in der Datenbank zusätzlich zu den Tabellen, die Sie zuvor erstellt ReviewInstanceContactedReviewershaben.
Verwenden des Azure-Daten-Explorers zum Erstellen benutzerdefinierter Berichte
Nachdem die Daten jetzt im Azure-Daten-Explorer verfügbar sind, können Sie mit dem Erstellen benutzerdefinierter Berichte basierend auf Ihren Geschäftsanforderungen beginnen:
Melden Sie sich bei der Azure Data Explorer-Webbenutzeroberfläche an.
Wählen Sie im linken Menü "Abfrage" aus.
Die folgenden Abfragen enthalten Beispiele für allgemeine Berichte. Sie können diese Berichte aber an Ihre Anforderungen anpassen und zusätzliche Berichte erstellen.
Sie können Ihre Berichte auch in Excel anzeigen, indem Sie die Registerkarte Exportieren und dann In Excelöffnen auswählen.
Beispiel: Generieren von App-Rollenzuweisungen für direkte und Gruppenzuweisungen für ein bestimmtes Momentaufnahmedatum
Dieser Bericht bietet eine Übersicht darüber, wer wann welchen Zugriff auf die Ziel-App hatte. Sie können es für Sicherheitsprüfungen, Complianceüberprüfungen und das Verständnis von Zugriffsmustern innerhalb der Organisation verwenden.
Die folgende Abfrage zielt auf eine bestimmte Anwendung innerhalb der Microsoft Entra-ID ab und analysiert die Rollenzuweisungen ab einem bestimmten Datum. Die Abfrage ruft sowohl direkte als auch gruppenbasierte Rollenzuweisungen ab. Sie führt diese Daten mit Benutzerdetails aus der EntraUsers Tabelle und Rolleninformationen aus der AppRoles Tabelle zusammen. Setzen Sie im Abfragebefehl targetSnapshotDate auf den Wert snapshotDate, den Sie beim Laden der Daten verwendet haben.
/// 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 a string for easier comparison
// Prepare user data from the EntraUsers table
let users = EntraUsers
| project ObjectID, UserPrincipalName, DisplayName, ObjectIDStr = tostring(ObjectID); // Include ObjectID as string for joining
// Prepare role data from the 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 EntraGroupMemberships on $left.PrincipalId == $right.GroupId // Join with group membership
| mvexpand Members // Expand group members
| extend MembersStr = tostring(Members) // Convert the member ID to a 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
Beispiel: Erstellen eines grundlegenden Prüfberichts mit Microsoft Entra-Daten, der anzeigt, wer Zugriff auf eine App zwischen zwei Datumsangaben hatte
Dieser Bericht zeigt auf, wer über welchen Zugriff auf die Ziel-App zwischen zwei Zeitpunkten verfügt. Sie können es für Sicherheitsprüfungen, Complianceüberprüfungen und das Verständnis von Zugriffsmustern innerhalb der Organisation verwenden.
Die folgende Abfrage zielt auf eine bestimmte Anwendung innerhalb der Microsoft Entra-ID ab und analysiert die Rollenzuweisungen zwischen zwei Datumsangaben. Die Abfrage ruft direkte Rollenzuweisungen aus der Tabelle AppRoleAssignments ab und führt diese Daten mit Benutzerdetails aus der Tabelle EntraUsers und Rolleninformationen aus der Tabelle AppRoles zusammen.
// 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()
Beispiel: Benutzer anzeigen, die einer App zwischen zwei Stichtagen hinzugefügt wurden
Diese Berichte bieten einen Einblick, welche Benutzer innerhalb eines bestimmten Zeitraums eine Rollenverteilung in der App für die Zielanwendung erhalten haben. Sie können diese Berichte verwenden, um Änderungen im App-Zugriff im Laufe der Zeit nachzuverfolgen.
Diese Abfrage zielt auf eine bestimmte Anwendung innerhalb von Microsoft Entra ID ab und nimmt Änderungen an den Rollenzuweisungen zwischen Start- und Enddatum vor.
// 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"
Beispiel: Verschiedene Abfragen, die Zugriffsüberprüfungen verwenden
Anzeigen von Abschluss- und Zeitplaninformationen der Zugriffsüberprüfung.
Nachdem die Daten hochgeladen wurden, verwenden Sie die folgenden Kusto-Abfragen, um sie zu überprüfen:
Wann wurde der letzte Zugriffsüberprüfungszyklus abgeschlossen? Wie lange dauerte es?
ReviewInstances | summarize LastCompletedDate = max(ReviewInstanceEndDateTime), ReviewDuration = datetime_diff('minute', max(ReviewInstanceEndDateTime), min(ReviewInstanceStartDateTime))Wird der Zugriffsprüfungsprozess rechtzeitig durchgeführt (z. B. vierteljährlich)?
ReviewInstances | extend ExpectedFrequency = "Quarterly" // Replace with the organization's frequency | summarize ReviewsCompleted = count(), LastReviewEndDate = max(ReviewInstanceEndDateTime) | extend CurrentDate = now(), TimeSinceLastReview = datetime_diff('day', now(), LastReviewEndDate) | extend IsOnSchedule = iff(TimeSinceLastReview <= 90, "Yes", "No") // Assuming quarterly = 90 days
Teilnahme und Engagement bei der Zugriffsüberprüfung anzeigen
Wer waren die zugewiesenen Prüfer?
ReviewInstanceContactedReviewers | project AccessReviewDefinitionId, AccessReviewInstanceId, ReviewerName = DisplayName, ReviewerUserPrincipalName = UserPrincipalName, CreatedDateTimeWelche Prüfer nahmen aktiv teil und lieferten Antworten?
ReviewInstanceDecisionItems | where ReviewedBy_DisplayName != "AAD Access Reviews" | where Decision in ("Approve", "Deny") | project AccessReviewDefinitionId, AccessReviewInstanceId, ReviewerName = ReviewedBy_DisplayName, ReviewerUserPrincipalName = ReviewedBy_UserPrincipalName, Decision, ReviewedDateTime | distinct AccessReviewDefinitionId, AccessReviewInstanceId, ReviewerName, ReviewerUserPrincipalName, DecisionWelcher Prozentsatz der Prüfer hat auf die Zugriffsüberprüfungsanforderung geantwortet?
let TotalReviewers = ReviewInstanceContactedReviewers | summarize Total = dcount(Id) by AccessReviewDefinitionId, AccessReviewInstanceId; let RespondedReviewers = ReviewInstanceDecisionItems | where ReviewedBy_DisplayName != "AAD Access Reviews" | where ReviewedBy_Id != "00000000-0000-0000-0000-000000000000" | where Decision in ("Approve", "Deny") | summarize Responded = dcount(ReviewedBy_Id) by AccessReviewDefinitionId, AccessReviewInstanceId; TotalReviewers | join kind=leftouter RespondedReviewers on AccessReviewDefinitionId, AccessReviewInstanceId | extend Responded = coalesce(Responded, 0) // Replace null with 0 for Responded | extend NotResponded = Total - Responded // Calculate the number of nonresponders | extend ResponsePercentage = (Responded * 100.0) / Total // Percentage of those who responded | extend NonResponsePercentage = (NotResponded * 100.0) / Total // Percentage of those who didn't respond | project AccessReviewDefinitionId, AccessReviewInstanceId, Total, Responded, ResponsePercentage, NotResponded, NonResponsePercentageWann hat jeder Prüfer seine Aufgaben abgeschlossen?
ReviewInstanceDecisionItems | where Decision in ("Approve", "Deny") | project AccessReviewDefinitionId, AccessReviewInstanceId, ReviewerName = ReviewedBy_DisplayName, ReviewerUserPrincipalName = ReviewedBy_UserPrincipalName, ReviewedDateTimeWelche Prüfer haben keine Entscheidungen getroffen?
let AllReviewers = ReviewInstanceContactedReviewers | project AccessReviewDefinitionId, AccessReviewInstanceId, ReviewerId = Id, ReviewerUserPrincipalName = UserPrincipalName, ReviewerName = DisplayName; let ActiveReviewers = ReviewInstanceDecisionItems | where Decision in ("Approve", "Deny") | where ReviewedBy_DisplayName != "AAD Access Reviews" | where ReviewedBy_Id != "00000000-0000-0000-0000-000000000000" | summarize ActiveReviewers = make_set(ReviewedBy_Id) by AccessReviewDefinitionId, AccessReviewInstanceId; AllReviewers | extend ReviewerId = tostring(ReviewerId) // Ensure ReviewerId is a string | join kind=leftanti ( ActiveReviewers | mv-expand ActiveReviewers | extend ActiveReviewers = tostring(ActiveReviewers) // Cast ActiveReviewers to a string ) on $left.ReviewerId == $right.ActiveReviewers | project AccessReviewDefinitionId, AccessReviewInstanceId, ReviewerUserPrincipalName, ReviewerNameWelcher Prozentsatz der Prüfer interagiert nicht?
let TotalReviewers = ReviewInstanceContactedReviewers | summarize Total = dcount(Id) by AccessReviewDefinitionId, AccessReviewInstanceId; let RespondedReviewers = ReviewInstanceDecisionItems | where ReviewedBy_DisplayName != "AAD Access Reviews" | where ReviewedBy_Id != "00000000-0000-0000-0000-000000000000" | where Decision in ("Approve", "Deny") | summarize Responded = dcount(ReviewedBy_Id) by AccessReviewDefinitionId, AccessReviewInstanceId; TotalReviewers | join kind=leftouter RespondedReviewers on AccessReviewDefinitionId, AccessReviewInstanceId | extend Responded = coalesce(Responded, 0) // Replace null with 0 for Responded | extend NotResponded = Total - Responded // Calculate the number of nonresponders | extend ResponsePercentage = (Responded * 100.0) / Total // Percentage of those who responded | extend NonResponsePercentage = (NotResponded * 100.0) / Total // Percentage of those who didn't respond | project AccessReviewDefinitionId, AccessReviewInstanceId, Total, Responded, ResponsePercentage, NotResponded, NonResponsePercentageWurden Erinnerungen für nicht reagierende Prüfer oder ausstehende Entscheidungen ausgelöst?
// Step 1: Get the list of all reviewers let TotalReviewers = ReviewInstanceContactedReviewers | project AccessReviewDefinitionId, AccessReviewInstanceId, ReviewerId = Id, ReviewerUserPrincipalName = UserPrincipalName, ReviewerName = DisplayName; // Step 2: Get the list of reviewers who responded let RespondedReviewers = ReviewInstanceDecisionItems | where ReviewedBy_DisplayName != "AAD Access Reviews" | where ReviewedBy_Id != "00000000-0000-0000-0000-000000000000" | where Decision in ("Approve", "Deny") | project AccessReviewDefinitionId, AccessReviewInstanceId, RespondedReviewerId = ReviewedBy_Id; // Step 3: Get the list of review instances let ReviewInstancesWithDetails = ReviewInstances | project AccessReviewDefinitionId = ReviewDefinitionId, AccessReviewInstanceId = ReviewInstanceId, RemindersSent = ReviewDefinitionSettings_ReminderNotificationsEnabled, StartDate = todatetime(ReviewInstanceStartDateTime), EndDate = todatetime(ReviewInstanceEndDateTime) | extend ReminderSentDate = iif(RemindersSent, StartDate + (EndDate - StartDate) / 2, datetime(null)); // Step 4: Identify nonresponsive reviewers and join with review instance details TotalReviewers | join kind=leftouter (ReviewInstancesWithDetails) on AccessReviewDefinitionId, AccessReviewInstanceId | join kind=leftanti RespondedReviewers on $left.ReviewerId == $right.RespondedReviewerId | project AccessReviewDefinitionId, AccessReviewInstanceId, ReviewerUserPrincipalName, ReviewerName, RemindersSent, ReminderSentDate
Anzeigen von Benutzern und Zugriffsänderungen, die aus Zugriffsüberprüfungen resultieren
Wer hat während der Zugriffsüberprüfung zugriff auf bestimmte Ressourcen verloren?
ReviewInstanceDecisionItems | where Decision == "Deny" | project User = Principal_DisplayName, Resource = Resource_DisplayName, Decision, JustificationWurden Benutzer aufgrund von Inaktivität gekennzeichnet?
ReviewInstanceDecisionItems | where Insights contains "inactive" | project User = Principal_DisplayName, Resource = Resource_DisplayName, Insights, DecisionWas war das Datum der Zugriffsentfernung und der Grund für den Verlust des Zugriffs?
ReviewInstanceDecisionItems | where Decision == "Deny" | project User = Principal_DisplayName, Resource=Resource_DisplayName, AccessRemovalDate = AppliedDateTime, Reason = JustificationWelche Benutzer haben keine Entscheidungen getroffen?
ReviewInstanceDecisionItems | where Decision == "NotReviewed" | project User = Principal_DisplayName, Resource=Resource_DisplayNameWelche Rezensionen hatten keine Rezensenten?
ReviewInstances | join kind=leftanti ( ReviewInstanceContactedReviewers | summarize by AccessReviewInstanceId ) on $left.ReviewInstanceId == $right.AccessReviewInstanceIdWelche Rezensionen hatten keine Benutzer?
ReviewInstances | join kind=leftanti ( ReviewInstanceDecisionItems | summarize by AccessReviewInstanceId ) on $left.ReviewInstanceId == $right.AccessReviewInstanceId
Zusammenfassen von Zugriffsüberprüfungsentscheidungen
Welche Entscheidungen hat der Benutzer getroffen: genehmigt, verweigert oder unverändert?
ReviewInstanceDecisionItems | summarize count() by DecisionWelche Anzahl von Benutzern wurde genehmigt oder verweigert?
ReviewInstanceDecisionItems | summarize ApprovedCount = countif(Decision == "Approve"), DeniedCount = countif(Decision == "Deny")Wurden Genehmigungsgründe dokumentiert?
ReviewInstanceDecisionItems | where Decision == "Approve" and isnotempty(Justification) | summarize count() by ReviewedBy_DisplayName
Bestätigen Sie die Qualität der Zugriffsüberprüfung und stellen Sie die Vollständigkeit sicher.
Wurden Zugriffssperren für ruhende Benutzer in Betracht gezogen?
ReviewInstanceDecisionItems | where Insights contains "inactive" and Decision == "Deny" | project User = Principal_DisplayName, DecisionWurde irgendein Zugriff nicht ordnungsgemäß entfernt?
ReviewInstanceDecisionItems | where ApplyResult != "New" and ApplyResult != "AppliedSuccessfully"Haben Prüfer ihre Entscheidungen dokumentiert?
ReviewInstanceDecisionItems | where isnotempty(Justification) | summarize count() by ReviewedBy_DisplayNameWurden Kommentare für jeden Benutzer erfasst?
ReviewInstanceDecisionItems | where isnotempty(Justification) | project User = Principal_DisplayName, Resource = Resource_DisplayName, Comments = Justification
Einrichten laufender Importe
In diesem Tutorial wird ein einmaliger Prozess zur Datenextraktion, -transformation und -ladung (ETL) veranschaulicht, um Azure Data Explorer mit einer einzelnen Momentaufnahme für Berichtszwecke zu befüllen. Für laufende Berichte oder Vergleiche der Änderungen im Laufe der Zeit können Sie den Prozess der Auffüllung von Azure Data Explorer aus Microsoft Entra automatisieren, damit Ihre Datenbank weiterhin aktuelle Daten enthält.
Sie können Azure Automation, einen Azure-Clouddienst, verwenden, um die PowerShell-Skripts zu hosten, die Sie zum Extrahieren von Daten aus Microsoft Entra ID und Microsoft Entra ID Governance benötigen. Weitere Informationen finden Sie unter Automatisieren von Microsoft Entra ID Governance-Aufgaben über Azure Automation und Microsoft Graph.
Sie können auch Azure-Features oder Befehlszeilentools wie lightingest verwenden, um Daten einzubinden und eine vorhandene Tabelle aufzufüllen. Weitere Informationen finden Sie unter Verwenden von LightIngest zum Erfassen von Daten in Azure Data Explorer.
Wenn Sie beispielsweise die EntraAccessPackages.json Datei im aktuellen Verzeichnis als aktuell angemeldeten Benutzer in die EntraAccessPackages Tabelle laden möchten, verwenden Sie diesen Befehl:
az login
LightIngest.exe "https://ingest-CLUSTERHOSTNAME;Fed=True" -database:"DATABASE" -table:EntraAccessPackages -sourcepath:"." -pattern:"EntraAccessPackages.json" -format:multijson -azcli:true
Berichterstellung zu Daten aus weiteren Quellen
Sie können auch Daten aus Quellen, die über Microsoft Entra hinausgehen, in Azure-Daten-Explorer übertragen. Das Szenario für diese Funktion umfasst:
- Ein Administrator möchte Ereignisse im Überwachungsprotokoll mit zusätzlichen Details zu Benutzern, Zugriffspaketen oder anderen Objekten anzeigen, die nicht Teil des Überwachungsdatensatzes selbst sind.
- Ein Administrator möchte alle Benutzer anzeigen, die aus Microsoft Entra ID zu einer Anwendung hinzugefügt wurden, sowie deren Zugriffsrechte im Repository der Anwendung, wie z. B. einer SQL-Datenbank.
Weitere Informationen finden Sie unter Erstellen von benutzerdefinierten Berichten im Azure-Daten-Explorer mithilfe von Daten aus anderen Quellen.