Bagikan melalui


Tutorial: Membuat laporan yang dikustomisasi di Azure Data Explorer dengan menggunakan data dari Microsoft Entra

Dalam tutorial ini, Anda mempelajari cara membuat laporan yang dikustomisasi di Azure Data Explorer dengan menggunakan data dari layanan Microsoft Entra ID dan Microsoft Entra ID Governance.

Tutorial ini melengkapi opsi pelaporan seperti pengarsipan dan pelaporan dengan Azure Monitor dan pengelolaan pemberian hak, yang berfokus pada mengekspor log audit ke Azure Monitor untuk retensi dan analisis. Sebagai perbandingan, mengekspor data Microsoft Entra ID dan Microsoft Entra ID Governance ke Azure Data Explorer memberikan fleksibilitas untuk membuat laporan kustom pada objek Microsoft Entra, termasuk objek historis dan dihapus.

Berikut adalah video yang memberikan gambaran umum singkat tentang pelaporan data Tata Kelola ID Microsoft Entra menggunakan Azure Data Explorer.

Penggunaan Azure Data Explorer juga memungkinkan agregasi data dari sumber tambahan, dengan skalabilitas besar-besaran, skema fleksibel, dan kebijakan penyimpanan. Azure Data Explorer sangat membantu ketika Anda perlu menyimpan data akses pengguna selama bertahun-tahun, melakukan investigasi ad hoc, atau menjalankan kueri kustom pada data akses.

Gambar konseptual memperlihatkan ekstraksi dan kueri data.

Tutorial ini menggambarkan cara menampilkan konfigurasi, pengguna, dan hak akses yang diekspor dari Microsoft Entra bersama data yang diekspor dari sumber lain, seperti aplikasi dengan hak akses dalam database SQL mereka sendiri. Anda kemudian dapat menggunakan Kusto Query Language (KQL) di Azure Data Explorer untuk membuat laporan kustom berdasarkan kebutuhan organisasi Anda.

Di tutorial ini, Anda akan:

  • Siapkan Azure Data Explorer di langganan Azure, atau buat kluster gratis.
  • Ekstrak data dari ID Microsoft Entra dengan menggunakan skrip PowerShell dan Microsoft Graph.
  • Buat tabel dan impor data dari ID Microsoft Entra ke Azure Data Explorer.
  • Ekstrak data dari Microsoft Entra ID Governance.
  • Buat tabel dan impor data dari Microsoft Entra ID Governance ke Azure Data Explorer.
  • Buat kueri kustom dengan menggunakan KQL.
  • Mengkueri data di Azure Monitor.

Pada akhir tutorial ini, Anda akan dapat mengembangkan tampilan yang disesuaikan dari hak akses dan izin pengguna. Perspektif ini mencakup beberapa aplikasi menggunakan alat yang didukung oleh Microsoft. Anda juga dapat membawa data dari database atau aplikasi non-Microsoft untuk melaporkan hak dan izin akses tersebut.

Prasyarat

Jika Anda baru menggunakan Azure Data Explorer dan ingin mempelajari skenario yang ditampilkan tutorial ini, Anda bisa mendapatkan kluster Azure Data Explorer gratis . Untuk penggunaan yang didukung produksi dengan perjanjian tingkat layanan untuk Azure Data Explorer, Anda memerlukan langganan Azure untuk menghosting kluster Azure Data Explorer lengkap.

