Memecahkan masalah batas Azure RBAC

Artikel ini menjelaskan beberapa solusi umum saat Anda melebihi batas dalam kontrol akses berbasis peran Azure (Azure RBAC).

Prasyarat

Catatan

Kueri yang digunakan dalam artikel ini hanya mengembalikan penetapan peran atau peran kustom yang Anda memiliki izin untuk membacanya. Misalnya, jika Anda hanya memiliki izin untuk membaca penetapan peran di cakupan grup sumber daya, penetapan peran pada cakupan langganan tidak dikembalikan.

Gejala - Tidak dapat lagi membuat penetapan peran

Saat mencoba menetapkan peran, Anda mendapatkan pesan kesalahan berikut:

No more role assignments can be created (code: RoleAssignmentLimitExceeded)

Penyebab

Azure mendukung hingga 4000 penetapan peran per langganan. Batas ini mencakup penetapan peran di langganan, grup sumber daya, dan cakupan sumber daya, tapi tidak dalam cakupan grup pengelolaan. Penetapan peran yang memenuhi syarat dan penetapan peran yang dijadwalkan untuk masa depan tidak dihitung dalam batas ini. Anda harus mencoba mengurangi jumlah pengalokasian peran dalam langganan.

Catatan

Batas 4000 penetapan peran per langganan diperbaiki dan tidak dapat ditingkatkan.

Untuk mendapatkan jumlah penetapan peran, Anda dapat melihat bagan di halaman Kontrol akses (IAM) di portal Azure. Anda juga dapat menggunakan perintah Microsoft Azure PowerShell berikut:

$scope = "/subscriptions/<subscriptionId>"
$ras = Get-AzRoleAssignment -Scope $scope | Where-Object {$_.scope.StartsWith($scope)}
$ras.Count

Solusi 1 - Ganti penetapan peran berbasis prinsipal dengan penetapan peran berbasis grup

