Sdílet prostřednictvím


Kurz: Vytváření přizpůsobených sestav v Azure Data Exploreru pomocí dat z Microsoft Entra

V tomto kurzu se naučíte, jak vytvářet přizpůsobené sestavy v Azure Data Exploreru pomocí dat ze služeb Microsoft Entra ID a Microsoft Entra ID Governance.

Tento kurz doplňuje možnosti vytváření sestav, jako je archivace a vytváření sestav pomocípro správu nároků a služby Azure Monitor, která se zaměřuje na export protokolu auditu do služby Azure Monitor pro uchovávání a analýzu. Ve srovnání s tím export dat Microsoft Entra ID do Azure Data Exploreru umožňuje flexibilitu při vytváření vlastních sestav o objektech Microsoft Entra, včetně historických a odstraněných objektů.

Použití Azure Data Exploreru také umožňuje agregaci dat z dalších zdrojů s masivní škálovatelností, flexibilními schématy a zásadami uchovávání informací. Azure Data Explorer je zvlášť užitečný v případě, že potřebujete uchovávat data uživatelského přístupu po dobu let, provádět ad hoc šetření nebo spouštět vlastní dotazy na přístupová data.

Tento kurz ukazuje, jak zobrazit konfigurační, uživatele a přístupová práva exportovaná z Microsoft Entra spolu s daty exportovanými z jiných zdrojů, jako jsou aplikace s přístupovými právy ve svých vlastních databázích SQL. Potom můžete pomocí dotazovacího jazyka Kusto (KQL) v Azure Data Exploreru vytvářet vlastní sestavy na základě požadavků vaší organizace.

V tomto kurzu se naučíte:

  • Nastavte Azure Data Explorer v předplatném Azure nebo vytvořte bezplatný cluster.
  • Extrahujte data z MICROSOFT Entra ID pomocí skriptů PowerShellu a Microsoft Graphu.
  • Vytvořte tabulky a importujte data z Microsoft Entra ID do Azure Data Exploreru.
  • Extrahujte data ze zásad správného řízení Microsoft Entra ID.
  • Vytvářejte tabulky a importujte data z zásad správného řízení MICROSOFT Entra ID do Azure Data Exploreru.
  • Sestavte vlastní dotaz pomocí KQL.
  • Dotazování dat ve službě Azure Monitor

Na konci tohoto kurzu budete moct vyvíjet přizpůsobená zobrazení přístupových práv a oprávnění uživatelů. Tato zobrazení zahrnují více aplikací prostřednictvím nástrojů podporovaných Microsoftem. Můžete také přenést data z databází nebo aplikací jiných společností než Microsoft, abyste mohli nahlásit tato přístupová práva a oprávnění.

Požadavky

Pokud s Azure Data Explorerem začínáte a chcete se seznámit se scénáři, které tento kurz ukazuje, můžete získat bezplatný cluster Azure Data Exploreru. Pro produkční použití se smlouvou o úrovni služeb pro Azure Data Explorer potřebujete předplatné Azure k hostování celého clusteru Azure Data Exploreru.

Určete, jaká data chcete zahrnout do sestav. Skripty v tomto kurzu poskytují ukázky s konkrétními daty od uživatelů, skupin a aplikací z Microsoft Entra. Tyto ukázky ilustrují typy sestav, které můžete vygenerovat pomocí tohoto přístupu, ale vaše konkrétní potřeby vytváření sestav se mohou lišit a vyžadovat různá nebo další data. Můžete začít s těmito objekty a v průběhu času přenést další druhy objektů Microsoft Entra.

  • Tento kurz ukazuje načtení dat z Microsoft Entra jako přihlášeného uživatele. Ujistěte se, že máte požadovaná přiřazení rolí. K exportu typu dat Microsoft Entra, se kterými chcete pracovat, potřebujete role se správnými oprávněními:

    • Uživatelská data: globální správce, správce privilegovaných rolí, správce uživatelů
    • Data skupiny: Globální správce, Správce privilegovaných rolí, Správce skupin
    • Aplikace a přiřazení rolí aplikací: globální správce, správce privilegovaných rolí, správce aplikací, správce cloudových aplikací
  • Microsoft Graph PowerShell potřebuje souhlas s načtením objektů Microsoft Entra prostřednictvím Microsoft Graphu. Příklady v tomto kurzu vyžadují delegovaná oprávnění User.Read.All, Group.Read.All, Application.Read.Alla Directory.Read.All. Pokud plánujete načíst data pomocí automatizace bez přihlášeného uživatele, odsouhlaste místo toho odpovídající oprávnění aplikace. Další informace najdete v tématu Referenční informace o oprávněních Microsoft Graphu.

    Pokud jste microsoft Graph PowerShellu ještě neudělili souhlas s těmito oprávněními, musíte být globálním správcem, abyste mohli tuto operaci souhlasu provést.

  • Tento návod neuvádí vlastní atributy zabezpečení. Globální správce a další role správců ve výchozím nastavení nezahrnují oprávnění ke čtení vlastních atributů zabezpečení od uživatelů Microsoft Entra. Pokud plánujete získat vlastní atributy zabezpečení, možná budete potřebovat více rolí a oprávnění.

  • Na počítači, na kterém je nainstalovaný Microsoft Graph PowerShell, se ujistěte, že máte přístup k zápisu do adresáře systému souborů. V tomto adresáři nainstalujete požadované moduly Microsoft Graph PowerShellu a exportovaná data Microsoft Entra se uloží.

  • Pokud chcete tato data také začlenit do Azure Data Exploreru, ujistěte se, že máte oprávnění načítat data z jiných zdrojů dat než Microsoft Entra.