Tentukan data apa yang ingin Anda sertakan dalam laporan Anda. Skrip dalam tutorial ini menyediakan sampel dengan data tertentu dari pengguna, grup, dan aplikasi dari Microsoft Entra. Sampel ini menggambarkan jenis laporan yang dapat Anda hasilkan dengan pendekatan ini, tetapi kebutuhan pelaporan spesifik Anda mungkin bervariasi dan memerlukan data yang berbeda atau tambahan. Anda dapat memulai dengan objek ini dan membawa lebih banyak jenis objek Microsoft Entra dari waktu ke waktu.

  • Tutorial ini menggambarkan pengambilan data dari Microsoft Entra oleh pengguna yang sudah masuk. Untuk melakukannya, pastikan Anda memiliki penetapan peran yang diperlukan. Anda memerlukan peran dengan izin yang tepat untuk mengekspor jenis data Microsoft Entra yang ingin Anda kerjakan:

    • Data pengguna: Administrator Global, Administrator Peran Istimewa, Administrator Pengguna
    • Data grup: Administrator Global, Administrator Peran Istimewa, Administrator Grup
    • Penetapan peran aplikasi dan aplikasi: Administrator Global, Administrator Peran Istimewa, Administrator Aplikasi, Administrator Aplikasi Cloud
  • Microsoft Graph PowerShell memerlukan persetujuan untuk mengambil objek Microsoft Entra melalui Microsoft Graph. Contoh dalam tutorial ini memerlukan izin User.Read.All, Group.Read.All, Application.Read.All, dan Directory.Read.All yang didelegasikan. Jika Anda berencana untuk mengambil data dengan menggunakan otomatisasi tanpa pengguna yang masuk, setujui izin aplikasi yang sesuai sebagai gantinya. Untuk informasi selengkapnya, lihat Referensi izin Microsoft Graph.

    Jika Anda belum memberikan persetujuan Microsoft Graph PowerShell untuk izin tersebut, Anda harus menjadi Administrator Global untuk melakukan operasi persetujuan ini.

  • Tutorial ini tidak mengilustrasikan atribut keamanan kustom. Secara default, Administrator Global dan peran administrator lainnya tidak menyertakan izin untuk membaca atribut keamanan kustom dari pengguna Microsoft Entra. Jika Anda berencana untuk mengambil atribut keamanan kustom, Anda mungkin memerlukan lebih banyak peran dan izin.

  • Di komputer tempat Microsoft Graph PowerShell diinstal, pastikan Anda memiliki akses tulis ke direktori sistem file. Direktori ini adalah tempat Anda menginstal modul Microsoft Graph PowerShell yang diperlukan dan tempat data Microsoft Entra yang diekspor disimpan.

  • Pastikan Anda memiliki izin untuk mengambil data dari sumber data lain di luar Microsoft Entra, jika Anda juga ingin menggabungkan data tersebut ke Azure Data Explorer.

Menyiapkan Azure Data Explorer

Jika sebelumnya Anda belum menggunakan Azure Data Explorer, Anda perlu menyiapkannya terlebih dahulu. Anda dapat membuat kluster gratis tanpa langganan Azure atau kartu kredit. Atau Anda dapat membuat kluster lengkap, yang memerlukan langganan Azure. Untuk memulai, lihat Quickstart : Membuat kluster dan database Azure Data Explorer.

Mengekstrak data ID Microsoft Entra dengan menggunakan PowerShell

Di bagian ini, Anda menginstal modul Microsoft Graph PowerShell. Di PowerShell, Anda menyambungkan ke Microsoft Graph untuk mengekstrak data ID Microsoft Entra.

Pertama kali organisasi Anda menggunakan modul ini untuk skenario ini, Anda harus memiliki peran Administrator Global untuk memungkinkan Microsoft Graph PowerShell memberikan persetujuan untuk digunakan di penyewa Anda. Interaksi berikutnya dapat menggunakan peran dengan otoritas yang lebih rendah.

  1. Buka PowerShell.

  2. Jika Anda belum menginstal semua modul Microsoft Graph PowerShell, instal modul Microsoft Graph yang diperlukan. Modul berikut diperlukan untuk bagian tutorial ini: Microsoft.Graph.Authentication, Microsoft.Graph.Users, Microsoft.Graph.Groups, Microsoft.Graph.Applications, dan Microsoft.Graph.DirectoryObjects. Jika Anda sudah menginstal modul ini, lewati langkah ini.

       $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. Impor modul ke sesi PowerShell saat ini:

      $modules = @('Microsoft.Graph.Users', 'Microsoft.Graph.Groups', 'Microsoft.Graph.Applications', 'Microsoft.Graph.DirectoryObjects') 
      foreach ($module in $modules) { 
      Import-Module -Name $module 
      } 
    
  4. Sambungkan ke Microsoft Graph. Bagian tutorial ini menggambarkan membaca pengguna, grup, dan aplikasi, sehingga memerlukan cakupan izin User.Read.All, Group.Read.All, Application.Read.All, dan Directory.Read.All. Untuk informasi selengkapnya tentang izin, lihat referensi izin Microsoft Graph.

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

    Perintah ini meminta Anda untuk masuk dengan kredensial Microsoft Entra Anda. Setelah masuk, Anda mungkin perlu menyetujui izin yang diperlukan jika ini pertama kalinya Anda menyambungkan, atau jika izin baru diperlukan.

