Azure RBAC sınırlarıyla ilgili sorunları giderme
Bu makalede, Azure rol tabanlı erişim denetimindeki (Azure RBAC) sınırları aştığınızda bazı yaygın çözümler açıklanmaktadır.
Önkoşullar
- Azure Kaynak Grafı sorgularını çalıştırmak için okuyucu rolü.
- Rol atamaları eklemek veya kaldırmak için Rol Tabanlı Erişim Denetimi Yönetici rolü.
- Rol atamaları eklemek, rol atamalarını kaldırmak veya özel rolleri silmek için Kullanıcı Erişimi Yöneticisi rolü.
- Grup oluşturmak için Grup Yöneticisi veya Kullanıcı Yöneticisi rolü.
Not
Bu makalede kullanılan sorgular yalnızca okuma izinlerine sahip olduğunuz rol atamalarını veya özel rolleri döndürür. Örneğin, yalnızca kaynak grubu kapsamında rol atamalarını okuma izinleriniz varsa abonelik kapsamındaki rol atamaları döndürülemez.
Belirti - Başka rol ataması oluşturulamıyor
Rol atamaya çalıştığınızda aşağıdaki hata iletisini alırsınız:
No more role assignments can be created (code: RoleAssignmentLimitExceeded)
Neden
abonelik başına en fazla 4000 rol ataması Azure desteği. Bu sınır abonelikteki, kaynak grubundaki ve kaynak kapsamlarındaki rol atamalarını içerir ama yönetim grubu kapsamındaki atamaları içermez. Gelecekte zamanlanan uygun rol atamaları ve rol atamaları bu sınıra doğru sayılmaz. Abonelikteki rol atamalarının sayısını azaltmayı denemelisiniz.
Not
Abonelik başına 4000 rol ataması sınırı sabittir ve artırılamaz.
Rol atamalarının sayısını, Azure portalda Erişim denetimi (IAM) sayfasındaki grafikte görebilirsiniz. Aşağıdaki Azure PowerShell komutlarını da kullanabilirsiniz:
$scope = "/subscriptions/<subscriptionId>"
$ras = Get-AzRoleAssignment -Scope $scope | Where-Object {$_.scope.StartsWith($scope)}
$ras.Count
Çözüm 1 - Asıl tabanlı rol atamalarını grup tabanlı rol atamalarıyla değiştirme
Abonelikteki rol atamalarının sayısını azaltmak için gruplara sorumlular (kullanıcılar, hizmet sorumluları ve yönetilen kimlikler) ekleyin ve bunun yerine gruplara roller atayın. Sorumlular için birden çok rol atamasını bir grup için tek bir rol atamasıyla değiştirebilecekleri yerleri belirlemek için bu adımları izleyin.
Azure portalında oturum açın ve Azure Kaynak Grafı Gezgini'ni açın.
Kapsam'ı seçin ve sorgunun kapsamını ayarlayın.
Kiracınızın tamamını sorgulamak için genellikle kapsamı Dizin olarak ayarlarsınız, ancak kapsamı belirli aboneliklere göre daraltabilirsiniz.
Yetkilendirme kapsamını ayarla'yı seçin ve belirtilen kapsamdaki tüm kaynakları sorgulamak için yetkilendirme kapsamını yukarıda ve aşağıda At olarak ayarlayın.
Aynı role ve aynı kapsama sahip rol atamalarını almak için ancak farklı sorumlular için aşağıdaki sorguyu çalıştırın.
Bu sorgu etkin rol atamalarını denetler ve Microsoft Entra Privileged Identity Management'ta uygun rol atamalarını dikkate almaz. Uygun rol atamalarını listelemek için Microsoft Entra yönetim merkezini, PowerShell'i veya REST API'yi kullanabilirsiniz. Daha fazla bilgi için bkz . Get-AzRoleEligibilityScheduleInstance veya Rol Uygunluğu Zamanlama Örnekleri - Kapsam Listesi.
Rol atama koşullarını kullanıyorsanız veya rol ataması yönetimini koşullarla birlikte temsilci olarak kullanıyorsanız, Koşullar sorgusunu kullanmanız gerekir. Aksi takdirde Varsayılan sorguyu kullanın.
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
Aşağıda sonuçların bir örneği gösterilmektedir. count_ sütunu, aynı role ve aynı kapsamda atanan sorumluların sayısıdır. Sayı azalan düzende sıralanır.
Birden çok rol atamasını bir grup için tek bir rol atamasıyla değiştirmek istediğiniz satırı belirleyin.
Ayrıntılar bölmesini açmak için satırda Ayrıntıları göster'i seçin.
Sütun Açıklama RoleDefinitionId Şu anda atanmış rolün kimliği . Kapsam Abonelik, kaynak grubu veya kaynak olacak rol atamasının kapsamı. RoleDefinitionName Şu anda atanmış rolün adı . count_ Aynı role ve aynı kapsamda atanan sorumluların sayısı. AllPrincipals Aynı role ve aynı kapsamda atanan asıl kimliklerin listesi. Rol ve kapsamı almak için RoleDefinitionId, RoleDefinitionName ve Scope kullanın.
Aynı rol atamasına sahip asıl kimliklerin listesini almak için AllPrincipals kullanın.
Bir Microsoft Entra grubu oluşturun. Daha fazla bilgi için bkz . Microsoft Entra gruplarını ve grup üyeliğini yönetme.
AllPrincipals'dan sorumluları gruba ekleyin.
Sorumluları toplu olarak ekleme hakkında bilgi için bkz . Microsoft Entra Id'de grup üyelerini toplu ekleme.
Rolü, aynı kapsamda oluşturduğunuz gruba atayın. Daha fazla bilgi edinmek için bkz. Azure portal kullanarak Azure rolleri atama.
Artık asıl tabanlı rol atamalarını bulabilir ve kaldırabilirsiniz.
Asıl kimliklerden asıl adları alın.
- Azure portalını kullanmak için bkz . Kullanıcının profil bilgilerini ve ayarlarını ekleme veya güncelleştirme.
- PowerShell'i kullanmak için bkz . Get-MgUser.
- Azure, CLI kullanmak için bkz . az ad user show.
Erişim denetimi (IAM) sayfasını rol atamalarıyla aynı kapsamda açın.
Rol atamaları sekmesini seçin.
Rol atamalarını filtrelemek için Rol filtresini seçin ve ardından rol adını seçin.
Asıl tabanlı rol atamalarını bulun.
Grup tabanlı rol atamanızı da görmeniz gerekir.
Asıl tabanlı rol atamalarını seçin ve kaldırın. Daha fazla bilgi için, bkz. Azure rol atamalarını kaldırma.
Çözüm 2 - Yedekli rol atamalarını kaldırma
Abonelikteki rol atamalarının sayısını azaltmak için yedekli rol atamalarını kaldırın. Daha yüksek bir kapsamdaki bir rol ataması zaten erişim izni verdikten sonra daha düşük bir kapsamdaki yedekli rol atamalarının kaldırılma olasılığını belirlemek için bu adımları izleyin.
Azure portalında oturum açın ve Azure Kaynak Grafı Gezgini'ni açın.
Kapsam'ı seçin ve sorgunun kapsamını ayarlayın.
Kiracınızın tamamını sorgulamak için genellikle kapsamı Dizin olarak ayarlarsınız, ancak kapsamı belirli aboneliklere göre daraltabilirsiniz.
Yetkilendirme kapsamını ayarla'yı seçin ve belirtilen kapsamdaki tüm kaynakları sorgulamak için yetkilendirme kapsamını yukarıda ve aşağıda At olarak ayarlayın.
Aynı role ve aynı sorumluya sahip ancak farklı kapsamlarda rol atamalarını almak için aşağıdaki sorguyu çalıştırın.
Bu sorgu etkin rol atamalarını denetler ve Microsoft Entra Privileged Identity Management'ta uygun rol atamalarını dikkate almaz. Uygun rol atamalarını listelemek için Microsoft Entra yönetim merkezini, PowerShell'i veya REST API'yi kullanabilirsiniz. Daha fazla bilgi için bkz . Get-AzRoleEligibilityScheduleInstance veya Rol Uygunluğu Zamanlama Örnekleri - Kapsam Listesi.
Rol atama koşullarını kullanıyorsanız veya rol ataması yönetimini koşullarla birlikte temsilci olarak kullanıyorsanız, Koşullar sorgusunu kullanmanız gerekir. Aksi takdirde Varsayılan sorguyu kullanın.
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
Aşağıda sonuçların bir örneği gösterilmektedir. count_ sütunu, aynı role ve aynı sorumluya sahip rol atamaları için farklı kapsamların sayısıdır. Sayı azalan düzende sıralanır.
Sütun Açıklama RoleDefinitionId Şu anda atanmış rolün kimliği . RoleDefinitionName Şu anda atanmış rolün adı . PrincipalId Role atanan sorumlunun kimliği. count_ Aynı role ve aynı sorumluya sahip rol atamaları için farklı kapsamların sayısı. Kapsamlar Aynı role ve aynı sorumluya sahip rol atamaları için kapsamlar. Yedekli rol atamalarını kaldırmak istediğiniz satırı belirleyin.
Ayrıntılar bölmesini açmak için bir satırda Ayrıntılara bakın'ı seçin.
Rol ve asıl kimliği almak için RoleDefinitionId, RoleDefinitionName ve PrincipalId kullanın.
Aynı role ve aynı sorumluya ait kapsamların listesini almak için Kapsamlar'ı kullanın.
Rol ataması için hangi kapsamın gerekli olduğunu belirleyin. Diğer rol atamaları kaldırılabilir.
Hangi rol atamalarının kaldırılabileceğini belirlerken en iyi ayrıcalık uygulamalarını izlemeniz gerekir. Üst kapsamdaki rol ataması, sorumluya gerekenden daha fazla erişim vermekte olabilir. Bu durumda, daha yüksek kapsamlı rol atamasını kaldırmanız gerekir. Örneğin, daha düşük bir kaynak grubu kapsamındaki bir Sanal Makine Katkıda Bulunanı rol ataması gerekli erişimi verince kullanıcının abonelik kapsamında Sanal Makine Katkıda Bulunanı rol ataması gerekli olmayabilir.
Asıl kimlikten asıl adı alın.
- Azure portalını kullanmak için bkz . Kullanıcının profil bilgilerini ve ayarlarını ekleme veya güncelleştirme.
- PowerShell'i kullanmak için bkz . Get-MgUser.
- Azure, CLI kullanmak için bkz . az ad user show.
Kaldırmak istediğiniz rol atamasının kapsamındaki Erişim denetimi (IAM) sayfasını açın.
Rol atamaları sekmesini seçin.
Rol atamalarını filtrelemek için Rol filtresini seçin ve ardından rol adını seçin.
Sorumluyu bulun.
Rol atamasını seçin ve kaldırın. Daha fazla bilgi için, bkz. Azure rol atamalarını kaldırma.
Çözüm 3 - Birden çok yerleşik rol atamalarını özel rol atamasıyla değiştirme
Abonelikteki rol atamalarının sayısını azaltmak için, birden çok yerleşik rol atamasını tek bir özel rol atamasıyla değiştirin. Birden çok yerleşik rol atamasını değiştirme olasılığını belirlemek için bu adımları izleyin.
Azure portalında oturum açın ve Azure Kaynak Grafı Gezgini'ni açın.
Kapsam'ı seçin ve sorgunun kapsamını ayarlayın.
Kiracınızın tamamını sorgulamak için genellikle kapsamı Dizin olarak ayarlarsınız, ancak kapsamı belirli aboneliklere göre daraltabilirsiniz.
Aynı sorumluya ve aynı kapsama sahip ancak farklı yerleşik rollere sahip rol atamaları almak için aşağıdaki sorguyu çalıştırın.
Bu sorgu etkin rol atamalarını denetler ve Microsoft Entra Privileged Identity Management'ta uygun rol atamalarını dikkate almaz. Uygun rol atamalarını listelemek için Microsoft Entra yönetim merkezini, PowerShell'i veya REST API'yi kullanabilirsiniz. Daha fazla bilgi için bkz . Get-AzRoleEligibilityScheduleInstance veya Rol Uygunluğu Zamanlama Örnekleri - Kapsam Listesi.
Rol atama koşullarını kullanıyorsanız veya rol ataması yönetimini koşullarla birlikte temsilci olarak kullanıyorsanız, Koşullar sorgusunu kullanmanız gerekir. Aksi takdirde Varsayılan sorguyu kullanın.
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
Aşağıda sonuçların bir örneği gösterilmektedir. count_ sütunu, aynı sorumluya ve aynı kapsama sahip farklı yerleşik rol atamalarının sayısıdır. Sayı azalan düzende sıralanır.
Sütun Açıklama PrincipalId Yerleşik rollere atanan sorumlunun kimliği. Kapsam Yerleşik rol atamalarının kapsamı. count_ Aynı sorumluya ve aynı kapsama sahip yerleşik rol atamalarının sayısı. AllRD Yerleşik rollerin kimliği ve adı. Ayrıntılar bölmesini açmak için bir satırda Ayrıntılara bakın'ı seçin.
Özel bir rolde birleştirilebilecek yerleşik rolleri görmek için AllRD'yi kullanın.
Yerleşik roller için eylemleri ve veri eylemlerini listeleyin. Daha fazla bilgi için bkz. Azure rol tanımlarını veya Azure yerleşik rollerini listeleme
Yerleşik roller olarak tüm eylemleri ve veri eylemlerini içeren özel bir rol oluşturun. Özel rol oluşturmayı kolaylaştırmak için, yerleşik rollerden birini kopyalayarak işe başlayabilirsiniz. Daha fazla bilgi için bkz . Azure portalını kullanarak Azure özel rolleri oluşturma veya güncelleştirme.
Asıl kimlikten asıl adı alın.
- Azure portalını kullanmak için bkz . Kullanıcının profil bilgilerini ve ayarlarını ekleme veya güncelleştirme.
- PowerShell'i kullanmak için bkz . Get-MgUser.
- Azure, CLI kullanmak için bkz . az ad user show.
Erişim denetimi (IAM) sayfasını rol atamalarıyla aynı kapsamda açın.
Sorumluya yeni özel rolü atayın. Daha fazla bilgi edinmek için bkz. Azure portal kullanarak Azure rolleri atama.
Artık yerleşik rol atamalarını kaldırabilirsiniz.
Aynı kapsamdaki Erişim denetimi (IAM) sayfasında Rol atamaları sekmesini seçin.
Sorumlu ve yerleşik rol atamalarını bulun.
Yerleşik rol atamalarını sorumludan kaldırın. Daha fazla bilgi için, bkz. Azure rol atamalarını kaldırma.
Çözüm 4 - Rol atamalarını uygun hale getirme
Abonelikteki rol atamalarının sayısını azaltmak ve Microsoft Entra Id P2'niz olması için rol atamalarını kalıcı olarak atanmak yerine Microsoft Entra Privileged Identity Management'ta uygun hale getirin.
Çözüm 5 - Ek abonelik ekleme
Bir abonelik daha ekleyin.
Belirti - Yönetim grubu kapsamında başka rol ataması oluşturulamıyor
Yönetim grubu kapsamında rol atayamazsınız.
Neden
yönetim grubu başına en fazla 500 rol ataması Azure desteği. Bu sınır abonelik başına rol ataması sayısı sınırından faklıdır.
Not
Yönetim grubu başına 500 rol ataması sınırı sabittir ve artırılamaz.
Çözüm
Yönetim grubundaki rol atamalarının sayısını azaltmayı deneyin. Olası seçenekler için bkz . Belirti - Başka rol ataması oluşturulamıyor. Sorguların yönetim grubu düzeyindeki kaynakları alması için sorgularda aşağıdaki değişikliği yapmanız gerekir:
Replace
| where id startswith "/subscriptions"
With
| where id startswith "/providers/Microsoft.Management/managementGroups"
Belirti - Başka rol tanımı oluşturulamıyor
Yeni bir özel rol oluşturmaya çalıştığınızda aşağıdaki iletiyi alırsınız:
Role definition limit exceeded. No more role definitions can be created (code: RoleDefinitionLimitExceeded)
Neden
Azure desteği dizinde en fazla 5000 özel rol vardır. (21Vianet tarafından sağlanan Microsoft Azure için sınır 2000 özel roldür.)
Çözüm
Kullanılmayan Azure özel rollerini bulmak ve silmek için bu adımları izleyin.
Azure portalında oturum açın ve Azure Kaynak Grafı Gezgini'ni açın.
Kapsam'ı seçin ve sorgunun kapsamını Dizin olarak ayarlayın.
Herhangi bir rol ataması olmayan tüm özel rolleri almak için aşağıdaki sorguyu çalıştırın:
Bu sorgu etkin rol atamalarını denetler ve Microsoft Entra Privileged Identity Management'ta uygun özel rol atamalarını dikkate almaz. Uygun özel rol atamalarını listelemek için Microsoft Entra yönetim merkezini, PowerShell'i veya REST API'yi kullanabilirsiniz. Daha fazla bilgi için bkz . Get-AzRoleEligibilityScheduleInstance veya Rol Uygunluğu Zamanlama Örnekleri - Kapsam Listesi.
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
Aşağıda sonuçların bir örneği gösterilmektedir:
Sütun Açıklama RoleDefinitionId Kullanılmayan özel rolün kimliği. RoleDefinitionName Kullanılmayan özel rolün adı. Kapsam Kullanılmayan özel rol için atanabilir kapsamlar . Kapsamı (genellikle abonelik) açın ve ardından Erişim denetimi (IAM) sayfasını açın.
Tüm yerleşik ve özel rollerin listesini görmek için Roller sekmesini seçin.
Tür filtresinde CustomRole'ı seçerek yalnızca özel rollerinizi görün.
Silmek istediğiniz özel rol için üç noktayı (...) ve ardından Sil'i seçin.