Delen via


Zelfstudie: Aangepaste rapporten maken in Azure Data Explorer met behulp van gegevens uit Microsoft Entra

In deze zelfstudie leert u hoe u aangepaste rapporten maakt in Azure Data Explorer- met behulp van gegevens van Microsoft Entra ID en Microsoft Entra ID Governance-services.

Deze zelfstudie is een aanvulling op rapportageopties, zoals archivering en rapportage met Azure Monitor en rechtenbeheer, die is gericht op het exporteren van het auditlogboek naar Azure Monitor voor retentie en analyse. Ter vergelijking: het exporteren van Microsoft Entra-id- en Microsoft Entra ID-governancegegevens naar Azure Data Explorer biedt flexibiliteit voor het maken van aangepaste rapporten op Microsoft Entra-objecten, waaronder historische en verwijderde objecten.

Hier volgt een video met een kort overzicht van rapportage over Microsoft Entra ID Governance-gegevens met behulp van Azure Data Explorer.

Het gebruik van Azure Data Explorer maakt ook gegevensaggregatie mogelijk vanuit aanvullende bronnen, met enorme schaalbaarheid, flexibele schema's en bewaarbeleid. Azure Data Explorer is vooral handig wanneer u jarenlang gebruikerstoegangsgegevens wilt bewaren, ad-hoconderzoeken moet uitvoeren of aangepaste query's moet uitvoeren op toegangsgegevens.

Conceptuele tekening met gegevensextractie en query's.

In deze zelfstudie ziet u hoe u configuratie-, gebruikers- en toegangsrechten weergeeft die zijn geëxporteerd uit Microsoft Entra, samen met gegevens die zijn geëxporteerd uit andere bronnen, zoals toepassingen met toegangsrechten in hun eigen SQL-databases. Vervolgens kunt u de Kusto Query Language (KQL) in Azure Data Explorer gebruiken om aangepaste rapporten te maken op basis van de vereisten van uw organisatie.

In deze zelfstudie gaat u het volgende doen:

  • Stel Azure Data Explorer in een Azure-abonnement in of maak een gratis cluster.
  • Extraheer gegevens uit Microsoft Entra ID met behulp van PowerShell-scripts en Microsoft Graph.
  • Tabellen maken en gegevens importeren uit Microsoft Entra ID in Azure Data Explorer.
  • Gegevens extraheren uit Microsoft Entra ID Governance.
  • Tabellen maken en gegevens importeren uit Microsoft Entra ID Governance in Azure Data Explorer.
  • Een aangepaste query maken met behulp van KQL.
  • Query's uitvoeren op gegevens in Azure Monitor.

Aan het einde van deze zelfstudie kunt u aangepaste weergaven ontwikkelen van de toegangsrechten en machtigingen van gebruikers. Deze weergaven omvatten meerdere toepassingen via door Microsoft ondersteunde hulpprogramma's. U kunt ook gegevens ophalen uit niet-Microsoft-databases of -toepassingen om te rapporteren over die toegangsrechten en machtigingen.

Vereisten

Als u geen kennis hebt met Azure Data Explorer en u de scenario's wilt leren die in deze zelfstudie worden weergegeven, kunt u een gratis Azure Data Explorer-cluster verkrijgen. Voor gebruik dat door productie wordt ondersteund met een service level agreement voor Azure Data Explorer, hebt u een Azure-abonnement nodig om een volledig Azure Data Explorer-cluster te hosten.