Kueri PowerShell untuk mengekstrak data ID Microsoft Entra untuk laporan kustom

Kueri berikut mengekstrak data ID Microsoft Entra dari Microsoft Graph dengan menggunakan PowerShell dan mengekspor data ke file JSON. Anda mengimpor file tersebut ke Azure Data Explorer di bagian nanti dari tutorial ini.

Skenario untuk membuat laporan dengan jenis data ini meliputi:

  • Auditor ingin melihat laporan yang mencantumkan anggota grup untuk 10 grup, yang disusun berdasarkan departemen anggota.
  • Auditor ingin melihat laporan semua pengguna yang memiliki akses ke aplikasi antara dua tanggal.

Anda juga dapat membawa data ke Azure Data Explorer dari sumber di luar Microsoft Entra. Skenario untuk kemampuan ini mungkin:

  • Admin ingin melihat semua pengguna yang ditambahkan ke aplikasi dari ID Microsoft Entra dan hak akses mereka di repositori aplikasi itu sendiri, seperti database SQL.

Jenis laporan ini tidak disertakan dalam ID Microsoft Entra. Namun, Anda dapat membuat laporan ini sendiri dengan mengekstrak data dari ID Microsoft Entra dan menggabungkan data dengan menggunakan kueri kustom di Azure Data Explorer. Tutorial ini membahas proses ini nanti, di artikel Bawa data dari sumber lain .

Untuk tutorial ini, Anda mengekstrak data ID Microsoft Entra dari area berikut:

  • Informasi pengguna seperti nama tampilan, UPN, dan detail pekerjaan
  • Informasi grup, termasuk keanggotaan mereka
  • Aplikasi dan penugasan peran dalam aplikasi

Himpunan data ini memungkinkan Anda melakukan serangkaian kueri yang luas di sekitar siapa yang menerima akses ke aplikasi, dengan informasi peran aplikasi dan jangka waktu terkait. Ingatlah bahwa ini adalah kueri sampel, dan data dan persyaratan spesifik Anda mungkin bervariasi dari apa yang ditunjukkan di sini.

Catatan

Penyewa yang lebih besar mungkin mengalami penurunan kecepatan dan kesalahan 429 yang ditangani oleh modul Microsoft Graph. Azure Data Explorer mungkin juga membatasi ukuran unggahan file.

Dalam skrip PowerShell ini, Anda mengekspor properti yang dipilih dari objek Microsoft Entra ke file JSON. Data dari properti yang diekspor ini digunakan untuk menghasilkan laporan kustom di Azure Data Explorer.

Properti tertentu yang mengikuti disertakan dalam contoh ini karena kami menggunakan data ini untuk mengilustrasikan jenis laporan yang dapat Anda buat di Azure Data Explorer. Karena kebutuhan pelaporan spesifik Anda mungkin bervariasi dari apa yang ditunjukkan tutorial ini, Anda harus menyertakan properti tertentu dalam skrip ini yang Anda minati untuk dilihat dalam laporan Anda. Namun, Anda dapat mengikuti pola yang sama yang ditampilkan untuk membantu membangun skrip Anda.

Pilih tanggal rekam jepret

Tanggal rekam jepret yang dikodekan secara permanen mengidentifikasi data dalam file JSON dengan tanggal tertentu. Anda dapat menggunakannya untuk melacak himpunan data serupa dari waktu ke waktu di Azure Data Explorer. Tanggal rekam jepret juga berguna untuk membandingkan perubahan data di antara dua tanggal rekam jepret.

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

Mendapatkan data pengguna Microsoft Entra

Skrip ini mengekspor properti yang dipilih dari objek pengguna Microsoft Entra ke file JSON. Anda akan mengimpor file ini dan data tambahan dari file JSON lain ke Azure Data Explorer di bagian nanti dari tutorial ini.

  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 

Mendapatkan data grup

