Dela via


Självstudie: Anpassade rapporter i Azure Data Explorer med data från Microsoft Entra

I den här självstudien lär du dig hur du skapar anpassade rapporter i Azure Data Explorer (ADX) med hjälp av data från Microsoft Entra ID och Microsoft Entra ID Governance Services. Den här guiden kompletterar andra rapporteringsalternativ som Arkivera &-rapport med Azure Monitor och hantering av berättiganden, som fokuserar på att exportera granskningsloggen till Azure Monitor för kvarhållning och analys. Som jämförelse ger export av Microsoft Entra-ID-data till Azure Data Explorer flexibilitet för att skapa anpassade rapporter om Microsoft Entra-objekt, inklusive historiska och borttagna objekt. Dessutom möjliggör användning av Azure Data Explorer dataaggregering från ytterligare källor, med massiv skalbarhet, flexibelt schema och kvarhållningsprinciper. Azure Data Explorer är särskilt användbart när du behöver behålla åtkomstdata i flera år, utföra ad hoc-undersökningar eller behöva köra anpassade frågor på användaråtkomstdata.

Den här artikeln visar hur du visar konfigurations-, användar- och åtkomsträttigheter som exporteras från Microsoft Entra tillsammans med data som exporteras från andra källor, till exempel program med åtkomsträttigheter i sina egna SQL-databaser. Du kan sedan använda KQL (Kusto Query Language) i Azure Data Explorer för att skapa anpassade rapporter baserat på organisationens krav.

Använd följande steg för att skapa dessa rapporter:

  1. Konfigurera Azure Data Explorer i en Azure-prenumeration eller skapa ett kostnadsfritt kluster.
  2. Extrahera data från Microsoft Entra ID med PowerShell-skript och Microsoft Graph.
  3. Skapa tabeller och importera dessa data från Microsoft Entra-ID till Azure Data Explorer.
  4. Extrahera data från Microsoft Entra ID Governance.
  5. Skapa tabeller och importera dessa data från Microsoft Entra ID-styrning till Azure Data Explorer.
  6. Skapa en anpassad fråga med hjälp av Kusto-frågespråk.

I slutet av den här självstudien kommer du att kunna utveckla anpassade vyer av användarnas åtkomsträttigheter och behörigheter. Dessa vyer sträcker sig över olika program med hjälp av Verktyg som stöds av Microsoft. Du kan också ta in data från databaser eller program från tredje part för att rapportera om dem också.

Förutsättningar

Om du är nybörjare på Azure Data Explorer och vill lära dig de scenarier som visas i den här artikeln kan du skaffa ett kostnadsfritt Azure Data Explorer-kluster. För produktion som stöds med ett serviceavtal för Azure Data Explorer behöver du en Azure-prenumeration som värd för ett fullständigt Azure Data Explorer-kluster.

Ta reda på vilka data du vill inkludera i dina rapporter. Skripten i den här artikeln innehåller exempel med specifika data från användare, grupper och program från Microsoft Entra. De här exemplen är avsedda att illustrera de typer av rapporter som du kan generera med den här metoden, men dina specifika rapporteringsbehov kan variera och kräva olika eller ytterligare data. Du kan börja med dessa objekt och ta in fler typer av Microsoft Entra-objekt över tid.

  • Den här artikeln visar hur du hämtar data från Microsoft Entra som en inloggad användare. Det gör du genom att se till att du har de rolltilldelningar som krävs för att hämta data från Microsoft Entra. Du behöver rollerna med rätt behörighet för att exportera den typ av Microsoft Entra-data som du vill arbeta med.
    • Användardata: Global administratör, privilegierad rolladministratör, användaradministratör
    • Gruppera data: Global administratör, Privilegierad rolladministratör, Gruppadministratör
    • Program-/approlltilldelningar: Global administratör, privilegierad rolladministratör, programadministratör, molnprogramadministratör
  • Microsoft Graph PowerShell måste godkännas för att tillåta hämtning av Microsoft Entra-objekt via Microsoft Graph. Exemplen i den här självstudien kräver behörigheterna User.Read.All, Group.Read.All, Application.Read.All och Directory.Read.All. Om du planerar att hämta data med automatisering utan en inloggad användare godkänner du i stället motsvarande programbehörigheter. Mer information finns i Referens för Microsoft Graph-behörigheter. Om du inte redan har godkänt Microsoft Graph PowerShell för dessa behörigheter måste du vara global administratör för att utföra den här medgivandeåtgärden.
  • Den här självstudien illustrerar inte anpassade säkerhetsattribut. Globala administratörsroller och andra administratörsroller innehåller som standard inte behörighet att läsa anpassade säkerhetsattribut från Microsoft Entra-användare. Om du planerar att hämta anpassade säkerhetsattribut kan fler roller och behörigheter krävas.
  • På datorn där Microsoft Graph PowerShell är installerat kontrollerar du att du har skrivåtkomst till filsystemkatalogen. Det är här du installerar nödvändiga Microsoft Graph PowerShell-moduler och där exporterade Microsoft Entra-data sparas.
  • Se till att du har behörighet att hämta data från andra datakällor utöver Microsoft Entra, om du även vill införliva dessa data i Azure Data Explorer.

