Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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.
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
, danDirectory.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.
Buka PowerShell.
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
, danMicrosoft.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 }
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 }
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
, danDirectory.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.
Buka database yang Anda siapkan di kluster Azure Data Explorer atau kluster gratis sebelumnya dalam tutorial ini.
Di menu sebelah kiri, pilih Kueri.
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:
Klik kanan nama database tempat Anda ingin menyerap data. Lalu pilih Dapatkan data.
Pilih sumber data dari daftar yang tersedia. Dalam tutorial ini, Anda memasukkan data dari file lokal, jadi pilih File Lokal.
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.
Pilih Telusuri file, pilih file JSON, lalu pilih Berikutnya.
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.
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.
Buka PowerShell.
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 }
Impor modul ke sesi PowerShell saat ini:
$modules = @('Microsoft.Graph.Identity.Governance') foreach ($module in $modules) { Import-Module -Name $module }
Sambungkan ke Microsoft Graph. Bagian tutorial ini menggambarkan pengambilan data dari pengelolaan pemberian hak dan tinjauan akses, sehingga memerlukan cakupan izin
AccessReview.Read.All
danEntitlementManagement.Read.All
. Untuk kasus penggunaan pelaporan lainnya, seperti untuk Privileged Identity Management (PIM) atau alur kerja siklus hidup, perbarui parameterScopes
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:
Unduh skrip Export_Access_Reviews.ps1 dan simpan secara lokal.
Di File Explorer, buka blokir skrip sehingga Anda dapat menjalankannya di PowerShell.
Jalankan perintah berikut. Output menempatkan semua data ke dalam tiga subfolder:
ReviewInstances
,ReviewInstanceDecisionItems
, danReviewInstanceContactedReviewers
..\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.
Di kluster Azure Data Explorer atau kluster gratis Anda, buka database yang menyimpan data ID Microsoft Entra Anda.
Di menu sebelah kiri, pilih Kueri.
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:
Klik kanan nama database database tempat Anda ingin menyerap data. Lalu pilih Dapatkan data.
Pilih sumber data dari daftar yang tersedia. Dalam tutorial ini, Anda memasukkan data dari file lokal, jadi pilih File Lokal.
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.
Pilih Telusuri file, pilih file JSON, lalu pilih Berikutnya.
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.
Ulangi langkah-langkah sebelumnya untuk setiap file JSON yang Anda buat di bagian sebelumnya, untuk setiap folder.
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:
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.