Buat file JSON dengan nama grup dan ID yang digunakan untuk membuat tampilan kustom di Azure Data Explorer. Sampel mencakup semua grup, tetapi Anda dapat menyertakan pemfilteran tambahan jika perlu. Jika Anda memfilter untuk menyertakan hanya grup tertentu, Anda mungkin ingin menyertakan logika dalam skrip Anda untuk memeriksa grup berlapis.

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

Mendapatkan data keanggotaan grup

Buat file JSON dengan keanggotaan grup, yang digunakan untuk membuat tampilan kustom di Azure Data Explorer. Sampel mencakup semua grup, tetapi Anda dapat menyertakan pemfilteran tambahan jika perlu.

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

Dapatkan data aplikasi dan prinsipal layanan

Buat file JSON dengan semua aplikasi dan prinsipal layanan yang sesuai di tenant. Anda akan mengimpor data ini ke Azure Data Explorer di bagian nanti dari tutorial ini, sehingga Anda dapat membuat laporan kustom yang terkait dengan aplikasi berdasarkan data ini.

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

Mendapatkan data peran aplikasi

Buat file JSON dari semua peran aplikasi untuk aplikasi perusahaan di Microsoft Entra. Setelah mengimpor data ini ke Azure Data Explorer, Anda akan menggunakannya untuk menghasilkan laporan yang melibatkan penetapan peran aplikasi untuk pengguna.

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

Mendapatkan data penetapan peran aplikasi

Buat file JSON dari semua penugasan peran aplikasi bagi pengguna di penyewa.

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

Membuat tabel dan mengimpor file JSON dengan data dari ID Microsoft Entra ke Azure Data Explorer

Di bagian ini, Anda mengimpor file JSON yang baru dibuat untuk layanan ID Microsoft Entra sebagai tabel di Azure Data Explorer untuk analisis lebih lanjut. Pada impor pertama melalui antarmuka pengguna web Azure Data Explorer, Anda membuat tabel berdasarkan skema yang disarankan UI web dari setiap file JSON.

  1. Masuk ke antarmuka pengguna web Azure Data Explorer.

  2. Buka database yang Anda siapkan di kluster Azure Data Explorer atau kluster gratis sebelumnya dalam tutorial ini.

  3. Di menu sebelah kiri, pilih Kueri.

  4. Ikuti langkah-langkah ini untuk setiap file JSON yang diekspor, untuk memasukkan data yang Anda ekspor ke database Azure Data Explorer tersebut sebagai tabel baru:

    1. Klik kanan nama database tempat Anda ingin menyerap data. Lalu pilih Dapatkan data.

      Cuplikan layar tab kueri, dengan menu pintasan untuk database dan perintah untuk menyoroti data.

    2. Pilih sumber data dari daftar yang tersedia. Dalam tutorial ini, Anda memasukkan data dari file lokal, jadi pilih File Lokal.

    3. Pilih + Tabel baru dan masukkan nama tabel, berdasarkan nama file JSON yang Anda impor. Misalnya, jika Anda mengimpor EntraUsers.json, beri nama tabel EntraUsers. Setelah impor pertama, tabel sudah ada, dan Anda bisa memilihnya sebagai tabel target untuk impor berikutnya.

    4. Pilih Telusuri file, pilih file JSON, lalu pilih Berikutnya.

    5. Azure Data Explorer secara otomatis mendeteksi skema dan menyediakan pratinjau pada tab Periksa. Pilih Selesaikan untuk membuat tabel dan mengimpor data dari file tersebut. Setelah data diserap, pilih Tutup.

    6. Ulangi langkah-langkah sebelumnya untuk setiap file JSON yang Anda buat di bagian sebelumnya.

Di akhir langkah-langkah tersebut, Anda memiliki tabel EntraUsers, EntraGroups, EntraGroupMembership, Applications, AppRoles, dan AppRoleAssignments dalam database.

Mengekstrak data Tata Kelola ID Microsoft Entra dengan menggunakan PowerShell

Di bagian ini, Anda menggunakan PowerShell untuk mengekstrak data dari layanan Microsoft Entra ID Governance. Jika Anda tidak memiliki Microsoft Entra ID Governance, Microsoft Entra ID P2, atau Microsoft Entra Suite, lanjutkan di bagian Menggunakan Azure Data Explorer untuk membuat laporan kustom.