Nastavení Azure Data Exploreru

Pokud jste azure Data Explorer ještě nepoužívali, musíte ho nejdřív nastavit. Můžete vytvořit bezplatný cluster bez předplatného Azure nebo platební karty. Nebo můžete vytvořit úplný cluster, který vyžaduje předplatné Azure. Pokud chcete začít, přečtěte si rychlý start: Vytvoření clusteru a databáze Azure Data Exploreru.

Extrahování dat ID Microsoft Entra pomocí PowerShellu

V této části nainstalujete moduly Microsoft Graph PowerShellu. V PowerShellu se připojit k Microsoft Graphu k extrakci dat Microsoft Entra ID.

Při prvním použití těchto modulů v tomto scénáři musíte mít roli globálního správce, abyste microsoft Graph PowerShellu povolili udělit souhlas pro použití ve vašem tenantovi. Následné interakce mohou využívat roli s nižšími oprávněními.

  1. Otevřete PowerShell.

  2. Pokud ještě nemáte nainstalované všechny moduly Microsoft Graph PowerShellu , nainstalujte požadované moduly Microsoft Graphu. V této části kurzu jsou vyžadovány následující moduly: Microsoft.Graph.Authentication, Microsoft.Graph.Users, Microsoft.Graph.Groups, Microsoft.Graph.Applicationsa Microsoft.Graph.DirectoryObjects. Pokud už máte tyto moduly nainstalované, tento krok přeskočte.

       $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. Naimportujte moduly do aktuální relace PowerShellu:

      $modules = @('Microsoft.Graph.Users', 'Microsoft.Graph.Groups', 'Microsoft.Graph.Applications', 'Microsoft.Graph.DirectoryObjects') 
      foreach ($module in $modules) { 
      Import-Module -Name $module 
      } 
    
  4. Připojte se k Microsoft Graphu. Tato část kurzu ukazuje čtení uživatelů, skupin a aplikací, takže vyžaduje rozsahy oprávnění User.Read.All, Group.Read.All, Application.Read.Alla Directory.Read.All. Další informace o oprávněních najdete v tématu referenční informace k oprávněním Microsoft Graphu.

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

    Tento příkaz vás vyzve k přihlášení pomocí přihlašovacích údajů Microsoft Entra. Po přihlášení možná budete muset udělit souhlas s požadovanými oprávněními, pokud se jedná o první připojení nebo pokud jsou vyžadována nová oprávnění.

Dotazy PowerShell k extrahování dat Microsoft Entra ID pro vytváření vlastních sestav

Následující dotazy extrahují data MICROSOFT Entra ID z Microsoft Graphu pomocí PowerShellu a exportují data do souborů JSON. Tyto soubory naimportujete do Azure Data Exploreru v pozdější části tohoto kurzu.

Mezi scénáře generování sestav s tímto typem dat patří:

  • Auditor chce vidět zprávu se seznamem členů pro 10 skupin seřazené podle oddělení členů.
  • Auditor chce zobrazit sestavu všech uživatelů, kteří měli přístup k aplikaci mezi dvěma daty.

Data můžete také přenést do Azure Data Exploreru ze zdrojů mimo Microsoft Entra. Scénář pro tuto funkci může být následující:

  • Správce chce zobrazit všechny uživatele přidané do aplikace z Microsoft Entra ID a jejich přístupových práv ve vlastním úložišti aplikace, jako je databáze SQL.