1: Konfigurera Azure Data Explorer

Om du inte tidigare har använt Azure Data Explorer måste du konfigurera detta först. Du kan skapa ett kostnadsfritt kluster utan en Azure-prenumeration eller ett kreditkort eller ett fullständigt kluster som kräver en Azure-prenumeration. Se Snabbstart: Skapa ett Azure Data Explorer-kluster och en databas för att komma igång.

2: Extrahera Microsoft Entra-ID-data med PowerShell

I det här avsnittet du installera Microsoft Graph PowerShell-moduler och i PowerShell ansluta till Microsoft Graph för att extrahera Microsoft Entra-ID-data.

Första gången din organisation använder dessa moduler för det här scenariot måste du ha rollen Global administratör så att Microsoft Graph PowerShell kan bevilja medgivande för användning i din klientorganisation. Efterföljande interaktioner kan använda en lägre privilegierad roll.

  1. Öppna PowerShell.
  2. Om du inte har alla Microsoft Graph PowerShell-moduler redan installerade installerar du nödvändiga Microsoft Graph-moduler. Följande moduler krävs för det här avsnittet i självstudien: Microsoft.Graph.Authentication, Microsoft.Graph.Users, Microsoft.Graph.Groups, Microsoft.Graph.Applications, Microsoft.Graph.DirectoryObjects. Om du redan har dessa moduler installerade fortsätter du i nästa steg.
   $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
   } 
  1. Importera modulerna till den aktuella PowerShell-sessionen.
  $modules = @('Microsoft.Graph.Users', 'Microsoft.Graph.Groups', 'Microsoft.Graph.Applications', 'Microsoft.Graph.DirectoryObjects') 
  foreach ($module in $modules) { 
  Import-Module -Name $module 
  } 
  1. Anslut till Microsoft Graph. Det här avsnittet i självstudien visar hur du läser användare, grupper och program och kräver därför behörighetsomfången User.Read.All, Group.Read.All, Application.Read.Alloch Directory.Read.All. Mer information om behörigheter finns i Microsoft Graph-behörighetsreferens.
  Connect-MgGraph -Scopes "User.Read.All", "Group.Read.All", "Application.Read.All", "Directory.Read.All" -ContextScope Process -NoWelcome

Med det här kommandot uppmanas du att logga in med dina Microsoft Entra-autentiseringsuppgifter. När du har loggat in kan du behöva godkänna de behörigheter som krävs om det är första gången du ansluter eller om nya behörigheter krävs.

PowerShell-frågor för att extrahera Microsoft Entra-ID-data som behövs för att skapa anpassade rapporter i Azure Data Explorer

Följande frågor extraherar Microsoft Entra-ID-data från Microsoft Graph med PowerShell och exporterar data till JSON-filer som importeras till Azure Data Explorer i följande avsnitt 3. Det kan finnas flera scenarier för att generera rapporter med den här typen av data, inklusive:

  • En revisor vill se en rapport som listar gruppmedlemmarna för 10 grupper, ordnade av medlemsavdelningen.
  • En granskare vill se en rapport över alla användare som hade åtkomst till ett program mellan två datum.

Du kan också hämta data till Azure Data Explorer från andra källor utöver Microsoft Entra. Detta möjliggör scenarier som:

  • En administratör vill visa alla användare som lagts till i ett program från Microsoft Entra-ID och deras åtkomsträttigheter i programmets egen lagringsplats, till exempel SQL-databaser.

Dessa typer av rapporter är inte inbyggda i Microsoft Entra-ID. Du kan dock skapa dessa rapporter själv genom att extrahera data från Entra och kombinera dem med hjälp av anpassade frågor i Azure Data Explorer. Detta kommer att åtgärdas senare i självstudien, i avsnittet hämta data från andra källor.