Untuk langkah-langkah berikut, Anda mungkin perlu menginstal modul Microsoft Graph PowerShell untuk mengekstrak data Microsoft Entra ID Governance. Pertama kali organisasi Anda menggunakan modul ini untuk skenario ini, Anda harus memiliki peran Administrator Global untuk memungkinkan Microsoft Graph PowerShell memberikan persetujuan untuk digunakan di penyewa Anda. Interaksi berikutnya dapat menggunakan peran dengan otoritas yang lebih rendah.

  1. Buka PowerShell.

  2. Jika Anda belum menginstal semua modul Microsoft Graph PowerShell, instal modul Microsoft Graph yang diperlukan. Modul berikut diperlukan untuk bagian tutorial ini: Microsoft.Graph.Identity.Governance. Jika Anda sudah menginstal modul, lewati ke langkah berikutnya.

       $modules = @('Microsoft.Graph.Identity.Governance')
       foreach ($module in $modules) {
       Install-Module -Name $module -Scope CurrentUser -AllowClobber -Force
       }
    
  3. Impor modul ke sesi PowerShell saat ini:

      $modules = @('Microsoft.Graph.Identity.Governance')
      foreach ($module in $modules) {
      Import-Module -Name $module
      } 
    
  4. Sambungkan ke Microsoft Graph. Bagian tutorial ini menggambarkan pengambilan data dari pengelolaan pemberian hak dan tinjauan akses, sehingga memerlukan cakupan izin AccessReview.Read.All dan EntitlementManagement.Read.All. Untuk kasus penggunaan pelaporan lainnya, seperti untuk Privileged Identity Management (PIM) atau alur kerja siklus hidup, perbarui parameter Scopes dengan izin yang diperlukan. Untuk informasi selengkapnya tentang izin, lihat referensi izin Microsoft Graph.

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

    Perintah ini meminta Anda untuk masuk dengan kredensial Microsoft Entra Anda. Setelah masuk, Anda mungkin perlu menyetujui izin yang diperlukan jika ini pertama kalinya Anda menyambungkan, atau jika izin baru diperlukan.

Kueri PowerShell untuk mengekstrak data Tata Kelola ID Microsoft Entra untuk laporan kustom

Kueri berikut mengekstrak data Microsoft Entra ID Governance dari Microsoft Graph dengan menggunakan PowerShell dan mengekspor data ke file JSON. Anda mengimpor file tersebut ke Azure Data Explorer di bagian nanti dari tutorial ini.

Skenario untuk membuat laporan dengan jenis data ini meliputi:

  • Melaporkan ulasan akses yang bersifat historis.
  • Melaporkan penugasan melalui manajemen hak akses.

Dapatkan data definisi jadwal tinjauan akses

Buat file JSON dengan nama definisi tinjauan akses dan ID yang digunakan untuk membuat tampilan kustom di Azure Data Explorer. Sampel mencakup semua tinjauan akses, tetapi Anda dapat menyertakan pemfilteran tambahan jika perlu. Untuk informasi selengkapnya, lihat Menggunakan parameter kueri filter.

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

Mendapatkan data instans untuk peninjauan akses

Untuk mengekspor semua definisi, instans, dan keputusan tinjauan akses ke dalam format folder terstruktur dengan menggunakan PowerShell, Anda dapat menggunakan Microsoft Graph API. Pendekatan ini memastikan bahwa data Anda diatur secara hierarkis dan selaras dengan struktur folder yang ditentukan.

Sebelum memulai, waspadai poin-poin berikut:

  • Pastikan Anda memiliki izin yang diperlukan untuk mengakses data tinjauan di Microsoft Graph.
  • Bergantung pada volume data, waktu eksekusi skrip mungkin bervariasi. Pantau proses dan sesuaikan parameter sesuai kebutuhan.

Untuk mendapatkan data instance:

  1. Unduh skrip Export_Access_Reviews.ps1 dan simpan secara lokal.

  2. Di File Explorer, buka blokir skrip sehingga Anda dapat menjalankannya di PowerShell.

  3. Jalankan perintah berikut. Output menempatkan semua data ke dalam tiga subfolder: ReviewInstances, ReviewInstanceDecisionItems, dan ReviewInstanceContactedReviewers.

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

Dapatkan data paket akses untuk manajemen hak akses