Bepaal welke gegevens u wilt opnemen in uw rapporten. De scripts in deze zelfstudie bevatten voorbeelden met specifieke gegevens van gebruikers, groepen en toepassingen van Microsoft Entra. Deze voorbeelden illustreren de typen rapporten die u met deze benadering kunt genereren, maar uw specifieke rapportagebehoeften kunnen variëren en vereisen verschillende of aanvullende gegevens. U kunt beginnen met deze objecten en meer soorten Microsoft Entra-objecten in de loop van de tijd meenemen.

  • Deze handleiding illustreert hoe gegevens worden opgehaald uit Microsoft Entra door een aangemelde gebruiker. Om dit te doen, moet u ervoor zorgen dat u over de vereiste roltoewijzingen beschikt. U hebt de rollen met de juiste machtigingen nodig om het type Microsoft Entra-gegevens te exporteren waarmee u wilt werken:

    • Gebruikersgegevens: globale beheerder, beheerder met bevoorrechte rol, gebruikersbeheerder
    • Groepsgegevens: globale beheerder, beheerder met bevoorrechte rol, groepsbeheerder
    • Toepassingen en app-roltoewijzingen: globale beheerder, bevoorrechte rolbeheerder, toepassingsbeheerder, cloudtoepassingsbeheerder
  • Microsoft Graph PowerShell heeft toestemming nodig om Microsoft Entra-objecten op te halen via Microsoft Graph. Voor de voorbeelden in deze zelfstudie zijn de gedelegeerde User.Read.All, Group.Read.All, Application.Read.Allen Directory.Read.All machtigingen vereist. Als u van plan bent om gegevens op te halen met automatisering zonder een aangemelde gebruiker, moet u in plaats daarvan toestemming geven voor de bijbehorende toepassingsmachtigingen. Raadpleeg Microsoft Graph-machtigingen voor meer informatie.

    Als u Microsoft Graph PowerShell nog geen toestemming hebt gegeven voor deze machtigingen, moet u een globale beheerder zijn om deze toestemmingsbewerking uit te voeren.

  • Deze handleiding illustreert geen aangepaste beveiligingsattributen. Globale beheerder en andere beheerdersrollen bevatten standaard geen machtigingen voor het lezen van aangepaste beveiligingskenmerken van Microsoft Entra-gebruikers. Als u van plan bent om aangepaste beveiligingskenmerken op te halen, hebt u mogelijk meer rollen en machtigingen nodig.

  • Zorg ervoor dat u schrijftoegang hebt tot de bestandssysteemmap op de computer waarop Microsoft Graph PowerShell is geïnstalleerd. In deze map installeert u de vereiste Microsoft Graph PowerShell-modules en waar de geëxporteerde Microsoft Entra-gegevens worden opgeslagen.

  • Zorg ervoor dat u gemachtigd bent om gegevens op te halen uit andere gegevensbronnen buiten Microsoft Entra, als u die gegevens ook wilt opnemen in Azure Data Explorer.

Azure Data Explorer instellen

Als u Azure Data Explorer nog niet eerder hebt gebruikt, moet u deze eerst instellen. U kunt een gratis cluster maken zonder een Azure-abonnement of creditcard. U kunt ook een volledig cluster maken waarvoor een Azure-abonnement is vereist. Zie Quickstart: Een Azure Data Explorer-cluster en -database makenom aan de slag te gaan.

Microsoft Entra ID-gegevens extraheren met behulp van PowerShell

In deze sectie u Microsoft Graph PowerShell-modulesinstalleren. In PowerShell u verbinding maken met Microsoft Graph om Microsoft Entra ID-gegevens te extraheren.

De eerste keer dat uw organisatie deze modules voor dit scenario gebruikt, moet u de rol Globale beheerder hebben om Microsoft Graph PowerShell toestemming te geven voor gebruik in uw tenant. Volgende interacties kunnen een rol met lagere bevoegdheden gebruiken.

  1. Open PowerShell.

  2. Als u niet alle Microsoft Graph PowerShell-modules al hebt geïnstalleerd, installeert u de vereiste Microsoft Graph-modules. De volgende modules zijn vereist voor dit gedeelte van de zelfstudie: Microsoft.Graph.Authentication, Microsoft.Graph.Users, Microsoft.Graph.Groups, Microsoft.Graph.Applicationsen Microsoft.Graph.DirectoryObjects. Als u deze modules al hebt geïnstalleerd, kunt u deze stap overslaan.

       $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
       } 
    
  3. Importeer de modules in de huidige PowerShell-sessie:

      $modules = @('Microsoft.Graph.Users', 'Microsoft.Graph.Groups', 'Microsoft.Graph.Applications', 'Microsoft.Graph.DirectoryObjects') 
      foreach ($module in $modules) { 
      Import-Module -Name $module 
      } 
    
  4. Maak verbinding met Microsoft Graph. In deze sectie van de zelfstudie ziet u hoe u gebruikers, groepen en toepassingen leest. Hiervoor zijn de User.Read.All, Group.Read.All, Application.Read.Allen Directory.Read.All machtigingsbereiken vereist. Zie Microsoft Graph-machtigingenvoor meer informatie over machtigingen.

      Connect-MgGraph -Scopes "User.Read.All", "Group.Read.All", "Application.Read.All", "Directory.Read.All" -ContextScope Process -NoWelcome
    

    Met deze opdracht wordt u gevraagd u aan te melden met uw Microsoft Entra-referenties. Nadat u zich hebt aangemeld, moet u mogelijk toestemming geven voor de vereiste machtigingen als dit uw eerste keer is dat u verbinding maakt of als er nieuwe machtigingen vereist zijn.