Tyto typy sestav nejsou integrované do Microsoft Entra ID. Tyto sestavy ale můžete vytvořit sami extrahováním dat z ID Microsoft Entra a kombinováním dat pomocí vlastních dotazů v Azure Data Exploreru. Tento kurz tento proces řeší později v části Přenést data z jiných zdrojů.

V tomto kurzu extrahujete data MICROSOFT Entra ID z těchto oblastí:

  • Informace o uživateli, jako jsou zobrazované jméno, hlavní název uživatele (UPN) a podrobnosti o úloze
  • Informace o skupině, včetně jejich členství
  • Aplikace a přiřazení k aplikačním rolím

Tato datová sada umožňuje provádět širokou sadu dotazů, které se zabývá tím, kdo obdržel přístup k aplikaci, s informacemi o roli aplikace a přidruženým časovým rámcem. Mějte na paměti, že se jedná o ukázkové dotazy a vaše data a konkrétní požadavky se můžou lišit od toho, co vidíte tady.

Poznámka:

U větších tenantů může docházet k omezení a výskytu chyb 429, které zpracovává modul Microsoft Graph. Azure Data Explorer může také omezit velikosti nahrávání souborů.

V těchto skriptech PowerShellu exportujete vybrané vlastnosti z objektů Microsoft Entra do souborů JSON. Údaje z těchto exportovaných vlastností se používají pro tvorbu vlastních sestav v Azure Data Explorer.

Do těchto příkladů jsou zahrnuty konkrétní vlastnosti, protože tato data používáme k ilustraci typů sestav, které můžete vytvořit v Azure Data Exploreru. Vzhledem k tomu, že vaše specifické potřeby vytváření sestav se pravděpodobně liší od toho, co ukazuje tento návod, měli byste do těchto skriptů zahrnout specifické vlastnosti, které chcete zobrazit ve svých sestavách. Můžete ale postupovat podle stejného vzoru, který je zobrazený, abyste mohli vytvářet skripty.

Výběr data snímku

Pevně zakódované datum snímku identifikuje data v souboru JSON s konkrétním datem. V Azure Data Exploreru ho můžete použít k sledování podobných datových sad v průběhu času. Datum snímku je také užitečné při porovnávání změn dat mezi dvěma daty snímků.

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

Získání uživatelských dat Microsoft Entra

Tento skript exportuje vybrané vlastnosti z objektu uživatele Microsoft Entra do souboru JSON. Tento soubor a další data z jiných souborů JSON naimportujete do Azure Data Exploreru v pozdější části tohoto kurzu.

  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 

Získejte data skupiny

Vygenerujte soubor JSON s názvy skupin a ID, které se používají k vytváření vlastních zobrazení v Azure Data Exploreru. Ukázka zahrnuje všechny skupiny, ale v případě potřeby můžete zahrnout další filtrování. Pokud filtrujete tak, aby zahrnovaly pouze určité skupiny, můžete do skriptu zahrnout logiku, abyste zkontrolovali vnořené skupiny.

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

Získání dat členství ve skupinách

Vygenerujte soubor JSON s členstvím ve skupině, který se používá k vytváření vlastních zobrazení v Azure Data Exploreru. Ukázka zahrnuje všechny skupiny, ale v případě potřeby můžete zahrnout další filtrování.

    # 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 "EntraGroupMembership.json" 

Získání dat aplikace a instančního objektu

Vygenerujte soubor JSON se všemi aplikacemi a odpovídajícími instančními objekty v tenantovi. Tato data naimportujete do Azure Data Exploreru v pozdější části tohoto kurzu, abyste mohli generovat vlastní sestavy související s aplikacemi na základě těchto dat.

    # 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)'" 
      [pscustomobject]@{ 
        Name        = $app.DisplayName 
        ApplicationId   = $app.AppId 
        ServicePrincipalId = $sp.Id 
        SnapshotDate = $SnapshotDate
      } 
    } | ConvertTo-Json -Depth 10 | Set-Content "Applications.json" 

Získat data o roli aplikace

Vygenerujte soubor JSON všech rolí aplikací pro podnikové aplikace v Microsoft Entra. Po importu těchto dat do Azure Data Exploreru je použijete k vygenerování sestav, které zahrnují přiřazení rolí aplikací pro uživatele.

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

Získat data přiřazení rolí aplikace