I den här självstudien extraherar vi Microsoft Entra-ID-data från flera områden:

  • Användarinformation som visningsnamn, UPN och jobbinformation
  • Gruppinformation inklusive deras medlemskap
  • Applikations- och applikationsrolltilldelningar

Med den här datauppsättningen kan vi utföra en bred uppsättning frågor kring vem som fick åtkomst till ett program, med deras programrollinformation och tillhörande tidsram. Observera att det här är exempelfrågor och att dina data och specifika krav kan variera från vad som visas här.

Kommentar

Microsoft Graph-modulen hanterar eventuella begränsningar eller 429-fel som större användare kan uppleva. Azure Data Explorer kan också begränsa filuppladdningsstorlekar.

I dessa PowerShell-skript exporterar vi valda egenskaper från Microsoft Entra-objekten till JSON-filer. Data från dessa exporterade egenskaper används för att generera anpassade rapporter i Azure Data Explorer. De specifika egenskaper som följer inkluderades i de här exemplen eftersom vi använder dessa data för att illustrera de typer av rapporter som du kan skapa i Azure Data Explorer. Eftersom dina specifika rapporteringsbehov sannolikt varierar från vad som visas bör du inkludera de specifika egenskaperna i dessa skript som du är intresserad av att visa i dina rapporter. Du kan dock följa samma mönster som visas för att skapa dina skript.

Välj ett ögonblicksbildsdatum

Vi har inkluderat ett hårdkodat datum för ögonblicksbilder som identifierar data i JSON-filen med ett specifikt datum och gör att vi kan hålla reda på liknande datamängder över tid i Azure Data Explorer. Ögonblicksbildsdatumet är också användbart för att jämföra ändringar i data mellan två ögonblicksbildsdatum.

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

Hämta Entra-användardata

Det här skriptet exporterar markerade egenskaper från Entra-användarobjektet till en JSON-fil. Vi importerar detta och ytterligare data från andra JSON-filer till Azure Data Explorer i en efterföljande avsnitt i den här självstudien.

  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 

Hämta gruppdata

Generera en JSON-fil med gruppnamn och ID:t som används för att skapa anpassade vyer i Azure Data Explorer. Exemplet innehåller alla grupper, men ytterligare filtrering kan inkluderas om det behövs. Om du filtrerar för att endast inkludera vissa grupper kanske du vill inkludera logik i skriptet för att söka efter kapslade grupper.

    # Get all groups and select Id and DisplayName 
    $groups = Get-MgGroup -All | Select-Object Id,DisplayName 
    # Export the groups to a JSON file 
    $groups | ConvertTo-Json | Set-Content ".\EntraGroups.json" 

Hämta gruppmedlemskapsdata

Generera en JSON-fil med gruppmedlemskap som används för att skapa anpassade vyer i Azure Data Explorer. Exemplet innehåller alla grupper, men ytterligare filtrering kan inkluderas om det behövs.

    # Retrieve all groups from Microsoft Entra (Azure AD) 
    $groups = Get-MgGroup -All 
    # Initialize an array to store results 
    $results = @() 
    # Iterate over each group 
    foreach ($group in $groups) { 
      # Extract the group ID 
      $groupId = $group.Id 
      # Get members of the current group and select their IDs 
      $members = Get-MgGroupMember -GroupId $groupId | Select-Object -ExpandProperty Id 
      # Add a custom object with group ID and member IDs to the results array 
      $results += [PSCustomObject]@{ 
        GroupId = $groupId 
        Members = $members 
        SnapshotDate = $SnapshotDate
      } 
      # Pause for a short time to avoid rate limits 
      Start-Sleep -Milliseconds 200 
    } 
    # Convert the results array to JSON format and save it to a file 
    $results | ConvertTo-Json | Set-Content "EntraGroupMembership.json" 

Hämta program- och tjänsthuvudnamnsdata

Genererar JSON-filen med alla program och motsvarande tjänsthuvudnamn i klientorganisationen. Vi importerar dessa data till Azure Data Explorer i ett efterföljande avsnitt i den här självstudien som gör att vi kan generera anpassade rapporter relaterade till program baserat på dessa data.

    # Fetch applications and their corresponding service principals, then export to JSON 
    Get-MgApplication -All | ForEach-Object { 
      $app = $_ 
      $sp = Get-MgServicePrincipal -Filter "appId eq '$($app.AppId)'" 
      [pscustomobject]@{ 
        Name        = $app.DisplayName 
        ApplicationId   = $app.AppId 
        ServicePrincipalId = $sp.Id 
        SnapshotDate = $SnapshotDate
      } 
    } | ConvertTo-Json -Depth 10 | Set-Content "Applications.json" 