Buat file JSON dengan nama paket akses dan ID yang digunakan untuk membuat tampilan kustom di Azure Data Explorer. Sampel mencakup semua paket akses, tetapi Anda dapat menyertakan pemfilteran tambahan jika perlu.

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

Mendapatkan data penetapan paket akses untuk pengelolaan pemberian hak

Buat file JSON dengan penugasan untuk mengakses paket yang digunakan untuk membuat tampilan kustom di Azure Data Explorer. Sampel mencakup semua tugas yang dikirimkan, tetapi Anda dapat menyertakan pemfilteran tambahan jika perlu.

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

Membuat tabel dan mengimpor file JSON dengan data dari Microsoft Entra ID Governance ke Azure Data Explorer

Di bagian ini, Anda mengimpor file JSON yang baru dibuat untuk layanan Microsoft Entra ID Governance ke Azure Data Explorer untuk analisis lebih lanjut. File-file ini menggabungkan data yang sudah Anda impor untuk layanan ID Microsoft Entra. Pada impor pertama melalui antarmuka pengguna web Azure Data Explorer, Anda membuat tabel berdasarkan skema yang disarankan UI web dari setiap file JSON.

  1. Masuk ke antarmuka pengguna web Azure Data Explorer.

  2. Di kluster Azure Data Explorer atau kluster gratis Anda, buka database yang menyimpan data ID Microsoft Entra Anda.

  3. Di menu sebelah kiri, pilih Kueri.

  4. Ikuti langkah-langkah ini untuk setiap file JSON yang diekspor, untuk memasukkan data yang Anda ekspor ke database Azure Data Explorer tersebut sebagai tabel baru:

    1. Klik kanan nama database database tempat Anda ingin menyerap data. Lalu pilih Dapatkan data.

      Cuplikan layar tab kueri, dengan menu pintasan untuk database dan perintah untuk menyoroti data.

    2. Pilih sumber data dari daftar yang tersedia. Dalam tutorial ini, Anda memasukkan data dari file lokal, jadi pilih File Lokal.

    3. Pilih + Tabel baru dan masukkan nama tabel, berdasarkan nama file JSON yang Anda impor. Setelah impor pertama, tabel sudah ada, dan Anda bisa memilihnya sebagai tabel target untuk impor berikutnya.

    4. Pilih Telusuri file, pilih file JSON, lalu pilih Berikutnya.

    5. Azure Data Explorer secara otomatis mendeteksi skema dan menyediakan pratinjau pada tab Periksa. Pilih Selesaikan untuk membuat tabel dan mengimpor data dari file tersebut. Setelah data diserap, pilih Tutup.

    6. Ulangi langkah-langkah sebelumnya untuk setiap file JSON yang Anda buat di bagian sebelumnya, untuk setiap folder.

    7. Jika ada banyak file dalam folder, Anda dapat menggunakan lightingest untuk mengimpor sisanya setelah tabel dibuat.

Di akhir langkah-langkah tersebut, Anda memiliki tabel EntraAccessReviewDefinitions, EntraAccessPackages, EntraAccessPackageAssignments, ReviewInstances, ReviewInstanceDecisionItems, dan ReviewInstanceContactedReviewers dalam database, selain tabel yang Anda buat sebelumnya.

Menggunakan Azure Data Explorer untuk membuat laporan kustom

Dengan data yang sekarang tersedia di Azure Data Explorer, Anda siap untuk mulai membuat laporan yang disesuaikan berdasarkan kebutuhan bisnis Anda:

  1. Masuk ke antarmuka pengguna web Azure Data Explorer.

  2. Di menu sebelah kiri, pilih Kueri.

Kueri berikut ini menyediakan contoh laporan umum, tetapi Anda dapat menyesuaikan laporan ini agar sesuai dengan kebutuhan Anda dan membuat laporan tambahan.

Anda juga bisa menampilkan laporan Anda di Excel, dengan memilih tab Ekspor lalu memilih Buka di Excel.

Contoh: Membuat penugasan peran aplikasi untuk penugasan langsung dan grup pada tanggal snapshot tertentu.

Laporan ini memberikan tampilan tentang siapa yang memiliki akses apa, dan kapan, ke aplikasi target. Anda dapat menggunakannya untuk audit keamanan, verifikasi kepatuhan, dan memahami pola akses dalam organisasi.

