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.

Prerequisites

Note

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)

Cause

Azure, abonelik başına en fazla 4000 rol atamasını destekler. Bu sınır, abonelik, kaynak grubu ve kaynak kapsamlarındaki rol atamalarını içerir, ancak yönetim grubu kapsamındakileri içermez. Gelecekte zamanlanan uygun rol atamaları ve diğer rol atamaları bu sınıra dahil edilmez. Abonelikteki rol atamalarının sayısını azaltmayı denemelisiniz.

Note

Abonelik başına 4000 rol ataması sınırı sabittir ve artırılamaz.

Rol atamalarının sayısını almak için grafiği Azure portalındaki Erişim denetimi (IAM) sayfasında görüntüleyebilirsiniz. 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.

  1. Azure portalında oturum açın ve Azure Kaynak Grafı Gezgini'ni açın.

  2. 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.

    Kapsam seçimini gösteren Azure Kaynak Grafı Gezgini'nin ekran görüntüsü.

  3. 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.

    Yetkilendirme kapsamını ayarla bölmesini gösteren Azure Kaynak Grafı Gezgini'nin ekran görüntüsü.

  4. Farklı sorumlular için aynı role ve aynı kapsama sahip rol atamalarını almak amacıyla 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 koşullarla rol ataması yönetimini devrediyorsanı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.

    Aynı role ve aynı kapsama sahip ancak farklı sorumlular için rol atamalarını gösteren Azure Kaynak Grafı Gezgini'nin ekran görüntüsü.

  5. Birden çok rol atamasını bir grup için tek bir rol atamasıyla değiştirmek istediğiniz satırı belirleyin.

  6. Ayrıntılar bölmesini açmak için satırda Ayrıntıları göster'i seçin.

    Aynı role ve aynı kapsama sahip ancak farklı sorumlular için rol atamalarını gösteren Ayrıntılar bölmesinin ekran görüntüsü.

    Column Description
    RoleDefinitionId Atanmış rolün şu anki ID'si.
    Scope Rol atamasının kapsamı, bir abonelik, kaynak grubu veya kaynak olacaktır.
    RoleDefinitionName Şu anda atanmış rolün adı.
    count_ Aynı role ve aynı kapsamda atanan sorumluların sayısı.
    AllPrincipals Aynı kapsam ve aynı role atanan temel kimliklerin listesi.
  7. Rol ve kapsamı almak için RoleDefinitionId, RoleDefinitionName ve Scope kullanın.

  8. Aynı rol atamasına sahip asıl kimliklerin listesini almak için AllPrincipals kullanın.

  9. Bir Microsoft Entra grubu oluşturun. Daha fazla bilgi için bkz. Microsoft Entra gruplarını ve grup üyeliğini yönetme.

  10. AllPrincipals'dan sorumluları gruba ekleyin.

    Sorumluları toplu olarak ekleme hakkında bilgi için bkz. Microsoft Entra ID'de grup üyelerini toplu ekleme.

  11. Rolü, aynı kapsamda oluşturduğunuz gruba atayın. Daha fazla bilgi için bkz. Azure portalını kullanarak Azure rolleri atama.

    Artık asıl tabanlı rol atamalarını bulabilir ve kaldırabilirsiniz.

  12. Asıl kimlik numaralarından asıl adları alın.

  13. Erişim denetimi (IAM) sayfasını rol atamalarıyla aynı kapsamda açın.

  14. Rol atamaları sekmesini seçin.

  15. Rol atamalarını filtrelemek için Rol filtresini seçin ve ardından rol adını seçin.

  16. Asıl tabanlı rol atamalarını bulun.

    Grup tabanlı rol atamanızı da görmeniz gerekir.

    Aynı role sahip ve aynı kapsamda, ancak farklı sorumlular için rol atamalarını gösteren Erişim denetimi (IAM) sayfasının ekran görüntüsü.

  17. 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 veriyorsa, daha düşük bir kapsamdaki yedekli rol atamalarının kaldırılabileceğini tanımlamak için bu adımları izleyin.

  1. Azure portalında oturum açın ve Azure Kaynak Grafı Gezgini'ni açın.

  2. 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.

    Kapsam seçimini gösteren Azure Kaynak Grafı Gezgini'nin ekran görüntüsü.

  3. 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.

    Yetkilendirme kapsamını ayarla bölmesini gösteren Azure Kaynak Grafı Gezgini'nin ekran görüntüsü.

  4. 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 koşullarla rol ataması yönetimini devrediyorsanı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.

    Aynı rol ve aynı sorumlu için ancak farklı kapsamlarda rol atamalarını gösteren Azure Kaynak Grafı Gezgini'nin ekran görüntüsü.

    Column Description
    RoleDefinitionId Atanmış rolün şu anki ID'si.
    RoleDefinitionName Şu anda atanmış rolün adı.
    PrincipalId Rol atanmış esas kişinin kimliği.
    count_ Aynı role ve aynı sorumluya sahip rol atamaları için farklı kapsamların sayısı.
    Scopes Aynı role ve aynı sorumluya sahip rol atamaları için kapsamlar.
  5. Yedekli rol atamalarını kaldırmak istediğiniz satırı belirleyin.

  6. Ayrıntılar bölmesini açmak için bir satırda Ayrıntılara bakın'ı seçin.

    Aynı rol ve aynı sorumlu için ancak farklı kapsamlarda rol atamalarını gösteren Ayrıntılar bölmesinin ekran görüntüsü.

  7. Rol ve asıl kimliği almak için RoleDefinitionId, RoleDefinitionName ve PrincipalId kullanın.

  8. Aynı role ve aynı sorumluya ait kapsamların listesini almak için Kapsamlar'ı kullanın.

  9. 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 asgari ayrıcalık en iyi uygulamalarını takip etmelisiniz. Ü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 Sanal Makine Katkıda Bulunan rol ataması gerekli erişimi sağladığında, kullanıcının abonelik kapsamındaki Sanal Makine Katkıda Bulunan rol ataması gerekli olmayabilir.

  10. Asıl kimlikten asıl adı alın.

  11. Kaldırmak istediğiniz rol atamasının kapsamındaki Erişim denetimi (IAM) sayfasını açın.

  12. Rol atamaları sekmesini seçin.

  13. Rol atamalarını filtrelemek için Rol filtresini seçin ve ardından rol adını seçin.

  14. Sorumluyu bulun.

  15. 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.

  1. Azure portalında oturum açın ve Azure Kaynak Grafı Gezgini'ni açın.

  2. 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.

    Kapsam seçimini gösteren Azure Kaynak Grafı Gezgini'nin ekran görüntüsü.

  3. 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 koşullarla rol ataması yönetimini devrediyorsanı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.

    Aynı sorumlu ve aynı kapsama sahip rol atamalarını gösteren Azure Kaynak Grafı Gezgini'nin ekran görüntüsü.

    Column Description
    PrincipalId Yerleşik rollere atanan sorumlunun kimliği.
    Scope Yerleşik rol atanımları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ı.
  4. Ayrıntılar bölmesini açmak için bir satırda Ayrıntılara bakın'ı seçin.

    Aynı sorumlu ve aynı kapsama sahip rol atamalarını gösteren Ayrıntılar bölmesinin ekran görüntüsü.

  5. Özel bir rolde birleştirilebilecek yerleşik rolleri görmek için AllRD'yi kullanın.

  6. 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.

  7. 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.

  8. Asıl kimlikten asıl adı alın.

  9. Erişim denetimi (IAM) sayfasını rol atamalarıyla aynı kapsamda açın.

  10. Sorumluya yeni özel rolü atayın. Daha fazla bilgi için bkz. Azure portalını kullanarak Azure rolleri atama.

    Artık yerleşik rol atamalarını kaldırabilirsiniz.

  11. Aynı kapsamdaki Erişim denetimi (IAM) sayfasında Rol atamaları sekmesini seçin.

  12. Temel ve dahili rol atamalarını bulun.

  13. 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 varsa, rol atamalarını Microsoft Entra Privileged Identity Management'ta kalıcı olarak atamak yerine uygun hale getirin.