PowerShell-query's voor het extraheren van Microsoft Entra ID-gegevens voor aangepaste rapporten

Met de volgende query's worden Microsoft Entra ID-gegevens uit Microsoft Graph geëxtraheerd met behulp van PowerShell en worden de gegevens geëxporteerd naar JSON-bestanden. U importeert deze bestanden in Azure Data Explorer in een latere sectie van deze zelfstudie.

Scenario's voor het genereren van rapporten met dit type gegevens zijn:

  • Een auditor wil een rapport zien waarin de groepsleden voor 10 groepen worden vermeld, georganiseerd door de afdeling van de leden.
  • Een auditor wil een rapport bekijken van alle gebruikers die toegang hadden tot een toepassing tussen twee datums.

U kunt ook gegevens naar Azure Data Explorer overbrengen vanuit bronnen buiten Microsoft Entra. Een scenario voor deze mogelijkheid kan zijn:

  • Een beheerder wil alle gebruikers weergeven die zijn toegevoegd aan een toepassing vanuit Microsoft Entra-id en hun toegangsrechten in de eigen opslagplaats van de toepassing, zoals een SQL-database.

Deze typen rapporten zijn niet ingebouwd in Microsoft Entra-id. U kunt deze rapporten echter zelf maken door gegevens uit Microsoft Entra-id te extraheren en gegevens te combineren met behulp van aangepaste query's in Azure Data Explorer. In deze handleiding wordt dit proces later behandeld, in het artikel Gegevens ophalen uit andere bronnen.

Voor deze zelfstudie extraheert u Microsoft Entra ID-gegevens uit deze gebieden:

  • Gebruikersgegevens, zoals weergavenaam, UPN en taakdetails
  • Groepsinformatie, inclusief hun lidmaatschappen
  • Toepassingen en toewijzingen aan toepassingsrollen

Met deze gegevensset kunt u een breed scala aan query's uitvoeren rond wie toegang heeft gekregen tot een toepassing, met informatie over de toepassingsrol en het bijbehorende tijdsbestek. Houd er rekening mee dat dit voorbeeldquery's zijn en dat uw gegevens en specifieke vereisten kunnen verschillen van wat hier wordt weergegeven.

Notitie

Grotere tenants kunnen beperkings- (throttling) en 429-fouten ondervinden die door de Microsoft Graph-module worden verwerkt. Azure Data Explorer kan ook de uploadgrootte van bestanden beperken.

In deze PowerShell-scripts exporteert u geselecteerde eigenschappen van de Microsoft Entra-objecten naar JSON-bestanden. De gegevens van deze geëxporteerde eigenschappen worden gebruikt voor het genereren van aangepaste rapporten in Azure Data Explorer.

De volgende specifieke eigenschappen zijn opgenomen in deze voorbeelden, omdat we deze gegevens gebruiken om de typen rapporten te illustreren die u kunt maken in Azure Data Explorer. Omdat uw specifieke rapportagebehoeften waarschijnlijk verschillen van wat in deze zelfstudie wordt weergegeven, moet u de specifieke eigenschappen opnemen in deze scripts die u wilt weergeven in uw rapporten. U kunt echter hetzelfde patroon volgen dat wordt weergegeven om uw scripts te bouwen.

Een datum van een momentopname selecteren

Een vastgelegde datum van momentopname identificeert de gegevens in het JSON-bestand met een specifieke datum. U kunt deze gebruiken om vergelijkbare gegevenssets in de loop van de tijd bij te houden in Azure Data Explorer. De datum van de momentopname is ook handig voor het vergelijken van wijzigingen in gegevens tussen twee datums van momentopnamen.

$SnapshotDate = Get-Date -AsUTC -Format "yyyy-MM-dd"

Microsoft Entra-gebruikersgegevens ophalen

Met dit script worden geselecteerde eigenschappen van het Microsoft Entra-gebruikersobject geëxporteerd naar een JSON-bestand. U importeert dit bestand en aanvullende gegevens uit andere JSON-bestanden in Azure Data Explorer in een latere sectie van deze zelfstudie.

  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 

Groepsgegevens ophalen

Genereer een JSON-bestand met groepsnamen en id's die worden gebruikt om aangepaste weergaven te maken in Azure Data Explorer. Het voorbeeld bevat alle groepen, maar u kunt indien nodig extra filters opnemen. Als u filtert om alleen bepaalde groepen op te nemen, kunt u logica in uw script opnemen om te controleren op geneste groepen.

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

Groepslidmaatschapsgegevens ophalen