Untuk mengurangi jumlah penetapan peran dalam langganan, tambahkan prinsipal (pengguna, perwakilan layanan, dan identitas yang dikelola) ke dalam grup, kemudian tetapkan peran pada grup tersebut. Ikuti langkah-langkah ini untuk mengidentifikasi di mana beberapa penetapan peran untuk prinsipal dapat diganti dengan satu penetapan peran untuk grup.

  1. Masuk ke portal Azure dan buka Azure Resource Graph Explorer.

  2. Pilih Cakupan dan atur cakupan untuk kueri.

    Anda biasanya mengatur cakupan ke Direktori untuk mengkueri seluruh penyewa Anda, tetapi Anda bisa mempersempit cakupan ke langganan tertentu.

    Cuplikan layar Azure Resource Graph Explorer yang memperlihatkan pilihan Cakupan.

  3. Pilih Atur cakupan otorisasi dan atur cakupan otorisasi ke Pada, di atas dan di bawah ini untuk mengkueri semua sumber daya pada cakupan yang ditentukan.

    Cuplikan layar Azure Resource Graph Explorer yang memperlihatkan panel Atur cakupan otorisasi.

  4. Jalankan kueri berikut untuk mendapatkan penetapan peran dengan peran yang sama dan pada cakupan yang sama, tetapi untuk prinsipal yang berbeda.

    Kueri ini memeriksa penetapan peran aktif dan tidak mempertimbangkan penetapan peran yang memenuhi syarat di Microsoft Entra Privileged Identity Management. Untuk mencantumkan penetapan peran yang memenuhi syarat, Anda dapat menggunakan pusat admin Microsoft Entra, PowerShell, atau REST API. Untuk informasi selengkapnya, lihat Get-AzRoleEligibilityScheduleInstance atau Instans Jadwal Kelayakan Peran - Daftar untuk Cakupan.

    Jika Anda menggunakan kondisi penetapan peran atau mendelegasikan manajemen penetapan peran dengan kondisi, Anda harus menggunakan kueri kondisi. Jika tidak, gunakan kueri "Default".

    authorizationresources
    | where type =~ "microsoft.authorization/roleassignments"
    | where id startswith "/subscriptions"
    | extend RoleId = tolower(tostring(properties.roleDefinitionId))
    | join kind = leftouter (
      authorizationresources
      | where type =~ "microsoft.authorization/roledefinitions"
      | extend RoleDefinitionName = tostring(properties.roleName)
      | extend RoleId = tolower(id)
      | project RoleDefinitionName, RoleId
    ) on $left.RoleId == $right.RoleId
    | extend principalId = tostring(properties.principalId)
    | extend principal_to_ra = pack(principalId, id)
    | summarize count_ = count(), AllPrincipals = make_set(principal_to_ra) by RoleDefinitionId = RoleId, Scope = tolower(properties.scope), RoleDefinitionName
    | where count_ > 1
    | order by count_ desc
    

    Berikut ini memperlihatkan contoh hasilnya. Kolom count_ adalah jumlah prinsipal yang diberi peran yang sama dan pada cakupan yang sama. Jumlah diurutkan dalam urutan turun.

    Cuplikan layar Azure Resource Graph Explorer yang memperlihatkan penetapan peran dengan peran yang sama dan pada cakupan yang sama, tetapi untuk prinsipal yang berbeda.

  5. Identifikasi baris tempat Anda ingin mengubah penetapan peran ganda menjadi satu penetapan peran untuk grup.

  6. Di baris, pilih Lihat detail untuk membuka panel Detail .

    Cuplikan layar panel Detail yang memperlihatkan penetapan peran dengan peran yang sama dan pada cakupan yang sama, tetapi untuk prinsipal yang berbeda.

    Kolom Deskripsi
    RoleDefinitionId ID peran yang saat ini dialokasikan.
    Cakupan Cakupan untuk penetapan peran, yang akan menjadi langganan, grup sumber daya, atau sumber daya.
    RoleDefinitionName Nama peran yang saat ini ditetapkan.
    hitung_ Jumlah prinsipal yang diberi peran yang sama dan pada cakupan yang sama.
    AllPrincipals Daftar ID utama yang diberi peran yang sama dan pada cakupan yang sama.
  7. Gunakan RoleDefinitionId, RoleDefinitionName, dan Scope untuk mendapatkan peran dan cakupan.

  8. Gunakan AllPrincipals untuk mendapatkan daftar ID utama dengan penetapan peran yang sama.

  9. Buat grup Microsoft Entra. Untuk informasi selengkapnya, lihat Mengelola grup Microsoft Entra dan keanggotaan grup.

  10. Tambahkan prinsipal dari AllPrincipals ke grup.

    Untuk informasi tentang cara menambahkan entitas utama secara massal, lihat Menambahkan anggota grup secara massal di Microsoft Entra ID.

  11. Tetapkan peran ke grup yang Anda buat pada cakupan yang sama. Untuk informasi selengkapnya, lihat Menetapkan peran Azure menggunakan portal Azure.

    Sekarang Anda dapat menemukan dan menghapus penetapan peran berbasis prinsipal.

  12. Dapatkan nama utama dari ID utama.

  13. Buka halaman Kontrol akses (IAM) pada cakupan yang sama dengan penetapan peran.

  14. Pilih tab Penetapan peran.

  15. Untuk memfilter penetapan peran, pilih filter Peran lalu pilih nama peran.

  16. Temukan penetapan peran berbasis prinsipal.

    Anda sebaiknya juga melihat penetapan peran berbasis grup Anda.

    Tangkapan layar halaman Pengontrol Akses (IAM) yang menampilkan penugasan peran dengan peran yang sama dan pada cakupan yang sama, tetapi untuk prinsipal yang berbeda.

  17. Pilih dan hapus penetapan peran berbasis utama. Untuk informasi selengkapnya, lihat Menghapus penetapan peran Azure.