Vygenerujte soubor JSON všech přiřazení rolí aplikací uživatelů v tenantovi:

    $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]@{ 
          AppRoleId      = $_.AppRoleId 
          CreatedDateTime   = $createdDateTime 
          PrincipalDisplayName = $_.PrincipalDisplayName 
          PrincipalId     = $_.PrincipalId 
          ResourceDisplayName = $_.ResourceDisplayName 
          ResourceId      = $_.ResourceId 
          SnapshotDate     = $SnapshotDate
        } 
      } 
    } 
    $result | ConvertTo-Json -Depth 10 | Out-File "AppRoleAssignments.json" 

Vytváření tabulek a import souborů JSON s daty z ID Microsoft Entra do Azure Data Exploreru

V této části naimportujete nově vytvořené soubory JSON pro služby Microsoft Entra ID jako tabulky v Azure Data Exploreru pro další analýzu. Při prvním importu prostřednictvím webového uživatelského rozhraní Azure Data Exploreru vytvoříte tabulky na základě schémat, která webové uživatelské rozhraní navrhuje z každého souboru JSON.

  1. Přihlaste se k webovému uživatelskému rozhraní Azure Data Exploreru.

  2. Přejděte do databáze, kterou jste nastavili v clusteru Azure Data Exploreru nebo bezplatném clusteru dříve v tomto kurzu.

  3. V levém menu vyberte dotaz.

  4. Pokud chcete získat exportovaná data do databáze Azure Data Exploreru jako novou tabulku, postupujte podle těchto kroků pro každý exportovaný soubor JSON:

    1. Klikněte pravým tlačítkem na název databáze, do které chcete data ingestovat. Pak vyberte Načíst data.

      Snímek obrazovky karty dotazu, se zvýrazněnou místní nabídkou pro databázi a příkazem pro získání dat.

    2. Vyberte zdroj dat z dostupného seznamu. V tomto kurzu ingestujete data z místního souboru, takže vyberte Místní soubor.

    3. Vyberte + Nová tabulka a zadejte název tabulky na základě názvu souboru JSON, který importujete. Pokud například importujete EntraUsers.json, pojmenujte tabulku EntraUsers. Po prvním importu už tabulka existuje a můžete ji vybrat jako cílovou tabulku pro následný import.

    4. Vyberte Vyhledat soubory, vyberte soubor JSON a pak vyberte Další.

    5. Azure Data Explorer automaticky zjistí schéma a na záložce Zkontrolovat zobrazí náhled. Vyberte možnost Dokončit pro vytvoření tabulky a importování dat z daného souboru. Po ingestování dat vyberte Zavřít.

    6. Opakujte předchozí kroky pro každý ze souborů JSON, které jste vygenerovali v předchozí části.

Na konci těchto kroků máte tabulky EntraUsers, EntraGroups, EntraGroupMembership, Applications, AppRolesa AppRoleAssignments v databázi.

Extrahovat data správy identit Microsoft Entra pomocí PowerShellu

V této části použijete PowerShell k extrakci dat ze služeb zásad správného řízení Microsoft Entra ID. Pokud nemáte Microsoft Entra ID Governance, Microsoft Entra ID P2 nebo Microsoft Entra Suite, pokračujte v části Použití Azure Data Exploreru k vytváření vlastních sestav.

V následujících krocích možná budete muset nainstalovat moduly Microsoft Graph PowerShellu k extrakci dat zásad správného řízení Microsoft Entra ID. Při prvním použití těchto modulů v tomto scénáři musíte mít roli globálního správce, abyste microsoft Graph PowerShellu povolili udělit souhlas pro použití ve vašem tenantovi. Následné interakce mohou používat roli s nižší úrovní oprávnění.

  1. Otevřete PowerShell.

  2. Pokud ještě nemáte nainstalované všechny moduly Microsoft Graph PowerShellu , nainstalujte požadované moduly Microsoft Graphu. Pro tuto část kurzu je vyžadován následující modul: Microsoft.Graph.Identity.Governance. Pokud už máte nainstalované moduly, přejděte k dalšímu kroku.

       $modules = @('Microsoft.Graph.Identity.Governance')
       foreach ($module in $modules) {
       Install-Module -Name $module -Scope CurrentUser -AllowClobber -Force
       }
    
  3. Naimportujte moduly do aktuální relace PowerShellu:

      $modules = @('Microsoft.Graph.Identity.Governance')
      foreach ($module in $modules) {
      Import-Module -Name $module
      } 
    
  4. Připojte se k Microsoft Graphu. Tato část kurzu ukazuje načtení dat ze správy nároků a kontrol přístupu, takže vyžaduje rozsahy oprávnění AccessReview.Read.All a EntitlementManagement.Read.All. V případě jiných případů použití sestav, jako je například u pracovních postupů PIM (Privileged Identity Management) nebo pracovních postupů životního cyklu, aktualizujte parametr Scopes potřebnými oprávněními. Další informace o oprávněních najdete v tématu referenční informace k oprávněním Microsoft Graphu.

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

    Tento příkaz vás vyzve k přihlášení pomocí přihlašovacích údajů Microsoft Entra. Po přihlášení možná budete muset udělit souhlas s požadovanými oprávněními, pokud se jedná o první připojení nebo pokud jsou vyžadována nová oprávnění.