Hämta AppRole-data

Generera en JSON-fil för alla appRoles för företagsappar i Microsoft Entra. När de har importerats till Azure Data Explorer använder vi dessa data för att generera rapporter som involverar approlltilldelningar för användare.

    # Get a list of all applications, handle pagination manually if necessary 
    $apps = Get-MgApplication -All 
    # Loop through each application to gather the desired information 
    $results = foreach ($app in $apps) { 
      # Get the service principal for the application using its appId 
      $spFilter = "appId eq '$($app.AppId)'" 
      $sp = Get-MgServicePrincipal -Filter $spFilter | Select-Object -First 1 
      # Process AppRoles, if any, for the application 
      $appRoles = if ($app.AppRoles) { 
        $app.AppRoles | Where-Object { $_.AllowedMemberTypes -contains "User" } | 
        Select-Object Id, Value, DisplayName 
      } 
      # Construct a custom object with application and service principal details 
      [PSCustomObject]@{ 
        ApplicationId    = $app.AppId 
        DisplayName     = $app.DisplayName 
        ServicePrincipalId = $sp.Id 
        AppRoles      = $appRoles 
        SnapshotDate = $SnapshotDate
      } 
    } 
    # Export the results to a JSON file 
    $results | ConvertTo-Json -Depth 4 | Out-File 'AppRoles.json' 

Hämta AppRole-tilldelningsdata

Generera en JSON-fil med alla app-rolltilldelningar för användare i klienten.

    $users = Get-MgUser -All 
    $result = @() 
    foreach ($user in $users) { 
      Get-MgUserAppRoleAssignment -UserId $user.Id | ForEach-Object { 
        # Use the same date formatting approach 
        $createdDateTime = $_.CreatedDateTime -replace "\\/Date\((\d+)\)\\/", '$1' 
        # Convert the milliseconds timestamp to a readable date format if needed 
        $result += [PSCustomObject]@{ 
          AppRoleId      = $_.AppRoleId 
          CreatedDateTime   = $createdDateTime 
          PrincipalDisplayName = $_.PrincipalDisplayName 
          PrincipalId     = $_.PrincipalId 
          ResourceDisplayName = $_.ResourceDisplayName 
          ResourceId      = $_.ResourceId 
          SnapshotDate     = $SnapshotDate
        } 
      } 
    } 
    $result | ConvertTo-Json -Depth 10 | Out-File "AppRoleAssignments.json" 

3: Skapa tabeller och importera JSON-filer med data från Microsoft Entra-ID till Azure Data Explorer

I det här avsnittet importerar vi de nyligen skapade JSON-filerna för Microsoft Entra ID-tjänsterna som tabeller i Azure Data Explorer för ytterligare analys. Vid den första importen med azure Data Explorer-webbgränssnittet skapar du tabellerna baserat på schemat som webbgränssnittet föreslår från varje JSON-fil.

När du har konfigurerat en databas i ditt Azure Data Explorer-kluster eller ett kostnadsfritt kluster, enligt beskrivningen i det första avsnittet i den här artikeln, navigerar du till den databasen.

  1. Logga in på Azure Data Explorer-webbgränssnittet.
  2. På den vänstra menyn väljer du Fråga.

Följ sedan de här stegen för varje exporterad JSON-fil för att hämta dina exporterade data till den Azure Data Explorer-databasen som en ny tabell.

  1. Högerklicka på databasnamnet för den databas där du vill mata in data. Välj Hämta data.

    Skärmbild av frågefliken med högerval i en databas och dialogrutan Hämta alternativ öppen.

  2. Välj datakällan i den tillgängliga listan. I den här självstudien matar du in data från en lokal fil.

  3. Välj + Ny tabell och ange ett tabellnamn baserat på namnet på JSON-filen som du importerar, till exempel om du importerar EntraUsers.json, namnge tabellen EntraUsers. Efter den första importen finns tabellen redan och du kan välja den som måltabell för en efterföljande import.

  4. Välj Bläddra efter filer, välj JSON-filen och välj Nästa.

  5. Azure Data Explorer identifierar schemat automatiskt och tillhandahåller en förhandsversion på fliken Inspektera. Välj Slutför om du vill skapa tabellen och importera data från filen. När data har matats in klickar du på Stäng.

  6. Upprepa vart och ett av föregående steg för var och en av de JSON-filer som du genererade i föregående avsnitt.