Solusi 2 - Menghapus penetapan peran yang berlebihan

Untuk pengurangan jumlah penetapan peran dalam langganan, hapus penetapan peran yang redundan. Ikuti langkah-langkah ini untuk mengidentifikasi di mana penetapan peran yang berlebihan pada cakupan yang lebih rendah berpotensi dihapus karena penetapan peran pada cakupan yang lebih tinggi sudah memberikan akses.

  1. Masuk ke portal Azure dan buka Azure Resource Graph Explorer.

  2. Pilih Cakupan dan atur cakupan untuk kueri.

    Anda biasanya mengatur cakupan ke Direktori untuk mengkueri seluruh penyewa Anda, tetapi Anda bisa mempersempit cakupan ke langganan tertentu.

    Cuplikan layar Azure Resource Graph Explorer yang memperlihatkan pilihan Cakupan.

  3. Pilih Atur cakupan otorisasi dan atur cakupan otorisasi ke Pada, di atas dan di bawah ini untuk mengkueri semua sumber daya pada cakupan yang ditentukan.

    Cuplikan layar Azure Resource Graph Explorer yang memperlihatkan panel Atur cakupan otorisasi.

  4. Jalankan kueri berikut untuk mendapatkan penetapan peran yang memiliki peran dan prinsipal yang sama, tetapi berada pada cakupan yang berbeda.

    Kueri ini memeriksa penetapan peran aktif dan tidak mempertimbangkan penetapan peran yang memenuhi syarat di Microsoft Entra Privileged Identity Management. Untuk mencantumkan penetapan peran yang memenuhi syarat, Anda dapat menggunakan pusat admin Microsoft Entra, PowerShell, atau REST API. Untuk informasi selengkapnya, lihat Get-AzRoleEligibilityScheduleInstance atau Instans Jadwal Kelayakan Peran - Daftar untuk Cakupan.

    Jika Anda menggunakan kondisi penetapan peran atau mendelegasikan manajemen penetapan peran dengan kondisi, Anda harus menggunakan kueri kondisi. Jika tidak, gunakan kueri "Default".

    authorizationresources
    | where type =~ "microsoft.authorization/roleassignments"
    | where id startswith "/subscriptions"
    | extend RoleDefinitionId = tolower(tostring(properties.roleDefinitionId))
    | extend PrincipalId = tolower(properties.principalId)
    | extend RoleDefinitionId_PrincipalId = strcat(RoleDefinitionId, "_", PrincipalId)
    | join kind = leftouter (
      authorizationresources
      | where type =~ "microsoft.authorization/roledefinitions"
      | extend RoleDefinitionName = tostring(properties.roleName)
      | extend rdId = tolower(id)
      | project RoleDefinitionName, rdId
    ) on $left.RoleDefinitionId == $right.rdId
    | summarize count_ = count(), Scopes = make_set(tolower(properties.scope)) by RoleDefinitionId_PrincipalId,RoleDefinitionName
    | project RoleDefinitionId = split(RoleDefinitionId_PrincipalId, "_", 0)[0], RoleDefinitionName, PrincipalId = split(RoleDefinitionId_PrincipalId, "_", 1)[0], count_, Scopes
    | where count_ > 1
    | order by count_ desc
    

    Berikut ini memperlihatkan contoh hasilnya. Kolom count_ adalah jumlah cakupan yang berbeda untuk penetapan peran dengan peran yang sama dan prinsipal yang sama. Jumlah diurutkan dalam urutan turun.

    Cuplikan layar Azure Resource Graph Explorer yang memperlihatkan penetapan peran untuk peran yang sama dan prinsipal yang sama, tetapi pada cakupan yang berbeda.

    Kolom Deskripsi
    RoleDefinitionId ID peran yang saat ini dialokasikan.
    RoleDefinitionName Nama peran yang saat ini ditetapkan.
    ID Utama ID prinsipal yang diberi peran.
    hitung_ Jumlah cakupan berbeda untuk penugasan peran dengan peran dan prinsipal yang sama.
    Cakupan Cakupan untuk penetapan peran dengan peran yang sama dan prinsipal yang sama.
  5. Identifikasi baris tempat Anda ingin menghapus penetapan peran yang berlebihan.

  6. Dalam baris, pilih Lihat detail untuk membuka panel Detail .

    Cuplikan layar panel Detail yang memperlihatkan penetapan peran untuk peran yang sama dan prinsipal yang sama, tetapi pada cakupan yang berbeda.

  7. Gunakan RoleDefinitionId, RoleDefinitionName, dan PrincipalId untuk mendapatkan peran dan ID utama.

  8. Gunakan Cakupan untuk mendapatkan daftar cakupan untuk peran yang sama dan prinsipal yang sama.

  9. Tentukan cakupan mana yang diperlukan untuk penugasan peran. Penetapan peran lainnya dapat dihapus.

    Anda harus mengikuti praktik terbaik prinsip hak akses minimum saat menentukan penetapan peran mana yang dapat dihapus. Penugasan peran pada cakupan yang lebih tinggi mungkin memberikan lebih banyak akses ke prinsipal daripada yang diperlukan. Dalam hal ini, Anda harus menghapus penetapan peran dengan cakupan yang lebih tinggi. Misalnya, pengguna mungkin tidak memerlukan penetapan peran Kontributor Komputer Virtual pada cakupan langganan saat penetapan peran Kontributor Komputer Virtual pada cakupan grup sumber daya yang lebih rendah memberikan akses yang diperlukan.

  10. Dapatkan nama utama dari ID utama.

  11. Buka halaman Kontrol akses (IAM) di cakupan peran yang ingin dihapus.

  12. Pilih tab Penetapan peran.

  13. Untuk memfilter penetapan peran, pilih filter Peran lalu pilih nama peran.

  14. Temukan prinsipalnya.

  15. Pilih dan hapus penetapan peran. Untuk informasi selengkapnya, lihat Menghapus penetapan peran Azure.