Dotazy PowerShell pro extrahování dat správy Microsoft Entra ID pro vlastní sestavy

Následující dotazy extrahují data zásad správného řízení ID Microsoft Entra z Microsoft Graphu pomocí PowerShellu a exportují data do souborů JSON. Tyto soubory naimportujete do Azure Data Exploreru v pozdější části tohoto kurzu.

Mezi scénáře generování sestav s tímto typem dat patří:

  • Podávání zpráv o historických kontrolách přístupu
  • Reportování o přiřazeních správou nároků.

Získání dat definice plánu kontroly přístupu

Vygenerujte soubor JSON s názvy definic a ID kontroly přístupu, které se používají k vytváření vlastních zobrazení v Azure Data Exploreru. Ukázka obsahuje všechny kontroly přístupu, ale v případě potřeby můžete zahrnout další filtrování. Další informace naleznete v tématu Použití parametru dotazu filtru.

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

Získání dat instance pro kontroly přístupu

Pokud chcete exportovat všechny definice kontroly přístupu, instance a rozhodnutí do formátu strukturované složky pomocí PowerShellu, můžete použít rozhraní Microsoft Graph API. Tento přístup zajišťuje, že data jsou uspořádaná hierarchicky a zarovnají se se zadanou strukturou složek.

Než začnete, mějte na paměti následující body:

  • Ujistěte se, že máte potřebná oprávnění pro přístup ke kontrole dat v Microsoft Graphu.
  • V závislosti na objemu dat se může doba provádění skriptu lišit. Podle potřeby sledujte proces a upravte parametry.

Chcete-li získat data instance:

  1. Stáhněte si Export_Access_Reviews.ps1 skript a uložte ho místně.

  2. V Průzkumníku souborů odblokujte skript, abyste ho mohli spustit v PowerShellu.

  3. Spusťte následující příkaz. Výstup umístí všechna data do tří podsložek: ReviewInstances, ReviewInstanceDecisionItemsa ReviewInstanceContactedReviewers.

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

Získání dat přístupového balíčku pro správu nároků

Vygenerujte soubor JSON s názvy a ID přístupových balíčků, které se používají k vytváření vlastních zobrazení v Azure Data Exploreru. Ukázka obsahuje všechny přístupové balíčky, ale v případě potřeby můžete zahrnout další filtrování.

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

Získejte data o přiřazení přístupového balíčku pro řízení oprávnění

Vygenerujte soubor JSON s přiřazeními pro přístup k balíčkům, které se používají k vytváření vlastních zobrazení v Azure Data Exploreru. Ukázka zahrnuje všechny úkoly, které byly odevzdány, ale můžete přidat další filtrování, pokud je to nutné.

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

Vytváření tabulek a import souborů JSON s daty z zásad správného řízení ID Microsoft Entra do Azure Data Exploreru

V této části naimportujete nově vytvořené soubory JSON pro služby zásad správného řízení Microsoft Entra ID do Azure Data Exploreru pro další analýzu. Tyto soubory spojují data, která jste už naimportovali pro služby Microsoft Entra ID. Při prvním importu prostřednictvím webového uživatelského rozhraní Azure Data Exploreru vytvoříte tabulky založené na schématech, která webové uživatelské rozhraní navrhuje z každého souboru JSON.

  1. Přihlaste se k webovému uživatelskému rozhraní Azure Data Exploreru.

  2. V clusteru Azure Data Exploreru nebo v bezplatném clusteru přejděte do databáze, ve které jsou uložená data VAŠEHO ID Microsoft Entra.

  3. V nabídce vlevo vyberte Query.

  4. Pokud chcete získat exportovaná data do databáze Azure Data Exploreru jako novou tabulku, postupujte podle těchto kroků pro každý exportovaný soubor JSON:

    1. Pravým tlačítkem myši klikněte na název databáze, do které chcete data ingestovat. Pak vyberte Načíst data.

      snímek obrazovky z karty dotazu s místní nabídkou pro databázi a zvýrazněným příkazem pro získání dat

    2. Vyberte zdroj dat z dostupného seznamu. V tomto kurzu ingestujete data z místního souboru, takže vyberte Místní soubor.

    3. Vyberte + Nová tabulka a zadejte název tabulky na základě názvu souboru JSON, který importujete. Po prvním importu už tabulka existuje a můžete ji vybrat jako cílovou tabulku pro následný import.

    4. Vyberte Vyhledat soubory, vyberte soubor JSON a pak vyberte Další.

    5. Azure Data Explorer automaticky zjistí schéma a na kartě Zkontrolovat zobrazí náhled. Výběrem možnosti Dokončit vytvořte tabulku a importujte data z daného souboru. Po ingestování dat vyberte Zavřít.

    6. Opakujte předchozí kroky pro každý ze souborů JSON, které jste vygenerovali v předchozí části, pro každou ze složek.

    7. Pokud je ve složce mnoho souborů, můžete po vytvoření tabulky použít lightingest k importu ostatních souborů.