Genereer een JSON-bestand met groepslidmaatschap, dat wordt gebruikt om aangepaste weergaven te maken in Azure Data Explorer. Het voorbeeld bevat alle groepen, maar u kunt indien nodig extra filters opnemen.

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

Toepassings- en service-principalgegevens ophalen

Genereer een JSON-bestand met alle toepassingen en de bijbehorende service-principals in de tenant. U importeert deze gegevens in Azure Data Explorer in een latere sectie van deze zelfstudie, zodat u aangepaste rapporten kunt genereren die betrekking hebben op toepassingen op basis van deze gegevens.

    # 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-rolgegevens ophalen

Genereer een JSON-bestand van alle app-rollen voor zakelijke apps in Microsoft Entra. Nadat u deze gegevens in Azure Data Explorer hebt geïmporteerd, gebruikt u deze om rapporten te genereren die betrekking hebben op app-roltoewijzingen voor gebruikers.

    # 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' 

App-roltoewijzingsgegevens ophalen

Genereer een JSON-bestand van alle app-roltoewijzingen van gebruikers in de tenant:

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

Tabellen maken en JSON-bestanden importeren met gegevens van Microsoft Entra ID in Azure Data Explorer

In deze sectie importeert u de zojuist gemaakte JSON-bestanden voor de Microsoft Entra ID-services als tabellen in Azure Data Explorer voor verdere analyse. Bij het eerste importeren via de webgebruikersinterface van Azure Data Explorer maakt u de tabellen op basis van schema's die door de webgebruikersinterface worden voorgesteld vanuit elk JSON-bestand.

  1. Meld u aan bij de webgebruikersinterface van Azure Data Explorer.

  2. Ga eerder in deze zelfstudie naar de database die u hebt ingesteld in uw Azure Data Explorer-cluster of een gratis cluster.

  3. Selecteer in het linkermenu Query.

  4. Volg deze stappen voor elk geëxporteerd JSON-bestand om uw geëxporteerde gegevens als een nieuwe tabel in die Azure Data Explorer-database op te halen:

    1. Klik met de rechtermuisknop op de naam van de database waar u de gegevens wilt opnemen. Selecteer vervolgens Gegevens ophalen.

      Schermopname van een querytabblad, met een snelmenu voor een database en de opdracht voor het ophalen van gegevens gemarkeerd.

    2. Selecteer de gegevensbron in de beschikbare lijst. In deze zelfstudie voert u gegevens in uit een lokaal bestand, dus selecteer lokaal bestand.

    3. Selecteer + Nieuwe tabel en voer een tabelnaam in op basis van de naam van het JSON-bestand dat u importeert. Als u bijvoorbeeld EntraUsers.jsonimporteert, noemt u de tabel EntraUsers. Na het eerste importeren bestaat de tabel al en kunt u deze selecteren als de doeltabel voor een volgende import.

    4. Selecteer Bladeren naar bestanden, selecteer het JSON-bestand en selecteer vervolgens Volgende.

    5. Azure Data Explorer detecteert het schema automatisch en biedt een voorbeeld op het tabblad Inspect. Selecteer Voltooien om de tabel te maken en de gegevens uit dat bestand te importeren. Nadat de gegevens zijn opgenomen, selecteert u Sluiten .

    6. Herhaal de voorgaande stappen voor elk van de JSON-bestanden die u in de vorige sectie hebt gegenereerd.

Aan het einde van deze stappen hebt u de tabellen EntraUsers, EntraGroups, EntraGroupMemberships, Applications, AppRolesen AppRoleAssignments in de database.

Microsoft Entra ID Governance-gegevens extraheren met behulp van PowerShell

In deze sectie gebruikt u PowerShell om gegevens te extraheren uit Microsoft Entra ID Governance-services. Als u geen Microsoft Entra ID Governance, Microsoft Entra ID P2 of Microsoft Entra Suite hebt, gaat u verder in de sectie Azure Data Explorer gebruiken om aangepaste rapporten te maken.