Solusi 3 - Ganti beberapa penetapan peran bawaan dengan penetapan peran kustom

Untuk mengurangi jumlah penetapan peran dalam langganan, ganti beberapa penetapan peran bawaan dengan satu penetapan peran kustom. Ikuti langkah-langkah ini untuk mengidentifikasi di mana beberapa penugasan peran yang sudah ada berpotensi diganti.

  1. Masuk ke portal Azure dan buka Azure Resource Graph Explorer.

  2. Pilih Cakupan dan atur cakupan untuk kueri.

    Anda biasanya mengatur cakupan ke Direktori untuk mengkueri seluruh penyewa Anda, tetapi Anda bisa mempersempit cakupan ke langganan tertentu.

    Cuplikan layar Azure Resource Graph Explorer yang memperlihatkan pilihan Cakupan.

  3. Jalankan kueri berikut untuk mendapatkan penetapan peran dengan prinsipal yang sama dan cakupan yang sama, tetapi dengan peran bawaan yang berbeda.

    Kueri ini memeriksa penetapan peran aktif dan tidak mempertimbangkan penetapan peran yang memenuhi syarat di Microsoft Entra Privileged Identity Management. Untuk mencantumkan penetapan peran yang memenuhi syarat, Anda dapat menggunakan pusat admin Microsoft Entra, PowerShell, atau REST API. Untuk informasi selengkapnya, lihat Get-AzRoleEligibilityScheduleInstance atau Instans Jadwal Kelayakan Peran - Daftar untuk Cakupan.

    Jika Anda menggunakan kondisi penetapan peran atau mendelegasikan manajemen penetapan peran dengan kondisi, Anda harus menggunakan kueri kondisi. Jika tidak, gunakan kueri "Default".

    authorizationresources
    | where type =~ "microsoft.authorization/roleassignments"
    | where id startswith "/subscriptions"
    | extend PrincipalId = tostring(properties.principalId) 
    | extend Scope = tolower(properties.scope)
    | extend RoleDefinitionId = tolower(tostring(properties.roleDefinitionId))
    | join kind = leftouter (
      authorizationresources
      | where type =~ "microsoft.authorization/roledefinitions"
      | extend RoleName = tostring(properties.roleName)
      | extend RoleId = tolower(id)
      | extend RoleType = tostring(properties.type) 
      | where RoleType == "BuiltInRole"
      | extend RoleId_RoleName = pack(RoleId, RoleName)
    ) on $left.RoleDefinitionId == $right.RoleId
    | summarize count_ = count(), AllRD = make_set(RoleId_RoleName) by PrincipalId, Scope
    | where count_ > 1
    | order by count_ desc
    

    Berikut ini memperlihatkan contoh hasilnya. Kolom count_ adalah jumlah penetapan peran bawaan yang berbeda dengan prinsipal yang sama dan cakupan yang sama. Jumlah diurutkan dalam urutan turun.

    Cuplikan layar Azure Resource Graph Explorer yang memperlihatkan penetapan peran untuk dengan prinsipal yang sama dan cakupan yang sama.

    Kolom Deskripsi
    ID Utama ID prinsipal yang diberi peran bawaan.
    Cakupan Cakupan untuk penetapan peran bawaan dalam sistem.
    hitung_ Jumlah penetapan peran bawaan dengan pokok yang sama dan cakupan yang identik.
    AllRD ID dan nama peran yang sudah ada.
  4. Dalam baris, pilih Lihat detail untuk membuka panel Detail .

    Cuplikan layar panel Detail yang memperlihatkan penetapan peran dengan prinsipal yang sama dan cakupan yang sama.

  5. Gunakan AllRD untuk melihat peran bawaan yang berpotensi digabungkan menjadi peran kustom.

  6. Cantumkan tindakan dan tindakan data untuk peran yang sudah ada. Untuk informasi selengkapnya, lihat Mencantumkan definisi peran Azure atau peran bawaan Azure.

  7. Buat peran kustom yang menyertakan semua tindakan dan tindakan data sebagai peran bawaan. Untuk mempermudah pembuatan peran kustom, Anda dapat memulai dengan mengkloning salah satu peran bawaan. Untuk informasi selengkapnya, lihat Membuat atau memperbarui peran kustom Azure menggunakan portal Azure.

  8. Dapatkan nama utama dari ID utama.

  9. Buka halaman Kontrol akses (IAM) pada cakupan yang sama dengan penetapan peran.

  10. Tetapkan peran kustom baru ke prinsipal. Untuk informasi selengkapnya, lihat Menetapkan peran Azure menggunakan portal Azure.

    Sekarang Anda dapat menghapus penetapan peran bawaan.

  11. Pada halaman Kontrol akses (IAM) pada cakupan yang sama, pilih tab Penetapan peran.

  12. Temukan penetapan peran utama dan bawaan.

  13. Hapus penetapan peran bawaan dari entitas utama. Untuk informasi selengkapnya, lihat Menghapus penetapan peran Azure.

