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 memiliki izin untuk dibaca. Misalnya, jika Anda hanya memiliki izin untuk membaca penetapan peran di cakupan grup sumber daya, penetapan peran pada cakupan langganan tidak dikembalikan.

Gejala - Tidak ada lagi penetapan peran yang dapat dibuat

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. Anda harus mencoba mengurangi jumlah penetapan peran dalam langganan.

Catatan

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

Untuk mendapatkan jumlah penetapan peran, Anda dapat menampilkan bagan di halaman Kontrol akses (IAM) di portal Microsoft 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 terkelola) ke grup dan tetapkan peran ke grup sebagai gantinya. 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 mengganti beberapa penetapan peran dengan 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 ditetapkan.
    Cakupan Cakupan untuk penetapan peran, yang akan menjadi langganan, grup sumber daya, atau sumber daya.
    RoleDefinitionName Nama peran yang saat ini ditetapkan.
    count_ 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 prinsipal secara massal, lihat Menambahkan anggota grup secara massal di ID Microsoft Entra.

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

    Sekarang Anda dapat menemukan dan menghapus penetapan peran berbasis utama.

  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 juga akan melihat penetapan peran berbasis grup Anda.

    Cuplikan layar halaman Kontrol akses (IAM) yang memperlihatkan penetapan 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 mengurangi jumlah penetapan peran dalam langganan, hapus penetapan peran yang berlebihan. 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 dengan peran yang sama dan prinsipal yang sama, tetapi 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 ditetapkan.
    RoleDefinitionName Nama peran yang saat ini ditetapkan.
    PrincipalId ID prinsipal yang diberi peran.
    count_ Jumlah cakupan yang berbeda untuk penetapan peran dengan peran yang sama 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 penetapan peran. Penetapan peran lainnya dapat dihapus.

    Anda harus mengikuti praktik terbaik dengan hak istimewa paling sedikit saat menentukan penetapan peran mana yang dapat dihapus. Penetapan 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) pada cakupan untuk penetapan peran yang ingin Anda hapus.

  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 penetapan peran bawaan 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
    PrincipalId ID prinsipal yang diberi peran bawaan.
    Cakupan Cakupan untuk penetapan peran bawaan.
    count_ Jumlah penetapan peran bawaan dengan prinsipal yang sama dan cakupan yang sama.
    AllRD ID dan nama peran bawaan.
  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. Mencantumkan tindakan dan tindakan data untuk peran bawaan. 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 Microsoft Azure.

    Sekarang Anda dapat menghapus penetapan peran bawaan.

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

  12. Temukan penetapan peran utama dan bawaan.

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

Solusi 4 - Membuat penetapan peran memenuhi syarat

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 cakupan grup manajemen

Anda tidak dapat menetapkan peran di cakupan grup manajemen.

Penyebab

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

Catatan

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

Solusi

Cobalah untuk mengurangi jumlah penetapan peran 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:

Menggantikan

| where id startswith "/subscriptions"

With

| 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 dapat ditetapkan untuk peran kustom yang 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