Voor de volgende stappen moet u mogelijk Microsoft Graph PowerShell-modules installeren om Microsoft Entra ID Governance-gegevens te extraheren. De eerste keer dat uw organisatie deze modules voor dit scenario gebruikt, moet u de rol Globale beheerder hebben om Microsoft Graph PowerShell toestemming te geven voor gebruik in uw tenant. Volgende interacties kunnen een rol met lagere bevoegdheden gebruiken.

  1. Open PowerShell.

  2. Als u niet alle Microsoft Graph PowerShell-modules al hebt geïnstalleerd, installeert u de vereiste Microsoft Graph-modules. De volgende module is vereist voor deze sectie van de zelfstudie: Microsoft.Graph.Identity.Governance. Als u de modules al hebt geïnstalleerd, gaat u verder met de volgende stap.

       $modules = @('Microsoft.Graph.Identity.Governance')
       foreach ($module in $modules) {
       Install-Module -Name $module -Scope CurrentUser -AllowClobber -Force
       }
    
  3. Importeer de modules in de huidige PowerShell-sessie:

      $modules = @('Microsoft.Graph.Identity.Governance')
      foreach ($module in $modules) {
      Import-Module -Name $module
      } 
    
  4. Maak verbinding met Microsoft Graph. Deze sectie van de zelfstudie illustreert het ophalen van gegevens uit rechtenbeheer en toegangsbeoordelingen. Hiervoor zijn de AccessReview.Read.All en EntitlementManagement.Read.All machtigingsbereiken vereist. Voor andere gebruiksscenario's voor rapportage, zoals voor Pim (Privileged Identity Management) of levenscycluswerkstromen, werkt u de parameter Scopes bij met de benodigde machtigingen. Zie Microsoft Graph-machtigingenvoor meer informatie over machtigingen.

      Connect-MgGraph -Scopes "AccessReview.Read.All, EntitlementManagement.Read.All" -ContextScope Process -NoWelcome
    

    Met deze opdracht wordt u gevraagd u aan te melden met uw Microsoft Entra-referenties. Nadat u zich hebt aangemeld, moet u mogelijk toestemming geven voor de vereiste machtigingen als dit uw eerste keer is dat u verbinding maakt of als er nieuwe machtigingen vereist zijn.

PowerShell-query's voor het extraheren van Microsoft Entra ID-governancegegevens voor aangepaste rapporten

Met de volgende query's worden Microsoft Entra ID Governance-gegevens uit Microsoft Graph geëxtraheerd met behulp van PowerShell en worden de gegevens geëxporteerd naar JSON-bestanden. U importeert deze bestanden in Azure Data Explorer in een latere sectie van deze zelfstudie.

Scenario's voor het genereren van rapporten met dit type gegevens zijn:

  • Rapporteren over historische toegangsbeoordelingen.
  • Rapportage over opdrachten via rechtenbeheer.

Gegevens over definitie van toegangsreviewplanning ophalen

Genereer een JSON-bestand met definitienamen en id's voor toegangsbeoordeling die worden gebruikt om aangepaste weergaven te maken in Azure Data Explorer. Het voorbeeld bevat alle toegangsbeoordelingen, maar u kunt indien nodig extra filters opnemen. Zie De filterqueryparametergebruiken voor meer informatie.

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

Exemplaargegevens ophalen voor toegangsbeoordelingen

Als u alle definities, exemplaren en beslissingen van toegangsbeoordeling wilt exporteren naar een gestructureerde mapindeling met behulp van PowerShell, kunt u de Microsoft Graph API gebruiken. Deze aanpak zorgt ervoor dat uw gegevens hiërarchisch worden georganiseerd en worden afgestemd op de opgegeven mapstructuur.

Voordat u begint, moet u rekening houden met de volgende punten:

  • Zorg ervoor dat u over de benodigde machtigingen beschikt om toegang te krijgen tot controlegegevens in Microsoft Graph.
  • Afhankelijk van het volume aan gegevens kan de uitvoeringstijd van het script variëren. Bewaak het proces en pas de parameters indien nodig aan.

Volg de volgende stappen om de gegevens van de instantie op te halen:

  1. Download het Export_Access_Reviews.ps1 script en sla het lokaal op.

  2. Deblokkeer in Verkenner het script, zodat u het kunt uitvoeren in PowerShell.

  3. Voer de volgende opdracht uit. De uitvoer plaatst alle gegevens in drie submappen: ReviewInstances, ReviewInstanceDecisionItemsen ReviewInstanceContactedReviewers.

     .\ExportAccessReviews.ps1 -InstanceStartDate "11/15/2024" -InstanceEndDate "12/15/2024" -ExportFolder "C:\AccessReviewsExport\11_15_to_12_15" 
    

Toegangspakketgegevens ophalen voor rechtenbeheer

Genereer een JSON-bestand met toegangspakketnamen en id's die worden gebruikt om aangepaste weergaven te maken in Azure Data Explorer. Het voorbeeld bevat alle toegangspakketten, maar u kunt indien nodig extra filters opnemen.

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

Toegangspakkettoewijzingsgegevens ophalen voor rechtenbeheer