Solusi 4 - Menjadikan penugasan peran layak

Untuk mengurangi jumlah penetapan peran dalam langganan dan Anda memiliki Microsoft Entra ID P2, buat penetapan peran yang memenuhi syarat di Microsoft Entra Privileged Identity Management alih-alih ditetapkan secara permanen.

Solusi 5 - Menambahkan langganan tambahan

Tambahkan langganan tambahan.

Gejala - Tidak ada lagi penetapan peran yang dapat dibuat di lingkup kelompok manajemen

Anda tidak dapat menetapkan peran pada lingkup grup manajemen.

Penyebab

Azure mendukung hingga 500 penetapan peran per grup pengelolaan. Batas ini berbeda dengan batas penugasan peran per langganan.

Catatan

Batas 500 penetapan peran per grup pengelolaan bersifat tetap dan tidak dapat ditingkatkan.

Solusi

Cobalah mengurangi jumlah penetapan peran di dalam grup manajemen. Untuk opsi yang memungkinkan, lihat Gejala - Tidak ada lagi penetapan peran yang dapat dibuat. Agar kueri mengambil sumber daya di tingkat grup manajemen, Anda harus membuat perubahan berikut pada kueri:

Mengganti

| where id startswith "/subscriptions"

Dengan

| where id startswith "/providers/Microsoft.Management/managementGroups"