Kueri berikut menargetkan aplikasi tertentu dalam ID Microsoft Entra dan menganalisis penetapan peran pada tanggal tertentu. Kueri memperoleh penugasan peran langsung dan berbasis grup. Ini menggabungkan data ini dengan detail pengguna dari tabel EntraUsers dan informasi peran dari tabel AppRoles. Dalam kueri, atur targetSnapshotDate ke nilai snapshotDate yang Anda gunakan saat memuat 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 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 

Contoh: Membuat laporan auditor dasar dengan data Microsoft Entra yang menunjukkan siapa yang memiliki akses ke aplikasi di antara dua tanggal

Laporan ini memberikan tampilan tentang siapa yang memiliki akses apa ke aplikasi target antara dua tanggal. Anda dapat menggunakannya untuk audit keamanan, verifikasi kepatuhan, dan memahami pola akses dalam organisasi.

Kueri berikut menargetkan aplikasi tertentu dalam ID Microsoft Entra dan menganalisis penetapan peran di antara dua tanggal. Kueri mengambil penetapan peran langsung dari tabel AppRoleAssignments dan menggabungkan data ini dengan detail pengguna dari tabel EntraUsers dan informasi peran dari tabel 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() 

Contoh: Menampilkan pengguna yang ditambahkan ke aplikasi di antara dua tanggal rekam jepret data

Laporan ini memberikan tampilan pengguna mana yang menerima penetapan peran aplikasi ke aplikasi target antara dua tanggal. Anda dapat menggunakan laporan ini untuk melacak perubahan akses aplikasi dari waktu ke waktu.

Kueri tersebut menargetkan aplikasi tertentu dalam Microsoft Entra ID dan perubahan dalam penugasan peran antara tanggal mulai dan berakhir.

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

Contoh: Berbagai kueri yang menggunakan tinjauan akses

Meninjau kembali penyelesaian tinjauan akses dan informasi garis waktu

Setelah data diunggah, gunakan kueri Kusto berikut untuk meninjaunya:

  • Kapan siklus tinjauan akses terakhir selesai? Berapa lama waktu yang dibutuhkan?

    ReviewInstances
    | summarize LastCompletedDate = max(ReviewInstanceEndDateTime),  
                ReviewDuration = datetime_diff('minute', max(ReviewInstanceEndDateTime), min(ReviewInstanceStartDateTime))  
    
  • Apakah proses tinjauan akses dilakukan tepat waktu (misalnya, triwulanan)?

    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
    

Melihat keterlibatan dan partisipasi dalam tinjauan akses

  • Siapa peninjau yang ditugaskan?

    ReviewInstanceContactedReviewers
    | project AccessReviewDefinitionId, AccessReviewInstanceId, ReviewerName = DisplayName, ReviewerUserPrincipalName = UserPrincipalName, CreatedDateTime
    
  • Peninjau mana yang secara aktif berpartisipasi dan memberikan respons?

    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
    
  • Persentase peninjau apa yang merespons permintaan tinjauan akses?

    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  
    
  • Kapan setiap peninjau menyelesaikan tugas mereka?

    ReviewInstanceDecisionItems 
    | where Decision in ("Approve", "Deny") 
    | project AccessReviewDefinitionId, AccessReviewInstanceId, ReviewerName = ReviewedBy_DisplayName, ReviewerUserPrincipalName = ReviewedBy_UserPrincipalName, ReviewedDateTime  
    
  • Peninjau mana yang tidak membuat keputusan?

    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
    
  • Persentase peninjau apa yang tidak berinteraksi?

    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  
    
  • Apakah pengingat diaktifkan untuk peninjau yang tidak responsif atau keputusan yang masih tertunda?

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