Genereer een JSON-bestand met toewijzingen voor toegang tot pakketten die worden gebruikt voor het maken van aangepaste weergaven in Azure Data Explorer. Het voorbeeld bevat alle opdrachten die worden geleverd, maar u kunt indien nodig extra filters opnemen.

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

Tabellen maken en JSON-bestanden importeren met gegevens uit Microsoft Entra ID Governance in Azure Data Explorer

In deze sectie importeert u de zojuist gemaakte JSON-bestanden voor de Microsoft Entra ID Governance-services in Azure Data Explorer voor verdere analyse. Deze bestanden voegen de gegevens toe die u al hebt geïmporteerd voor de Microsoft Entra ID-services. Bij het eerste importeren via de webgebruikersinterface van Azure Data Explorer maakt u tabellen op basis van schema's die door de webgebruikersinterface worden voorgesteld vanuit elk JSON-bestand.

  1. Meld u aan bij de webgebruikersinterface van Azure Data Explorer.

  2. Ga in uw Azure Data Explorer-cluster of gratis cluster naar de database met uw Microsoft Entra ID-gegevens.

  3. Selecteer in het linkermenu Query.

  4. Volg deze stappen voor elk geëxporteerd JSON-bestand om uw geëxporteerde gegevens als een nieuwe tabel in die Azure Data Explorer-database op te halen:

    1. Klik met de rechtermuisknop op de databasenaam van de database waar u de gegevens wilt opnemen. Selecteer vervolgens Gegevens ophalen.

      Schermopname van een querytabblad, met een snelmenu voor een database en de opdracht voor het ophalen van gegevens gemarkeerd.

    2. Selecteer de gegevensbron in de beschikbare lijst. In deze zelfstudie voert u gegevens in uit een lokaal bestand, dus selecteer lokaal bestand.

    3. Selecteer + Nieuwe tabel en voer een tabelnaam in op basis van de naam van het JSON-bestand dat u importeert. Na het eerste importeren bestaat de tabel al en kunt u deze selecteren als de doeltabel voor een volgende import.

    4. Selecteer Bladeren naar bestanden, selecteer het JSON-bestand en selecteer vervolgens Volgende.

    5. Azure Data Explorer detecteert het schema automatisch en biedt een voorbeeld op het tabblad Inspect. Selecteer Voltooien om de tabel te maken en de gegevens uit dat bestand te importeren. Nadat de gegevens zijn opgenomen, selecteert u Sluiten .

    6. Herhaal de voorgaande stappen voor elk van de JSON-bestanden die u in de vorige sectie hebt gegenereerd, voor elk van de mappen.

    7. Als er veel bestanden in een map staan, kunt u lightingest gebruiken om de rest te importeren nadat de tabel is gemaakt.

Aan het einde van deze stappen hebt u de tabellen EntraAccessReviewDefinitions, EntraAccessPackages, EntraAccessPackageAssignments, ReviewInstances, ReviewInstanceDecisionItemsen ReviewInstanceContactedReviewers in de database, naast de tabellen die u eerder hebt gemaakt.

Azure Data Explorer gebruiken om aangepaste rapporten te maken

Nu de gegevens nu beschikbaar zijn in Azure Data Explorer, bent u klaar om aangepaste rapporten te maken op basis van uw zakelijke vereisten:

  1. Meld u aan bij de webgebruikersinterface van Azure Data Explorer.

  2. Selecteer in het linkermenu Query.

De volgende query's bevatten voorbeelden van algemene rapporten, maar u kunt deze rapporten aanpassen aan uw behoeften en aanvullende rapporten maken.

U kunt uw rapporten ook weergeven in Exceldoor het tabblad Exporteren te selecteren en vervolgens Openen in Excelte selecteren.

Voorbeeld: App-roltoewijzingen genereren voor directe toewijzingen en groepstoewijzingen voor een specifieke momentopnamedatum

Dit rapport geeft een overzicht van wie welke toegang en wanneer heeft gehad tot de doel-app. U kunt deze gebruiken voor beveiligingscontroles, nalevingsverificatie en inzicht in toegangspatronen binnen de organisatie.

De volgende query is gericht op een specifieke toepassing binnen Microsoft Entra ID en analyseert de roltoewijzingen vanaf een bepaalde datum. De query haalt zowel directe als op groepen gebaseerde roltoewijzingen op. Deze gegevens worden samengevoegd met gebruikersgegevens uit de EntraUsers tabel en rolgegevens uit de AppRoles tabel. Stel in de query targetSnapshotDate in op de snapshotDate waarde die u hebt gebruikt bij het laden van de gegevens.

/// 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 