Gejala - Tidak ada lagi definisi peran yang dapat dibuat

Saat mencoba membuat peran kustom baru, Anda mendapatkan pesan berikut:

Role definition limit exceeded. No more role definitions can be created (code: RoleDefinitionLimitExceeded)

Penyebab

Azure mendukung hingga 5000peran kustom dalam satu direktori. (Untuk Microsoft Azure yang dioperasikan oleh 21Vianet, batasnya adalah 2000 peran kustom.)

Solusi

Ikuti langkah-langkah ini untuk menemukan dan menghapus peran kustom Azure yang tidak digunakan.

  1. Masuk ke portal Azure dan buka Azure Resource Graph Explorer.

  2. Pilih Cakupan dan atur cakupan ke Direktori untuk kueri.

    Cuplikan layar Azure Resource Graph Explorer yang memperlihatkan pilihan Cakupan.

  3. Jalankan kueri berikut untuk mendapatkan semua peran kustom yang tidak memiliki penetapan peran apa pun:

    Kueri ini memeriksa penetapan peran aktif dan tidak mempertimbangkan penetapan peran kustom yang memenuhi syarat di Microsoft Entra Privileged Identity Management. Untuk mencantumkan penetapan peran kustom yang memenuhi syarat, Anda dapat menggunakan pusat admin Microsoft Entra, PowerShell, atau REST API. Untuk informasi selengkapnya, lihat Get-AzRoleEligibilityScheduleInstance atau Instans Jadwal Kelayakan Peran - Daftar untuk Cakupan.

    authorizationresources
    | where type =~ "microsoft.authorization/roledefinitions"
    | where tolower(properties.type) == "customrole"
    | extend rdId = tolower(id)
    | extend Scope = tolower(properties.assignableScopes)
    | join kind = leftouter (
    authorizationresources
      | where type =~ "microsoft.authorization/roleassignments"
      | extend RoleId = tolower(tostring(properties.roleDefinitionId))
      | summarize RoleAssignmentCount = count() by RoleId
    ) on $left.rdId == $right.RoleId
    | where isempty(RoleAssignmentCount)
    | project RoleDefinitionId = rdId, RoleDefinitionName = tostring(properties.roleName), Scope
    

    Berikut ini memperlihatkan contoh hasilnya:

    Cuplikan layar Azure Resource Graph Explorer yang memperlihatkan peran kustom tanpa penetapan peran.

    Kolom Deskripsi
    RoleDefinitionId ID peran kustom yang tidak digunakan.
    RoleDefinitionName Nama peran kustom yang tidak digunakan.
    Cakupan Cakupan yang bisa ditetapkan untuk peran kustom yang saat ini tidak digunakan.
  4. Buka cakupan (biasanya langganan) lalu buka halaman Kontrol akses (IAM).

  5. Pilih tab Peran untuk melihat daftar semua peran kustom dan bawaan.

  6. Di filter Jenis, pilih CustomRole untuk melihat peran kustom Anda.

  7. Pilih elipsis (...) untuk peran kustom yang ingin Anda hapus lalu pilih Hapus.

    Cuplikan layar daftar peran kustom yang dapat dipilih untuk dihapus.

Langkah berikutnya