I slutet av dessa steg har du tabellerna EntraUsers, EntraGroups, EntraGroupMembership, Applications, AppRolesoch AppRoleAssignments i databasen.

4: Extrahera Microsoft Entra ID-styrningsdata med PowerShell

I det här avsnittet använder du PowerShell för att extrahera data från Microsoft Entra ID Governance Services. Om du inte har Microsoft Entra ID-styrning, Microsoft Entra ID P2 eller Microsoft Entra Suite fortsätter du i avsnittet använda Azure Data Explorer för att skapa anpassade rapporter.

För detta kan du behöva installera Microsoft Graph PowerShell-moduler för att extrahera Microsoft Entra ID-styrningsdata. Första gången din organisation använder dessa moduler för det här scenariot måste du ha rollen Global administratör så att Microsoft Graph PowerShell kan bevilja medgivande för användning i din klientorganisation. Efterföljande interaktioner kan använda en lägre privilegierad roll.

  1. Öppna PowerShell.
  2. Om du inte har alla Microsoft Graph PowerShell-moduler redan installerade installerar du nödvändiga Microsoft Graph-moduler. Följande moduler krävs för det här avsnittet i självstudien: Microsoft.Graph.Identity.Governance. Om du redan har dessa moduler installerade fortsätter du i nästa steg.
   $modules = @('Microsoft.Graph.Identity.Governance')
   foreach ($module in $modules) {
   Install-Module -Name $module -Scope CurrentUser -AllowClobber -Force
   }
  1. Importera modulerna till den aktuella PowerShell-sessionen.
  $modules = @('Microsoft.Graph.Identity.Governance')
  foreach ($module in $modules) {
  Import-Module -Name $module
  } 
  1. Anslut till Microsoft Graph. Det här avsnittet i självstudien visar hur du hämtar data från rättighetshantering och åtkomstgranskningar, och kräver därför behörighetsomfången AccessReview.Read.All och EntitlementManagement.Read.All. För andra rapporteringsanvändningsfall, till exempel för PIM- eller livscykelarbetsflöden, uppdaterar du sedan parametern Scopes med nödvändiga behörigheter. Mer information om behörigheter finns i Microsoft Graph-behörighetsreferens.
  Connect-MgGraph -Scopes "AccessReview.Read.All, EntitlementManagement.Read.All" -ContextScope Process -NoWelcome

Med det här kommandot uppmanas du att logga in med dina Microsoft Entra-autentiseringsuppgifter. När du har loggat in kan du behöva godkänna de behörigheter som krävs om det är första gången du ansluter eller om nya behörigheter krävs.

PowerShell-frågor för att extrahera Microsoft Entra ID-styrningsdata som behövs för att skapa anpassade rapporter i Azure Data Explorer

Du kan använda frågor för att extrahera Microsoft Entra ID-styrningsdata från Microsoft Graph med hjälp av PowerShell och exportera data till JSON-filer som importeras till Azure Data Explorer i följande avsnitt. Det kan finnas flera scenarier för att generera rapporter med den här typen av data, inklusive:

  • rapportering om historiska åtkomstgranskningar
  • rapportering om tilldelningar via berättigandehantering

Hämta definitionsdata för Åtkomstgranskningsschema

Generera en JSON-fil med definitionsnamn och ID:er för åtkomstgranskning som används för att skapa anpassade vyer i Azure Data Explorer. Exemplet innehåller alla åtkomstgranskningar, men ytterligare filtrering kan inkluderas om det behövs. För mer information, se och använd filterfrågeparametern.

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

Hämta åtkomstpaketdata för berättigandehantering

Generera en JSON-fil med åtkomstpaketnamn och ID:t som används för att skapa anpassade vyer i Azure Data Explorer. Exemplet innehåller alla åtkomstpaket, men ytterligare filtrering kan inkluderas om det behövs.

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

Få tilldelningsdata för hantering av behörighetsåtkomstpaket