Voorbeeld: Een basisrevisorrapport maken met Microsoft Entra-gegevens die laten zien wie toegang had tot een app tussen twee datums

Dit rapport geeft een overzicht van wie wanneer toegang had tot de doel-app tussen twee datums. U kunt deze gebruiken voor beveiligingscontroles, nalevingsverificatie en inzicht in toegangspatronen binnen de organisatie.

De volgende query is gericht op een specifieke toepassing binnen Microsoft Entra ID en analyseert de roltoewijzingen tussen twee datums. De query haalt directe roltoewijzingen op uit de AppRoleAssignments tabel en voegt deze gegevens samen met gebruikersgegevens uit de EntraUsers tabel en rolgegevens uit de AppRoles tabel.

// 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() 

Voorbeeld: Gebruikers weergeven die zijn toegevoegd aan een app tussen twee datums van gegevensmomentopnamen

Deze rapporten bieden een weergave van welke gebruikers een app-roltoewijzing hebben ontvangen voor de doeltoepassing tussen twee datums. U kunt deze rapporten gebruiken om wijzigingen in app-toegang in de loop van de tijd bij te houden.

Deze query is gericht op een specifieke applicatie binnen Microsoft Entra ID en wijzigt de roltoewijzingen tussen de begindatum en einddatum.

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

Voorbeeld: Verschillende query's die gebruikmaken van toegangsbeoordelingen

Voltooiings- en tijdlijngegevens van toegangsbeoordeling weergeven

Nadat de gegevens zijn geüpload, gebruikt u de volgende Kusto-query's om deze te controleren:

  • Wanneer is de laatste beoordelingscyclus voor toegang voltooid? Hoe lang duurde het?

    ReviewInstances
    | summarize LastCompletedDate = max(ReviewInstanceEndDateTime),  
                ReviewDuration = datetime_diff('minute', max(ReviewInstanceEndDateTime), min(ReviewInstanceStartDateTime))  
    
  • Wordt het proces voor toegangsbeoordeling op tijd uitgevoerd (bijvoorbeeld elk kwartaal)?

    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
    

Deelname en betrokkenheid bij toegangsreview bekijken

  • Wie waren de toegewezen revisoren?

    ReviewInstanceContactedReviewers
    | project AccessReviewDefinitionId, AccessReviewInstanceId, ReviewerName = DisplayName, ReviewerUserPrincipalName = UserPrincipalName, CreatedDateTime
    
  • Welke revisoren hebben actief deelgenomen aan en antwoorden gegeven?

    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, Decision
    
  • Welk percentage revisoren heeft gereageerd op de aanvraag voor toegangsbeoordeling?

    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, NonResponsePercentage  
    
  • Wanneer heeft elke revisor zijn taken voltooid?

    ReviewInstanceDecisionItems 
    | where Decision in ("Approve", "Deny") 
    | project AccessReviewDefinitionId, AccessReviewInstanceId, ReviewerName = ReviewedBy_DisplayName, ReviewerUserPrincipalName = ReviewedBy_UserPrincipalName, ReviewedDateTime  
    
  • Welke revisoren hebben geen beslissingen genomen?

    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, ReviewerName
    
  • Welk percentage revisoren heeft niet gecommuniceerd?

    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, NonResponsePercentage  
    
  • Zijn herinneringen geactiveerd voor niet-reagerende revisoren of beslissingen die in behandeling zijn?

    // 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
    

Gebruikers en toegangswijzigingen weergeven die het gevolg zijn van toegangsbeoordelingen

  • Wie heeft de toegang tot specifieke resources verloren tijdens de toegangsbeoordeling?

    ReviewInstanceDecisionItems 
    | where Decision == "Deny" 
    | project User = Principal_DisplayName, Resource = Resource_DisplayName, Decision, Justification 
    
  • Zijn gebruikers gemarkeerd vanwege inactiviteit?

    ReviewInstanceDecisionItems
    | where Insights contains "inactive"
    | project User = Principal_DisplayName, Resource = Resource_DisplayName, Insights, Decision
    
  • Wat was de datum van het verwijderen van toegang en de reden voor het verlies van toegang?

    ReviewInstanceDecisionItems
    | where Decision == "Deny"
    | project User = Principal_DisplayName, Resource=Resource_DisplayName, AccessRemovalDate = AppliedDateTime, Reason = Justification  
    
  • Welke gebruikers hebben geen beslissingen genomen?

    ReviewInstanceDecisionItems
    | where Decision == "NotReviewed"
    | project User = Principal_DisplayName, Resource=Resource_DisplayName
    
  • Welke beoordelingen hadden geen revisoren?

    ReviewInstances
    | join kind=leftanti (
        ReviewInstanceContactedReviewers
        | summarize by AccessReviewInstanceId
    ) on $left.ReviewInstanceId == $right.AccessReviewInstanceId  
    
  • Welke beoordelingen hadden geen gebruikers?

    ReviewInstances 
    | join kind=leftanti (
        ReviewInstanceDecisionItems
        | summarize by AccessReviewInstanceId
    ) on $left.ReviewInstanceId == $right.AccessReviewInstanceId
    