Na konci těchto kroků máte tabulky EntraAccessReviewDefinitions, EntraAccessPackages, EntraAccessPackageAssignments, ReviewInstances, ReviewInstanceDecisionItemsa ReviewInstanceContactedReviewers v databázi, kromě tabulek, které jste vytvořili dříve.

Použijte Azure Data Explorer k vytváření vlastních sestav

S daty, která jsou teď dostupná v Azure Data Exploreru, jste připraveni začít vytvářet přizpůsobené sestavy na základě vašich obchodních požadavků:

  1. Přihlaste se k webovému uživatelskému rozhraní Azure Data Exploreru.

  2. V nabídce vlevo vyberte Dotaz.

Následující dotazy poskytují příklady běžných sestav, ale tyto sestavy můžete přizpůsobit tak, aby vyhovovaly vašim potřebám, a vytvářet další sestavy.

Můžete také zobrazit sestavy v Excelu, když vyberete kartu Export a poté zvolíte možnost Otevřít v Excelu.

Příklad: Vytvořit přiřazení rolí aplikace pro přímá přiřazení a skupinová přiřazení pro konkrétní datum vytvoření snímku

Tato sestava poskytuje zobrazení, kdo měl k cílové aplikaci přístup a kdy. Můžete ho použít pro audity zabezpečení, ověření dodržování předpisů a pochopení vzorů přístupu v rámci organizace.

Následující dotaz cílí na konkrétní aplikaci v rámci ID Microsoft Entra a analyzuje přiřazení rolí k určitému datu. Dotaz načte přímé i skupinové přiřazení rolí. Tato data sloučí s podrobnostmi o uživatelích z tabulky EntraUsers a informací o rolích z tabulky AppRoles. V dotazu nastavte targetSnapshotDate na hodnotu snapshotDate, kterou jste použili při načítání dat.

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

Příklad: Vytvoření základní auditorské zprávy pomocí dat Microsoft Entra, které ukazují, komu byl přístup k aplikaci umožněn mezi dvěma daty

Tato sestava poskytuje přehled o tom, kdo měl jaký přístup k cílové aplikaci mezi dvěma daty. Můžete ho použít pro audity zabezpečení, ověření dodržování předpisů a pochopení vzorů přístupu v rámci organizace.

Následující dotaz cílí na konkrétní aplikaci v rámci ID Microsoft Entra a analyzuje přiřazení rolí mezi dvěma daty. Dotaz načte přímé přiřazení rolí z tabulky AppRoleAssignments a sloučí tato data s podrobnostmi o uživateli z tabulky EntraUsers a informací o rolích z tabulky 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() 

Příklad: Zobrazení uživatelů přidaných do aplikace mezi dvěma daty snímků

Tyto sestavy poskytují zobrazení, kterým uživatelům byla přiřazena role aplikace cílové aplikace mezi dvěma daty. Tyto zprávy můžete použít ke sledování změn v přístupu k aplikacím v průběhu času.

Tento dotaz cílí na konkrétní aplikaci v rámci ID Microsoft Entra a změní přiřazení rolí mezi počátečním a koncovým datem:

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

Příklad: Různé dotazy, které používají kontroly přístupu

Zobrazení informací o dokončení kontroly přístupu a informací o časovém průběhu

Po nahrání dat zkontrolujte pomocí následujících dotazů Kusto:

  • Kdy byl dokončen poslední cyklus kontroly přístupu? Jak dlouho to trvalo?

    ReviewInstances
    | summarize LastCompletedDate = max(ReviewInstanceEndDateTime),  
                ReviewDuration = datetime_diff('minute', max(ReviewInstanceEndDateTime), min(ReviewInstanceStartDateTime))  
    
  • Provádí se proces kontroly přístupu včas (například čtvrtletně)?

    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
    