Çözüm 5 - Ek abonelik ekleme

Ek abonelik ekleyin.

Belirti - Yönetim grubu kapsamında başka rol ataması oluşturulamıyor

Yönetim grubu kapsamında rol atayamazsınız.

Cause

Azure, yönetim grubu başına en fazla 500 rol atamasını destekler. Bu sınır, abonelik başına rol ataması sınırından farklıdır.

Note

Yönetim grubu başına 500 rol ataması sınırı sabittir ve artırılamaz.

Solution

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)

Cause

Azure, bir dizinde en fazla 5000 özel rolü destekler. (21Vianet tarafından sağlanan Microsoft Azure için sınır 2000 özel roldür.)

Solution

Kullanılmayan Azure özel rollerini bulmak ve silmek için bu adımları izleyin.

  1. Azure portalında oturum açın ve Azure Kaynak Grafı Gezgini'ni açın.

  2. Kapsam'ı seçin ve sorgunun kapsamını Dizin olarak ayarlayın.

    Kapsam seçimini gösteren Azure Kaynak Grafı Gezgini'nin ekran görüntüsü.

  3. 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:

    Rol atamaları olmadan özel rolleri gösteren Azure Kaynak Grafı Gezgini'nin ekran görüntüsü.

    Column Description
    RoleDefinitionId Kullanılmayan özel rolün kimliği.
    RoleDefinitionName Kullanılmayan özel rolün adı.
    Scope Kullanılmayan özel rolün atanabilir kapsamları.
  4. Kapsamı (genellikle abonelik) açın ve ardından Erişim denetimi (IAM) sayfasını açın.

  5. Tüm yerleşik ve özel rollerin listesini görmek için Roller sekmesini seçin.

  6. Tür filtresinde CustomRole'ı seçerek yalnızca özel rollerinizi görün.

  7. Silmek istediğiniz özel rol için üç noktayı (...) ve ardından Sil'i seçin.

    Silinmek üzere seçilebilen özel rollerin listesinin ekran görüntüsü.

Sonraki Adımlar