Memantau perubahan delegasi dalam penyewa pengelola Anda

Sebagai penyedia layanan, Anda mungkin ingin mengetahui kapan langganan pelanggan atau grup sumber daya didelegasikan ke penyewa Anda melalui Azure Lighthouse, atau saat sumber daya yang didelegasikan sebelumnya dihapus.

Di penyewa pengelola, log aktivitas Azure melacak aktivitas delegasi di tingkat penyewa. Aktivitas yang dicatat ini mencakup delegasi yang ditambahkan atau dihapus dari penyewa pelanggan.

Topik ini menjelaskan izin yang diperlukan untuk memantau aktivitas delegasi ke penyewa Anda di semua pelanggan Anda. Ini juga mencakup sampel skrip yang menunjukkan satu metode untuk kueri dan pelaporan pada data ini.

Penting

Semua langkah ini harus dilakukan dalam penyewa pengelola Anda, bukan di penyewa pelanggan mana pun.

Meskipun kami mengacu pada penyedia layanan dan pelanggan dalam topik ini, perusahaan yang mengelola banyak penyewa dapat menggunakan proses yang sama.

Mengaktifkan akses ke data tingkat penyewa

Untuk mengakses data Log Aktivitas tingkat penyewa, akun harus diberi peran bawaan Monitoring Reader Azure di cakupan akar (/). Penugasan ini harus dilakukan oleh pengguna yang memiliki peran Administrator Global dengan akses tambahan yang ditingkatkan.

Meningkatkan akses untuk akun Administrator Global

Untuk menetapkan peran di cakupan akar (/), Anda harus memiliki peran Administrator Global dengan akses yang lebih tinggi. Akses yang ditinggikan ini harus ditambahkan hanya saat Anda perlu membuat penetapan peran, lalu dihapus saat Anda selesai.

Untuk petunjuk mendetail tentang menambahkan dan menghapus elevasi, lihat Meningkatkan akses untuk mengelola semua langganan dan grup manajemen Azure.

Setelah Anda meningkatkan akses, akun Anda akan memiliki peran Administrator Akses Pengguna di Azure pada cakupan akar. Penetapan peran ini memungkinkan Anda melihat semua sumber daya dan menetapkan akses di setiap grup langganan atau manajemen di direktori, serta membuat penetapan peran di cakupan akar.

Menetapkan peran Monitoring Reader pada cakupan akar

Setelah meningkatkan akses, Anda dapat menetapkan izin yang sesuai ke akun sehingga dapat mengkueri data log aktivitas tingkat penyewa. Akun ini harus memiliki peran bawaan Monitoring Reader Azure yang ditetapkan di cakupan akar penyewa pengelola Anda.

Penting

Memberikan penetapan peran pada cakupan akar berarti bahwa izin yang sama akan berlaku untuk setiap sumber daya dalam penyewa. Karena ini adalah tingkat akses yang luas, kami menyarankan menetapkan peran ini ke akun perwakilan layanan dan menggunakan akun tersebut untuk mengkueri data.

Anda juga dapat menetapkan peran Monitori Reader di cakupan akar kepada pengguna individual atau ke grup pengguna sehingga mereka dapat melihat informasi delegasi secara langsung di portal Azure. Jika Anda melakukannya, ketahuilah bahwa ini adalah tingkat akses yang luas yang harus dibatasi pada jumlah pengguna sesingkat mungkin.

Gunakan salah satu metode berikut untuk membuat penetapan cakupan akar.

PowerShell

# Log in first with Connect-AzAccount if you're not using Cloud Shell

New-AzRoleAssignment -SignInName <yourLoginName> -Scope "/" -RoleDefinitionName "Monitoring Reader"  -ObjectId <objectId> 

Azure CLI

# Log in first with az login if you're not using Cloud Shell

az role assignment create --assignee 00000000-0000-0000-0000-000000000000 --role "Monitoring Reader" --scope "/"

Menghapus akses yang ditinggikan untuk akun Administrator Global

Setelah Anda menetapkan peran Monitoring Reader di cakupan akar ke akun yang diinginkan, pastikan untuk menghapus akses yang ditinggikan untuk akun Administrator Global, karena tingkat akses ini tidak akan lagi diperlukan.

Menampilkan perubahan delegasi di portal Azure

Pengguna yang telah diberi peran Monitoring Reader di cakupan akar dapat melihat perubahan delegasi secara langsung di portal Azure.

  1. Navigasi ke halaman Pelanggan saya, lalu pilih Log aktivitas dari menu navigasi sebelah kiri.
  2. Pastikan Aktivitas Direktori dipilih di filter di dekat bagian atas layar.

Daftar perubahan delegasi akan muncul. Anda dapat memilih Edit kolom untuk menampilkan atau menyembunyikan nilai Status, Kategori kejadian, Waktu, Tanda waktu, Langganan, Peristiwa yang dimulai oleh, Grup sumber daya, Jenis sumber daya, dan Sumber daya.

Screenshot of delegation changes in the Azure portal.

Menggunakan akun perwakilan layanan untuk mengkueri log aktivitas

Karena peran Monitoring Reader di cakupan akar adalah tingkat akses yang luas, Anda mungkin ingin menetapkan peran ke akun perwakilan layanan dan menggunakan akun tersebut untuk mengkueri data menggunakan skrip di bawah.

Penting

Saat ini, penyewa dengan sejumlah besar aktivitas delegasi dapat mengalami kesalahan saat mengkueri data ini.

Saat menggunakan akun utama layanan untuk mengkueri log aktivitas, kami merekomendasikan praktik terbaik berikut:

Setelah Anda membuat akun perwakilan layanan baru dengan akses Monitoring Reader ke cakupan akar penyewa pengelola, Anda dapat menggunakannya untuk mengkueri dan melaporkan aktivitas delegasi di penyewa Anda.

Skrip Azure PowerShell ini dapat digunakan untuk mengkueri aktivitas sehari terakhir dan melaporkan delegasi yang ditambahkan atau dihapus (atau upaya yang tidak berhasil). Ini mengkueri data Log Aktivitas Penyewa, lalu membuat nilai berikut untuk melaporkan delegasi yang ditambahkan atau dihapus:

  • DelegatedResourceId: ID langganan atau grup sumber daya yang didelegasikan
  • CustomerTenantId: ID penyewa pelanggan
  • CustomerSubscriptionId: ID langganan yang didelegasikan atau yang berisi grup sumber daya yang didelegasikan
  • CustomerDelegationStatus: Perubahan status untuk sumber daya yang didelegasikan (berhasil atau gagal)
  • EventTimeStamp: Tanggal dan waktu saat perubahan delegasi dicatat

Saat mengkueri data ini, ingatlah:

  • Jika beberapa grup sumber daya didelegasikan dalam satu penyebaran, entri terpisah akan ditampilkan untuk setiap grup sumber daya.
  • Perubahan yang dilakukan pada delegasi sebelumnya (seperti memperbarui struktur izin) akan dicatat sebagai delegasi tambahan.
  • Seperti disebutkan di atas, akun harus memiliki peran bawaan Monitoring Reader Azure di cakupan akar (/) untuk mengakses data tingkat penyewa ini.
  • Anda dapat menggunakan data ini di alur kerja dan pelaporan Anda sendiri. Misalnya, Anda dapat menggunakan HTTP Data Collector API (pratinjau) untuk mencatat data ke Azure Monitor dari klien REST API, lalu menggunakan grup tindakan untuk membuat pemberitahuan atau pemberitahuan.
# Log in first with Connect-AzAccount if you're not using Cloud Shell

# Azure Lighthouse: Query Tenant Activity Log for registered/unregistered delegations for the last 1 day

$GetDate = (Get-Date).AddDays((-1))

$dateFormatForQuery = $GetDate.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ")

# Getting Azure context for the API call
$currentContext = Get-AzContext

# Fetching new token
$azureRmProfile = [Microsoft.Azure.Commands.Common.Authentication.Abstractions.AzureRmProfileProvider]::Instance.Profile
$profileClient = [Microsoft.Azure.Commands.ResourceManager.Common.RMProfileClient]::new($azureRmProfile)
$token = $profileClient.AcquireAccessToken($currentContext.Tenant.Id)

$listOperations = @{
    Uri     = "https://management.azure.com/providers/microsoft.insights/eventtypes/management/values?api-version=2015-04-01&`$filter=eventTimestamp ge '$($dateFormatForQuery)'"
    Headers = @{
        Authorization  = "Bearer $($token.AccessToken)"
        'Content-Type' = 'application/json'
    }
    Method  = 'GET'
}
$list = Invoke-RestMethod @listOperations

# First link can be empty - and point to a next link (or potentially multiple pages)
# While you get more data - continue fetching and add result
while($list.nextLink){
    $list2 = Invoke-RestMethod $list.nextLink -Headers $listOperations.Headers -Method Get
    $data+=$list2.value;
    $list.nextLink = $list2.nextlink;
}

$showOperations = $data;

if ($showOperations.operationName.value -eq "Microsoft.Resources/tenants/register/action") {
    $registerOutputs = $showOperations | Where-Object -FilterScript { $_.eventName.value -eq "EndRequest" -and $_.resourceType.value -and $_.operationName.value -eq "Microsoft.Resources/tenants/register/action" }
    foreach ($registerOutput in $registerOutputs) {
        $eventDescription = $registerOutput.description | ConvertFrom-Json;
    $registerOutputdata = [pscustomobject]@{
        Event                    = "An Azure customer has registered delegated resources to your Azure tenant";
        DelegatedResourceId      = $eventDescription.delegationResourceId; 
        CustomerTenantId         = $eventDescription.subscriptionTenantId;
        CustomerSubscriptionId   = $eventDescription.subscriptionId;
        CustomerDelegationStatus = $registerOutput.status.value;
        EventTimeStamp           = $registerOutput.eventTimestamp;
        }
        $registerOutputdata | Format-List
    }
}
if ($showOperations.operationName.value -eq "Microsoft.Resources/tenants/unregister/action") {
    $unregisterOutputs = $showOperations | Where-Object -FilterScript { $_.eventName.value -eq "EndRequest" -and $_.resourceType.value -and $_.operationName.value -eq "Microsoft.Resources/tenants/unregister/action" }
    foreach ($unregisterOutput in $unregisterOutputs) {
        $eventDescription = $registerOutput.description | ConvertFrom-Json;
    $unregisterOutputdata = [pscustomobject]@{
        Event                    = "An Azure customer has unregistered delegated resources from your Azure tenant";
        DelegatedResourceId      = $eventDescription.delegationResourceId;
        CustomerTenantId         = $eventDescription.subscriptionTenantId;
        CustomerSubscriptionId   = $eventDescription.subscriptionId;
        CustomerDelegationStatus = $unregisterOutput.status.value;
        EventTimeStamp           = $unregisterOutput.eventTimestamp;
        }
        $unregisterOutputdata | Format-List
    }
}
else {
    Write-Output "No new delegation events for tenant: $($currentContext.Tenant.TenantId)"
}

Langkah berikutnya