Zobrazení účasti a zapojení v přezkoumání přístupu

  • Kdo byli přiřazeni jako recenzenti?

    ReviewInstanceContactedReviewers
    | project AccessReviewDefinitionId, AccessReviewInstanceId, ReviewerName = DisplayName, ReviewerUserPrincipalName = UserPrincipalName, CreatedDateTime
    
  • Kteří recenzenti se aktivně účastnili a poskytli odpovědi?

    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
    
  • Jaké procento revidujících odpovědělo na žádost o kontrolu přístupu?

    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  
    
  • Kdy každý kontrolor dokončil své úkoly?

    ReviewInstanceDecisionItems 
    | where Decision in ("Approve", "Deny") 
    | project AccessReviewDefinitionId, AccessReviewInstanceId, ReviewerName = ReviewedBy_DisplayName, ReviewerUserPrincipalName = ReviewedBy_UserPrincipalName, ReviewedDateTime  
    
  • Kteří recenzenti neudělali žádná rozhodnutí?

    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
    
  • Jaké procento revidujících neagovalo?

    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  
    
  • Aktivovaly se připomenutí pro nereagující revidující nebo nevyřízená rozhodnutí?

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

Zobrazení změn uživatelů a přístupu, které jsou výsledkem kontrol přístupu

  • Kdo během kontroly přístupu ztratil přístup ke konkrétním prostředkům?

    ReviewInstanceDecisionItems 
    | where Decision == "Deny" 
    | project User = Principal_DisplayName, Resource = Resource_DisplayName, Decision, Justification 
    
  • Byli uživatelé označeni kvůli nečinnosti?

    ReviewInstanceDecisionItems
    | where Insights contains "inactive"
    | project User = Principal_DisplayName, Resource = Resource_DisplayName, Insights, Decision
    
  • Jaké bylo datum odebrání přístupu a důvod ztráty přístupu?

    ReviewInstanceDecisionItems
    | where Decision == "Deny"
    | project User = Principal_DisplayName, Resource=Resource_DisplayName, AccessRemovalDate = AppliedDateTime, Reason = Justification  
    
  • Kteří uživatelé neudělali žádná rozhodnutí?

    ReviewInstanceDecisionItems
    | where Decision == "NotReviewed"
    | project User = Principal_DisplayName, Resource=Resource_DisplayName
    
  • Které recenze neměly žádné recenzenty?

    ReviewInstances
    | join kind=leftanti (
        ReviewInstanceContactedReviewers
        | summarize by AccessReviewInstanceId
    ) on $left.ReviewInstanceId == $right.AccessReviewInstanceId  
    
  • U kterých recenzí nebyli žádní uživatelé?

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

Shrnutí rozhodnutí o kontrole přístupu

  • Jaká rozhodnutí udělali uživatelé: schváleno, odepřeno nebo beze změny?

    ReviewInstanceDecisionItems
    | summarize count() by Decision
    
  • Jaký počet uživatelů byl schválen nebo odepřen přístup?

    ReviewInstanceDecisionItems
    | summarize ApprovedCount = countif(Decision == "Approve"), DeniedCount = countif(Decision == "Deny")
    
  • Byly zdokumentované důvody schválení?

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

Potvrzení kvality kontroly přístupu a kontrola úplnosti

  • Zvažovaly se odvolání přístupu pro neaktivní uživatele?

    ReviewInstanceDecisionItems
    | where Insights contains "inactive" and Decision == "Deny"
    | project User = Principal_DisplayName, Decision
    
  • Byl nějaký přístup neodebrán správně?

    ReviewInstanceDecisionItems
    | where ApplyResult != "New" and ApplyResult != "AppliedSuccessfully"
    
  • Zdokumentovali kontroloři svá rozhodnutí?

    ReviewInstanceDecisionItems
    | where isnotempty(Justification)
    | summarize count() by ReviewedBy_DisplayName
    
  • Byly komentáře zachyceny pro každého uživatele?

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

Nastavení průběžných importů

Tento návod ukazuje jednorázový proces extrakce, transformace a načítání dat (ETL) pro naplnění Azure Data Exploreru jedním snímkem dat pro účely generování sestav. Pokud chcete průběžně hlásit nebo porovnat změny v průběhu času, můžete automatizovat proces naplnění Azure Data Exploreru z Microsoft Entra, aby vaše databáze nadále měla aktuální data.