Lihat pengguna dan perubahan akses yang dihasilkan dari tinjauan akses

  • Siapa yang kehilangan akses ke sumber daya tertentu selama tinjauan akses?

    ReviewInstanceDecisionItems 
    | where Decision == "Deny" 
    | project User = Principal_DisplayName, Resource = Resource_DisplayName, Decision, Justification 
    
  • Apakah pengguna ditandai karena tidak aktif?

    ReviewInstanceDecisionItems
    | where Insights contains "inactive"
    | project User = Principal_DisplayName, Resource = Resource_DisplayName, Insights, Decision
    
  • Berapa tanggal penghapusan akses dan alasan kehilangan akses?

    ReviewInstanceDecisionItems
    | where Decision == "Deny"
    | project User = Principal_DisplayName, Resource=Resource_DisplayName, AccessRemovalDate = AppliedDateTime, Reason = Justification  
    
  • Pengguna mana yang tidak membuat keputusan?

    ReviewInstanceDecisionItems
    | where Decision == "NotReviewed"
    | project User = Principal_DisplayName, Resource=Resource_DisplayName
    
  • Ulasan mana yang tidak memiliki peninjau?

    ReviewInstances
    | join kind=leftanti (
        ReviewInstanceContactedReviewers
        | summarize by AccessReviewInstanceId
    ) on $left.ReviewInstanceId == $right.AccessReviewInstanceId  
    
  • Ulasan mana yang tidak memiliki pengguna?

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

Meringkas hasil keputusan dari tinjauan akses

  • Keputusan apa yang dibuat pengguna: disetujui, ditolak, atau tidak berubah?

    ReviewInstanceDecisionItems
    | summarize count() by Decision
    
  • Berapa jumlah pengguna yang disetujui atau ditolak aksesnya?

    ReviewInstanceDecisionItems
    | summarize ApprovedCount = countif(Decision == "Approve"), DeniedCount = countif(Decision == "Deny")
    
  • Apakah alasan persetujuan didokumenkan?

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

Konfirmasi kualitas tinjauan akses dan periksa kelengkapan

  • Apakah pencabutan akses dipertimbangkan untuk pengguna yang tidak aktif?

    ReviewInstanceDecisionItems
    | where Insights contains "inactive" and Decision == "Deny"
    | project User = Principal_DisplayName, Decision
    
  • Apakah ada akses yang belum dihapus dengan benar?

    ReviewInstanceDecisionItems
    | where ApplyResult != "New" and ApplyResult != "AppliedSuccessfully"
    
  • Apakah peninjau mendokumenkan keputusan mereka?

    ReviewInstanceDecisionItems
    | where isnotempty(Justification)
    | summarize count() by ReviewedBy_DisplayName
    
  • Apakah komentar diambil untuk setiap pengguna?

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

Menyiapkan impor berkelanjutan

Tutorial ini menggambarkan proses ekstrak, transformasi, dan pemuatan data satu kali (ETL) untuk mengisi Azure Data Explorer dengan satu rekam jepret untuk tujuan pelaporan. Untuk pelaporan yang sedang berlangsung atau membandingkan perubahan dari waktu ke waktu, Anda dapat mengotomatiskan proses pengisian Azure Data Explorer dari Microsoft Entra, sehingga database Anda terus memiliki data saat ini.

Anda dapat menggunakan Azure Automation, layanan cloud Azure, untuk menghosting skrip PowerShell yang Anda butuhkan untuk mengekstrak data dari ID Microsoft Entra dan Tata Kelola ID Microsoft Entra. Untuk informasi selengkapnya, lihat Mengotomatiskan tugas Microsoft Entra ID Governance melalui Azure Automation dan Microsoft Graph.

Anda juga dapat menggunakan fitur Azure atau alat baris perintah seperti lightingest untuk membawa data dan mengisi tabel yang sudah ada. Untuk informasi selengkapnya, lihat Menggunakan LightIngest untuk menyerap data ke Azure Data Explorer.

Misalnya, untuk memuat file EntraAccessPackages.json di direktori saat ini ke dalam tabel EntraAccessPackages sebagai pengguna yang saat ini masuk, gunakan perintah ini:

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

Melaporkan data dari lebih banyak sumber

Anda juga dapat membawa data ke Azure Data Explorer dari sumber di luar Microsoft Entra. Skenario untuk kemampuan ini meliputi:

  • Admin ingin melihat peristiwa di log audit dengan detail tambahan tentang pengguna, paket akses, atau objek lain yang bukan bagian dari catatan audit itu sendiri.
  • Admin ingin melihat semua pengguna yang ditambahkan ke aplikasi dari ID Microsoft Entra dan hak akses mereka di repositori aplikasi itu sendiri, seperti database SQL.

Untuk informasi selengkapnya, lihat Membuat laporan yang dikustomisasi di Azure Data Explorer menggunakan data dari sumber lain.