Generera en JSON-fil med tilldelningar för att komma åt paket som används för att skapa anpassade vyer i Azure Data Explorer. Exemplet innehåller alla tilldelningar som levereras, men ytterligare filtrering kan inkluderas om det behövs.

   $apassignments1 = Get-MgEntitlementManagementAssignment -ExpandProperty target,accessPackage -filter "state eq 'Delivered'" -all
   $apassignments2 = @()
   # Iterate over each access package assignment
   foreach ($assignment in $apassignments1) {
      $apassignments2 += [PSCustomObject]@{
         Id = $assignment.Id
         ScheduleStartDateTime = $assignment.Schedule.StartDateTime -replace "\\/Date\((\d+)\)\\/", '$1' 
         AccessPackageId = $assignment.AccessPackage.Id
         AccessPackageDisplayName = $assignment.AccessPackage.DisplayName
         TargetId = $assignment.Target.Id
         TargetDisplayName = $assignment.Target.DisplayName
         TargetEmail = $assignment.Target.Email
         TargetObjectId = $assignment.Target.ObjectId
         TargetPrincipalName = $assignment.Target.PrincipalName
         TargetSubjectType = $assignment.Target.SubjectType
         SnapshotDate = $SnapshotDate
      }
   }
   $apassignments2 | ConvertTo-Json -Depth 10 | Set-Content "EntraAccessPackageAssignments.json"

5: Skapa tabeller och importera JSON-filer med data från Microsoft Entra ID-styrning till Azure Data Explorer

I det här avsnittet importerar vi de nyligen skapade JSON-filerna för Microsoft Entra ID-styrningstjänster till Azure Data Explorer, tillsammans med de data som redan har importerats för Microsoft Entra ID-tjänsterna, för ytterligare analys. Vid den första importen med azure Data Explorer-webbgränssnittet skapar du tabeller baserat på schema som webbgränssnittet föreslår från varje JSON-fil.

I ditt Azure Data Explorer-kluster eller kostnadsfria kluster går du till databasen som innehåller dina Microsoft Entra-ID-data.

  1. Logga in på Azure Data Explorer-webbgränssnittet.
  2. På den vänstra menyn väljer du Fråga.

Följ sedan de här stegen för varje exporterad JSON-fil från föregående avsnitt för att hämta dina exporterade data till den Azure Data Explorer-databasen som en ny tabell.

  1. Högerklicka på databasnamnet för den databas där du vill mata in data. Välj Hämta data.

    Skärmbild av frågefliken med högerval i en databas och dialogrutan Hämta alternativ öppen.

  2. Välj datakällan i den tillgängliga listan. I den här självstudien matar du in data från en lokal fil.

  3. Välj + Ny tabell och ange ett tabellnamn baserat på namnet på JSON-filen som du importerar. Efter den första importen finns tabellen redan och du kan välja den som måltabell för en efterföljande import.

  4. Välj Bläddra efter filer, välj JSON-filen och välj Nästa.

  5. Azure Data Explorer identifierar schemat automatiskt och tillhandahåller en förhandsversion på fliken Inspektera. Välj Slutför om du vill skapa tabellen och importera data från filen. När data har matats in klickar du på Stäng.

  6. Upprepa vart och ett av föregående steg för var och en av de JSON-filer som du genererade i föregående avsnitt.

I slutet av dessa steg har du tabellerna EntraAccessReviewDefinitions, EntraAccessPackagesoch EntraAccessPackageAssignments i databasen, utöver tabellerna som skapades i avsnitt 3.

6: Använda Azure Data Explorer för att skapa anpassade rapporter

Med de data som nu är tillgängliga i Azure Data Explorer är du redo att börja skapa anpassade rapporter baserat på dina affärsbehov.

Azure Data Explorer är ett kraftfullt dataanalysverktyg som är mycket skalbart och flexibelt och ger en idealisk miljö för att generera anpassade användaråtkomstrapporter. Azure Data Explorer använder Kusto Query Language (KQL).

Följande frågor innehåller exempel på vanliga rapporter, men du kan anpassa rapporterna så att de passar dina behov och skapa ytterligare rapporter.

Exempel 1: Generera approlltilldelningar för direkt- och grupptilldelningar för ett specifikt datum för ögonblicksbild

Den här rapporten ger en vy över vem som hade vilken åtkomst och när till målappen och kan användas för säkerhetsgranskningar, efterlevnadsverifiering och förståelse av åtkomstmönster inom organisationen.

Den här frågan riktar sig mot ett specifikt program i Microsoft Entra AD och analyserar rolltilldelningarna från och med ett visst datum. Frågan hämtar både direkta och gruppbaserade rolltilldelningar och sammanfogar dessa data med användarinformation från EntraUsers-tabellen och rollinformationen från AppRoles-tabellen. I frågan nedan anger du targetSnapshotDate till det snapshotDate värde som användes vid inläsning av data.

/// Define constants 
let targetServicePrincipalId = "<your service principal-id>"; // Target Service Principal ID 
let targetSnapshotDate = datetime("2024-01-13"); // Target Snapshot Date for the data 