K hostování skriptů PowerShellu, které potřebujete k extrahování dat z Microsoft Entra ID a zásad správného řízení Microsoft Entra ID, můžete použít Azure Automation, cloudovou službu Azure. Další informace najdete v tématu Automatizace úloh správy Microsoft Entra ID prostřednictvím služby Azure Automation a Microsoft Graph.

K přenesení dat a naplnění existující tabulky můžete použít také funkce Azure nebo nástroje příkazového řádku, jako je lightingest. Další informace viz téma Použití LightIngestu pro ingestování dat do Azure Data Explorer.

Pokud chcete například načíst soubor EntraAccessPackages.json v aktuálním adresáři do tabulky EntraAccessPackages jako aktuálně přihlášený uživatel, použijte tento příkaz:

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

Dotazování dat ve službě Azure Monitor

Pokud do služby Azure Monitor odesíláte protokoly auditu, přihlášení nebo jiné protokoly Microsoft Entra, můžete tyto protokoly začlenit do dotazů z pracovního prostoru služby Azure Monitor Log Analytics. Další informace o vztahu mezi Azure Monitorem a Azure Data Explorerem najdete v tématu Dotazování dat ve službě Azure Monitor pomocí Azure Data Exploreru.

  1. Přihlaste se do Centra pro správu Microsoft Entra.

  2. Vyberte Nastavení diagnostiky.

  3. Vyberte pracovní prostor služby Log Analytics, do kterého odesíláte protokoly.

  4. V přehledu pracovního prostoru služby Log Analytics si poznamenejte ID předplatného, název prostředku a název pracovního prostoru.

  5. Přihlaste se k webu Azure Portal.

  6. Přejděte do webového uživatelského rozhraní azure Data Exploreru .

  7. Ujistěte se, že je uvedený váš cluster Azure Data Exploreru.

  8. Vyberte + Přidat připojení>.

  9. V okně Přidat připojení zadejte adresu URL do pracovního prostoru služby Log Analytics. Adresa URL se vytvoří z názvu hostitele specifického pro cloud, ID předplatného, názvu skupiny prostředků a názvu pracovního prostoru služby Azure Monitor Log Analytics, jak je popsáno v tématu Přidání pracovního prostoru služby Log Analytics.

  10. Po navázání připojení se váš pracovní prostor služby Log Analytics zobrazí v levém podokně s nativním clusterem Azure Data Exploreru.

    Vyberte Dotaza pak vyberte cluster Azure Data Exploreru.

  11. Na podokně dotazů se podívejte na tabulky Azure Monitor obsahující protokoly Microsoft Entra ve vašich dotazech v Azure Data Explorer. Například:

    let CL1 = 'https://ade.loganalytics.io/subscriptions/*subscriptionid*/resourcegroups/*resourcegroupname*/providers/microsoft.operationalinsights/workspaces/*workspacename*';
    cluster(CL1).database('*workspacename*').AuditLogs | where Category == "EntitlementManagement"  and OperationName == "Fulfill access package assignment request"
    | mv-expand TargetResources | where TargetResources.type == 'AccessPackage' | project ActivityDateTime,APID = toguid(TargetResources.id)
    | join EntraAccessPackage on $left.APID == $right.Id
    | limit 100
    

Přenesení dat z jiných zdrojů

V Azure Data Exploreru můžete vytvořit další tabulky k příjmu dat z jiných zdrojů. Pokud jsou data v souboru JSON (podobně jako v předchozích příkladech) nebo v souboru CSV, můžete tabulku vytvořit při prvním získání dat ze souboru. Po vytvoření tabulky můžete také použít LightIngest k ingestování dat do Azure Data Exploreru ze souboru JSON nebo CSV.

Další informace o příjmu dat najdete v tématu přehledu příjmu dat v Azure Data Exploreru.

Příklad: Kombinujte přiřazení aplikací z Microsoft Entra a druhého zdroje k vytvoření sestavy všech uživatelů, kteří měli přístup k aplikaci v rozmezí dvou dat.

Tato zpráva předvádí, jak lze kombinovat data ze dvou samostatných systémů k vytvoření vlastních sestav v Azure Data Exploreru. Agreguje data o uživatelích, jejich rolích a dalších atributech ze dvou systémů do sjednoceného formátu pro analýzu nebo reportování.

Následující příklad předpokládá, že tabulka s názvem salesforceAssignments byla naplněna daty, která pocházejí z jiné aplikace. Tabulka obsahuje sloupce UserName, Name, EmployeeId, Department, JobTitle, AppName, Rolea CreatedDateTime.

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