Samenvatting maken van beslissingen over toegangsbeoordelingen

  • Welke beslissingen hebben gebruikers genomen: goedgekeurd, geweigerd of ongewijzigd?

    ReviewInstanceDecisionItems
    | summarize count() by Decision
    
  • Welk aantal gebruikers is goedgekeurd of geweigerd?

    ReviewInstanceDecisionItems
    | summarize ApprovedCount = countif(Decision == "Approve"), DeniedCount = countif(Decision == "Deny")
    
  • Zijn goedkeuringsredenen gedocumenteerd?

    ReviewInstanceDecisionItems
    | where Decision == "Approve" and isnotempty(Justification)
    | summarize count() by ReviewedBy_DisplayName
    

Bevestig de kwaliteit van de toegangsbeoordeling en controleer op volledigheid.

  • Werden toegangsintrekkingen overwogen voor slapende gebruikers?

    ReviewInstanceDecisionItems
    | where Insights contains "inactive" and Decision == "Deny"
    | project User = Principal_DisplayName, Decision
    
  • Is er toegang die niet correct is verwijderd?

    ReviewInstanceDecisionItems
    | where ApplyResult != "New" and ApplyResult != "AppliedSuccessfully"
    
  • Hebben beoordelaars hun beslissingen gedocumenteerd?

    ReviewInstanceDecisionItems
    | where isnotempty(Justification)
    | summarize count() by ReviewedBy_DisplayName
    
  • Zijn opmerkingen vastgelegd voor elke gebruiker?

    ReviewInstanceDecisionItems
    | where isnotempty(Justification)
    | project User = Principal_DisplayName, Resource = Resource_DisplayName, Comments = Justification
    

Doorlopende imports instellen

In deze zelfstudie ziet u een eenmalig ETL-proces (Extract, Transform and Load) voor het vullen van Azure Data Explorer met één momentopname voor rapportagedoeleinden. Voor doorlopende rapportage of om wijzigingen in de loop van de tijd te vergelijken, kunt u het proces voor het invullen van Azure Data Explorer vanuit Microsoft Entra automatiseren, zodat uw database nog steeds actuele gegevens bevat.

U kunt Azure Automation, een Azure-cloudservice, gebruiken om de PowerShell-scripts te hosten die u nodig hebt voor het extraheren van gegevens uit Microsoft Entra ID en Microsoft Entra ID Governance. Zie Microsoft Entra ID Governance-taken automatiseren via Azure Automation en Microsoft Graphvoor meer informatie.

U kunt ook Azure-functies of opdrachtregelprogramma's zoals lightingest gebruiken om gegevens in te voeren en een bestaande tabel te vullen. Zie LightIngest gebruiken om gegevens op te nemen in Azure Data Explorervoor meer informatie.

Als u bijvoorbeeld het EntraAccessPackages.json-bestand in de huidige map wilt laden in de EntraAccessPackages tabel als de momenteel aangemelde gebruiker, gebruikt u deze opdracht:

az login
LightIngest.exe "https://ingest-CLUSTERHOSTNAME;Fed=True" -database:"DATABASE" -table:EntraAccessPackages -sourcepath:"." -pattern:"EntraAccessPackages.json" -format:multijson -azcli:true

Rapportage over gegevens uit meer bronnen

U kunt ook gegevens naar Azure Data Explorer overbrengen vanuit bronnen buiten Microsoft Entra. Scenario voor deze mogelijkheid is onder andere:

  • Een beheerder wil gebeurtenissen in het auditlogboek weergeven met aanvullende informatie over gebruikers, toegangspakketten of andere objecten die geen deel uitmaken van de auditrecord zelf.
  • Een beheerder wil alle gebruikers weergeven die zijn toegevoegd aan een toepassing vanuit Microsoft Entra-id en hun toegangsrechten in de eigen opslagplaats van de toepassing, zoals een SQL-database.

Zie Aangepaste rapporten maken in Azure Data Explorer met behulp van gegevens uit andere bronnen voor meer informatie.