// Extract role assignments for the target Service Principal and Snapshot Date 
let roleAssignments = AppRoleAssignments 
    | where ResourceId == targetServicePrincipalId and startofday(SnapshotDate) == targetSnapshotDate 
    | extend AppRoleIdStr = tostring(AppRoleId); // Convert AppRoleId to string for easier comparison 

// Prepare user data from EntraUsers table 
let users = EntraUsers 
    | project ObjectID, UserPrincipalName, DisplayName, ObjectIDStr = tostring(ObjectID); // Include ObjectID as string for joining 

// Prepare role data from AppRoles table 
let roles = AppRoles 
    | mvexpand AppRoles // Expand AppRoles to handle multiple roles 
    | extend RoleName = AppRoles.DisplayName, RoleId = tostring(AppRoles.Id) // Extract Role Name and ID 
    | project RoleId, RoleName; 
// Process direct assignments 
let directAssignments = roleAssignments 
    | join kind=inner users on $left.PrincipalId == $right.ObjectID // Join with EntraUsers on PrincipalId 
    | join kind=inner roles on $left.AppRoleIdStr == $right.RoleId // Join with roles to get Role Names 
    | project UserPrincipalName, DisplayName, CreatedDateTime, RoleName, AssignmentType = "Direct", SnapshotDate; 

// Process group-based assignments 

let groupAssignments = roleAssignments 
    | join kind=inner EntraGroupMembership on $left.PrincipalId == $right.GroupId // Join with Group Membership 
    | mvexpand Members // Expand group members 
    | extend MembersStr = tostring(Members) // Convert member ID to string 
    | distinct MembersStr, CreatedDateTime, AppRoleIdStr, SnapshotDate // Get distinct values 
    | join kind=inner users on $left.MembersStr == $right.ObjectIDStr // Join with EntraUsers for user details 
    | join kind=inner roles on $left.AppRoleIdStr == $right.RoleId // Join with roles for role names 
    | project UserPrincipalName, DisplayName, CreatedDateTime, RoleName, AssignmentType = "Group", SnapshotDate; 

// Combine results from direct and group-based assignments 
directAssignments 
| union groupAssignments 

Exempel 2: Skapa grundläggande granskningsrapport med Entra-data som visar vem som hade åtkomst till en app mellan dessa två datum

Den här rapporten ger en vy över vem som hade vilken åtkomst till målappen mellan två datum och kan användas för säkerhetsgranskningar, efterlevnadsverifiering och förståelse av åtkomstmönster i organisationen.

Den här frågan riktar sig mot ett specifikt program i Microsoft Entra-ID och analyserar rolltilldelningarna mellan två datum. Frågan hämtar direkta rolltilldelningar från tabellen AppRoleAssignments och sammanfogar dessa data med användarinformation från EntraUsers-tabellen och rollinformationen från tabellen AppRoles.

// Set the date range and service principal ID for the query 
let startDate = datetime('2024-01-01'); 
let endDate = datetime('2024-03-14'); 
let servicePrincipalId = "<your service principal-id>"; 

// Query AppRoleAssignments for the specified service principal within the date range 
AppRoleAssignments 
| where ResourceId == servicePrincipalId and 
    todatetime(CreatedDateTime) between (startDate .. endDate) 

// Extend AppRoleId to a string for joining 
| extend AppRoleIdStr = tostring(AppRoleId) 

// Project the necessary fields for the join with EntraUsers and AppRoles 
| project PrincipalId, AppRoleIdStr, CreatedDateTime 

// Join with EntraUsers to get user details 
| join kind=inner (EntraUsers | project UserPrincipalName, DisplayName, ObjectID) on $left.PrincipalId == $right.ObjectID 

// Join with AppRoles to get the role display names 
| join kind=inner ( 
  AppRoles | mvexpand AppRoles | project RoleIdStr = tostring(AppRoles.Id), RoleDisplayName = tostring(AppRoles.DisplayName) 
) on $left.AppRoleIdStr == $right.RoleIdStr 

// Final projection of the report with the current date and time 
| project UserPrincipalName, DisplayName, RoleDisplayName, CreatedDateTime, ReportDate = now() 

Exempel 3: Hämta användare som lagts till i en app mellan två datum för ögonblicksbild av data

Dessa rapporter ger en vy över vilka användare som fick en approlltilldelning till målprogrammet mellan två datum. Dessa rapporter kan användas för att spåra ändringar i appåtkomst över tid.

Den här frågan riktar sig till ett specifikt program i Microsoft Entra-ID och ändringar i rolltilldelningarna mellan ett start- och slutdatum.

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

Konfigurera pågående importer

Den här självstudien illustrerar en engångsprocess för dataextrahering, transformering och inläsning (ETL) för att fylla i Azure Data Explorer med en enda ögonblicksbild i rapporteringssyfte. För löpande rapportering eller för att jämföra ändringar över tid kan du automatisera processen med att fylla i Azure Data Explorer från Microsoft Entra, så att databasen fortsätter att ha aktuella data.

Du kan använda Azure Automation, en Azure-molntjänst, som värd för de PowerShell-skript som behövs för att extrahera data från Microsoft Entra ID och Microsoft Entra ID Governance. Mer information finns i Automatisera Microsoft Entra ID-styrningsuppgifter med Azure Automation.

Du kan också använda Azure-funktioner eller kommandoradsverktyg som lightingest för att hämta data och fylla i en redan befintlig tabell. Mer information finns i använda LightIngest för att mata in data i Azure Data Explorer.

Om du till exempel vill läsa in en fil EntraAccessPackages.json i den aktuella katalogen i tabellen EntraAccessPackages som den inloggade användaren:

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

Hämta data från andra källor

Du kan också skapa ytterligare tabeller i Azure Data Explorer för att mata in data från andra källor. Om data finns i en JSON-fil, liknande exemplen ovan eller en CSV-fil, kan du skapa tabellen när du först hämta data från filen. När tabellen är skapad kan du också använda LightIngest för att mata in data i Azure Data Explorer från en JSON- eller CSV-fil.

Mer information om datainmatning finns i Översikt över datainmatning i Azure Data Explorer.

Exempel 4: Kombinera apptilldelningar från en Entra och en andra källa för att skapa en rapport över alla användare som hade åtkomst till ett program mellan två datum

Den här rapporten visar hur du kan kombinera data från två separata system för att skapa anpassade rapporter i Azure Data Explorer. Den aggregerar data om användare, deras roller och andra attribut från två system till ett enhetligt format för analys eller rapportering.

Det här exemplet förutsätter att det finns en tabell med namnet salesforceAssignments som har fyllts i genom att hämta data från ett annat program.

// Define the date range and service principal ID for the query 

let startDate = datetime("2023-06-01"); 
let endDate = datetime("2024-03-13"); 
let servicePrincipalId = "<your service principal-id>"; 

// Pre-process AppRoleAssignments with specific filters and projections 
let processedAppRoleAssignments = AppRoleAssignments 
    | where ResourceId == servicePrincipalId and todatetime(CreatedDateTime) between (startDate .. endDate) 
    | extend AppRoleId = tostring(AppRoleId) 
    | project PrincipalId, AppRoleId, CreatedDateTime, ResourceDisplayName; // Exclude DeletedDateTime and keep ResourceDisplayName 

// Pre-process AppRoles to get RoleDisplayName for each role 
let processedAppRoles = AppRoles 
    | mvexpand AppRoles 
    | project AppRoleId = tostring(AppRoles.Id), RoleDisplayName = tostring(AppRoles.DisplayName); 

// Main query: Process EntraUsers by joining with processed role assignments and roles 
EntraUsers 
    | join kind=inner processedAppRoleAssignments on $left.ObjectID == $right.PrincipalId // Join with role assignments 
    | join kind=inner processedAppRoles on $left.AppRoleId == $right.AppRoleId // Join with roles to get display names 

    // Summarize to get the latest record for each unique combination of user and role attributes 
    | summarize arg_max(AccountEnabled, *) by UserPrincipalName, DisplayName, tostring(EmployeeId), Department, JobTitle, ResourceDisplayName, RoleDisplayName, CreatedDateTime 

    // Final projection of relevant fields including source indicator and report date 
    | project UserPrincipalName, DisplayName, EmployeeId=tostring(EmployeeId), Department, JobTitle, AccountEnabled=tostring(AccountEnabled), ResourceDisplayName, RoleDisplayName, CreatedDateTime, Source="EntraUsers", ReportDate = now() 

// Union with processed salesforceAssignments to create a combined report 
| union ( 
    salesforceAssignments 

    // Project fields from salesforceAssignments to align with the EntraUsers data structure 
    | project UserPrincipalName = UserName, DisplayName = Name, EmployeeId = tostring(EmployeeId), Department, JobTitle, AccountEnabled = "N/A", ResourceDisplayName = AppName, RoleDisplayName = Role, CreatedDateTime, Source = "salesforceAssignments", ReportDate = now() 
) 

Nästa steg