Rozwiązywanie problemów z limitami kontroli dostępu opartej na rolach platformy Azure

W tym artykule opisano niektóre typowe rozwiązania w przypadku przekroczenia limitów kontroli dostępu na podstawie ról (RBAC platformy Azure).

Wymagania wstępne

Uwaga

Zapytania używane w tym artykule zwracają tylko przypisania ról lub role niestandardowe, do których masz uprawnienia do odczytu. Jeśli na przykład masz uprawnienia do odczytywania przypisań ról w zakresie grupy zasobów, przypisania ról w zakresie subskrypcji nie są zwracane.

Objaw — nie można utworzyć więcej przypisań ról

Podczas próby przypisania roli zostanie wyświetlony następujący komunikat o błędzie:

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

Przyczyna

pomoc techniczna platformy Azure do 4000 przypisań ról na subskrypcję. Ten limit obejmuje przypisania ról do zakresów subskrypcji, grupy zasobów i zasobów, ale nie do zakresu grupy zarządzania. Należy spróbować zmniejszyć liczbę przypisań ról w subskrypcji.

Uwaga

Limit przydziałów ról 4000 na subskrypcję jest stały i nie można go zwiększyć.

Aby sprawdzić liczbę przypisań ról, możesz wyświetlić wykres na stronie Kontrola dostępu (zarządzanie dostępem i tożsamościami) w witrynie Azure Portal. Możesz też skorzystać z następujących poleceń programu Azure PowerShell:

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

Rozwiązanie 1 — zastępowanie przypisań ról opartych na jednostkach za pomocą przypisań ról opartych na grupach

Aby zmniejszyć liczbę przypisań ról w subskrypcji, dodaj jednostki (użytkowników, jednostki usługi i tożsamości zarządzane) do grup i przypisz role do grup. Wykonaj następujące kroki, aby określić, gdzie można zastąpić wiele przypisań ról dla podmiotów zabezpieczeń pojedynczym przypisaniem roli dla grupy.

  1. Zaloguj się do witryny Azure Portal i otwórz Eksploratora usługi Azure Resource Graph.

  2. Wybierz pozycję Zakres i ustaw zakres zapytania.

    Zazwyczaj ustawiasz zakres na Katalog , aby wykonywać zapytania względem całej dzierżawy, ale zakres można zawęzić do określonych subskrypcji.

    Zrzut ekranu przedstawiający Eksploratora usługi Azure Resource Graph z zaznaczonym zakresem.

  3. Wybierz pozycję Ustaw zakres autoryzacji i ustaw zakres autoryzacji na Wartość W, powyżej i poniżej , aby wysłać zapytanie do wszystkich zasobów w określonym zakresie.

    Zrzut ekranu eksploratora usługi Azure Resource Graph przedstawiający okienko Ustawianie zakresu autoryzacji.

  4. Uruchom następujące zapytanie, aby uzyskać przypisania ról z tą samą rolą i w tym samym zakresie, ale dla różnych podmiotów zabezpieczeń.

    To zapytanie sprawdza aktywne przypisania ról i nie uwzględnia kwalifikujących się przypisań ról w usłudze Microsoft Entra Privileged Identity Management. Aby wyświetlić listę kwalifikujących się przypisań ról, możesz użyć centrum administracyjnego firmy Microsoft, programu PowerShell lub interfejsu API REST. Aby uzyskać więcej informacji, zobacz Get-AzRoleEligibilityScheduleInstance lub Wystąpienia harmonogramu uprawnień roli — lista dla zakresu.

    Jeśli używasz warunków przypisania roli lub delegowania zarządzania przypisaniem ról z warunkami, należy użyć zapytania Warunki. W przeciwnym razie użyj zapytania domyślnego.

    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
    

    Poniżej przedstawiono przykład wyników. Kolumna count_ jest liczbą podmiotów zabezpieczeń przypisanych do tej samej roli i w tym samym zakresie. Liczba jest sortowana w kolejności malejącej.

    Zrzut ekranu eksploratora usługi Azure Resource Graph przedstawiający przypisania ról z tą samą rolą i w tym samym zakresie, ale dla różnych podmiotów zabezpieczeń.

  5. Zidentyfikuj wiersz, w którym chcesz zastąpić wiele przypisań ról pojedynczym przypisaniem roli dla grupy.

  6. W wierszu wybierz pozycję Zobacz szczegóły , aby otworzyć okienko Szczegóły .

    Zrzut ekranu przedstawiający okienko Szczegóły zawierające przypisania ról z tą samą rolą i w tym samym zakresie, ale dla różnych podmiotów zabezpieczeń.

    Kolumna opis
    Identyfikator definicji roli Identyfikator aktualnie przypisanej roli.
    Scope Zakres przypisania roli, który będzie subskrypcją, grupą zasobów lub zasobem.
    RoleDefinitionName Nazwa aktualnie przypisanej roli.
    liczba_ Liczba podmiotów zabezpieczeń przypisanych do tej samej roli i w tym samym zakresie.
    AllPrincipals Lista identyfikatorów podmiotów zabezpieczeń przypisanych do tej samej roli i w tym samym zakresie.
  7. Użyj wartości RoleDefinitionId, RoleDefinitionName i Scope , aby uzyskać rolę i zakres.

  8. Użyj opcji AllPrincipals , aby uzyskać listę identyfikatorów podmiotów zabezpieczeń z tym samym przypisaniem roli.

  9. Utwórz grupę Microsoft Entra. Aby uzyskać więcej informacji, zobacz Zarządzanie grupami i członkostwem w grupach firmy Microsoft.

  10. Dodaj podmioty zabezpieczeń z grupy AllPrincipals .

    Aby uzyskać informacje na temat zbiorczego dodawania podmiotów zabezpieczeń, zobacz Zbiorcze dodawanie członków grupy w identyfikatorze Entra firmy Microsoft.

  11. Przypisz rolę do grupy utworzonej w tym samym zakresie. Aby uzyskać więcej informacji, zobacz przypisywanie ról Azure za pomocą portalu Azure.

    Teraz możesz znaleźć i usunąć przypisania ról oparte na jednostkach.

  12. Pobierz nazwy główne z identyfikatorów podmiotów zabezpieczeń.

  13. Otwórz stronę Kontrola dostępu (IAM) w tym samym zakresie co przypisania ról.

  14. Wybierz kartę Przypisania roli.

  15. Aby filtrować przypisania ról, wybierz filtr Rola , a następnie wybierz nazwę roli.

  16. Znajdź przypisania ról oparte na jednostkach.

    Powinno być również widoczne przypisanie roli opartej na grupach.

    Zrzut ekranu przedstawiający stronę Kontrola dostępu (Zarządzanie dostępem i tożsamościami), która pokazuje przypisania ról z tą samą rolą i w tym samym zakresie, ale dla różnych podmiotów zabezpieczeń.

  17. Wybierz i usuń przypisania ról oparte na jednostkach. Aby uzyskać więcej informacji, zobacz Usuwanie przypisań ról platformy Azure.

Rozwiązanie 2 — usuwanie nadmiarowych przypisań ról

Aby zmniejszyć liczbę przypisań ról w subskrypcji, usuń nadmiarowe przypisania ról. Wykonaj następujące kroki, aby określić, gdzie nadmiarowe przypisania ról w niższym zakresie mogą zostać potencjalnie usunięte, ponieważ przypisanie roli w wyższym zakresie już udziela dostępu.

  1. Zaloguj się do witryny Azure Portal i otwórz Eksploratora usługi Azure Resource Graph.

  2. Wybierz pozycję Zakres i ustaw zakres zapytania.

    Zazwyczaj ustawiasz zakres na Katalog , aby wykonywać zapytania względem całej dzierżawy, ale zakres można zawęzić do określonych subskrypcji.

    Zrzut ekranu przedstawiający Eksploratora usługi Azure Resource Graph z zaznaczonym zakresem.

  3. Wybierz pozycję Ustaw zakres autoryzacji i ustaw zakres autoryzacji na Wartość W, powyżej i poniżej , aby wysłać zapytanie do wszystkich zasobów w określonym zakresie.

    Zrzut ekranu eksploratora usługi Azure Resource Graph przedstawiający okienko Ustawianie zakresu autoryzacji.

  4. Uruchom następujące zapytanie, aby uzyskać przypisania ról z tą samą rolą i tym samym podmiotem zabezpieczeń, ale w różnych zakresach.

    To zapytanie sprawdza aktywne przypisania ról i nie uwzględnia kwalifikujących się przypisań ról w usłudze Microsoft Entra Privileged Identity Management. Aby wyświetlić listę kwalifikujących się przypisań ról, możesz użyć centrum administracyjnego firmy Microsoft, programu PowerShell lub interfejsu API REST. Aby uzyskać więcej informacji, zobacz Get-AzRoleEligibilityScheduleInstance lub Wystąpienia harmonogramu uprawnień roli — lista dla zakresu.

    Jeśli używasz warunków przypisania roli lub delegowania zarządzania przypisaniem ról z warunkami, należy użyć zapytania Warunki. W przeciwnym razie użyj zapytania domyślnego.

    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
    

    Poniżej przedstawiono przykład wyników. Kolumna count_ to liczba różnych zakresów przypisań ról z tą samą rolą i tym samym podmiotem zabezpieczeń. Liczba jest sortowana w kolejności malejącej.

    Zrzut ekranu eksploratora usługi Azure Resource Graph przedstawiający przypisania ról dla tej samej roli i tego samego podmiotu zabezpieczeń, ale w różnych zakresach.

    Kolumna opis
    Identyfikator definicji roli Identyfikator aktualnie przypisanej roli.
    RoleDefinitionName Nazwa aktualnie przypisanej roli.
    Identyfikator podmiotu zabezpieczeń Identyfikator podmiotu zabezpieczeń, któremu przypisano rolę.
    liczba_ Liczba różnych zakresów przypisań ról z tą samą rolą i tym samym podmiotem zabezpieczeń.
    Zakresy Zakresy przypisań ról z tą samą rolą i tym samym podmiotem zabezpieczeń.
  5. Zidentyfikuj wiersz, w którym chcesz usunąć nadmiarowe przypisania ról.

  6. W wierszu wybierz pozycję Zobacz szczegóły , aby otworzyć okienko Szczegóły .

    Zrzut ekranu przedstawiający okienko Szczegóły zawierające przypisania ról dla tej samej roli i tego samego podmiotu zabezpieczeń, ale w różnych zakresach.

  7. Użyj wartości RoleDefinitionId, RoleDefinitionName i PrincipalId , aby uzyskać identyfikator roli i podmiotu zabezpieczeń.

  8. Użyj zakresów , aby uzyskać listę zakresów dla tej samej roli i tego samego podmiotu zabezpieczeń.

  9. Określ, który zakres jest wymagany dla przypisania roli. Inne przypisania ról można usunąć.

    Podczas określania, które przypisania ról można usunąć, należy postępować zgodnie z najlepszymi rozwiązaniami dotyczącymi najniższych uprawnień . Przypisanie roli w wyższym zakresie może przyznać więcej dostępu do podmiotu zabezpieczeń niż wymagane. W takim przypadku należy usunąć przypisanie roli z wyższym zakresem. Na przykład użytkownik może nie potrzebować przypisania roli Współautor maszyny wirtualnej w zakresie subskrypcji, gdy przypisanie roli Współautor maszyny wirtualnej w niższym zakresie grupy zasobów udziela wymaganego dostępu.

  10. Pobierz nazwę główną z identyfikatora podmiotu zabezpieczeń.

  11. Otwórz stronę Kontrola dostępu (IAM) w zakresie przypisania roli, które chcesz usunąć.

  12. Wybierz kartę Przypisania roli.

  13. Aby filtrować przypisania ról, wybierz filtr Rola , a następnie wybierz nazwę roli.

  14. Znajdź podmiot zabezpieczeń.

  15. Wybierz i usuń przypisanie roli. Aby uzyskać więcej informacji, zobacz Usuwanie przypisań ról platformy Azure.

Rozwiązanie 3 — zastępowanie wielu wbudowanych przypisań ról niestandardowym przypisaniem roli

Aby zmniejszyć liczbę przypisań ról w subskrypcji, zastąp wiele wbudowanych przypisań ról pojedynczym przypisaniem roli niestandardowej. Wykonaj następujące kroki, aby określić, gdzie potencjalnie można zamienić wiele wbudowanych przypisań ról.

  1. Zaloguj się do witryny Azure Portal i otwórz Eksploratora usługi Azure Resource Graph.

  2. Wybierz pozycję Zakres i ustaw zakres zapytania.

    Zazwyczaj ustawiasz zakres na Katalog , aby wykonywać zapytania względem całej dzierżawy, ale zakres można zawęzić do określonych subskrypcji.

    Zrzut ekranu przedstawiający Eksploratora usługi Azure Resource Graph z zaznaczonym zakresem.

  3. Uruchom następujące zapytanie, aby uzyskać przypisania ról z tym samym zakresem podmiotu zabezpieczeń i tego samego zakresu, ale z różnymi wbudowanymi rolami.

    To zapytanie sprawdza aktywne przypisania ról i nie uwzględnia kwalifikujących się przypisań ról w usłudze Microsoft Entra Privileged Identity Management. Aby wyświetlić listę kwalifikujących się przypisań ról, możesz użyć centrum administracyjnego firmy Microsoft, programu PowerShell lub interfejsu API REST. Aby uzyskać więcej informacji, zobacz Get-AzRoleEligibilityScheduleInstance lub Wystąpienia harmonogramu uprawnień roli — lista dla zakresu.

    Jeśli używasz warunków przypisania roli lub delegowania zarządzania przypisaniem ról z warunkami, należy użyć zapytania Warunki. W przeciwnym razie użyj zapytania domyślnego.

    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
    

    Poniżej przedstawiono przykład wyników. Kolumna count_ to liczba różnych wbudowanych przypisań ról z tym samym zakresem podmiotu zabezpieczeń i tym samym zakresem. Liczba jest sortowana w kolejności malejącej.

    Zrzut ekranu eksploratora usługi Azure Resource Graph przedstawiający przypisania ról dla tego samego podmiotu zabezpieczeń i tego samego zakresu.

    Kolumna opis
    Identyfikator podmiotu zabezpieczeń Identyfikator podmiotu zabezpieczeń, któremu przypisano wbudowane role.
    Scope Zakres wbudowanych przypisań ról.
    liczba_ Liczba wbudowanych przypisań ról z tym samym zakresem podmiotu zabezpieczeń i tym samym zakresem.
    AllRD Identyfikator i nazwa wbudowanych ról.
  4. W wierszu wybierz pozycję Zobacz szczegóły , aby otworzyć okienko Szczegóły .

    Zrzut ekranu przedstawiający okienko Szczegóły przedstawiające przypisania ról z tym samym zakresem podmiotu zabezpieczeń i tym samym zakresem.

  5. Funkcja AllRD umożliwia wyświetlanie wbudowanych ról, które mogą być potencjalnie łączone w rolę niestandardową.

  6. Wyświetl listę akcji i akcji danych dla ról wbudowanych. Aby uzyskać więcej informacji, zobacz Wyświetlanie listy definicji ról platformy Azure lub ról wbudowanych platformy Azure

  7. Utwórz rolę niestandardową zawierającą wszystkie akcje i akcje danych jako role wbudowane. Aby ułatwić tworzenie roli niestandardowej, możesz zacząć od sklonowania jednej z wbudowanych ról. Aby uzyskać więcej informacji, zobacz Tworzenie lub aktualizowanie ról niestandardowych platformy Azure przy użyciu witryny Azure Portal.

  8. Pobierz nazwę główną z identyfikatora podmiotu zabezpieczeń.

  9. Otwórz stronę Kontrola dostępu (IAM) w tym samym zakresie co przypisania ról.

  10. Przypisz nową rolę niestandardową do podmiotu zabezpieczeń. Aby uzyskać więcej informacji, zobacz przypisywanie ról Azure za pomocą portalu Azure.

    Teraz możesz usunąć wbudowane przypisania ról.

  11. Na stronie Kontrola dostępu (Zarządzanie dostępem i tożsamościami) w tym samym zakresie wybierz kartę Przypisania ról.

  12. Znajdź przypisania ról głównych i wbudowanych.

  13. Usuń wbudowane przypisania ról z podmiotu zabezpieczeń. Aby uzyskać więcej informacji, zobacz Usuwanie przypisań ról platformy Azure.

Rozwiązanie 4 — określanie uprawnień do przypisań ról

Aby zmniejszyć liczbę przypisań ról w subskrypcji i masz identyfikator Entra ID P2 firmy Microsoft, przypisz role kwalifikujące się w usłudze Microsoft Entra Privileged Identity Management zamiast trwale przypisanych.

Rozwiązanie 5 — dodawanie dodatkowej subskrypcji

Dodaj dodatkową subskrypcję.

Objaw — nie można tworzyć więcej przypisań ról w zakresie grupy zarządzania

Nie możesz przypisać roli w zakresie grupy zarządzania.

Przyczyna

pomoc techniczna platformy Azure maksymalnie 500 przypisań ról na grupę zarządzania. Ten limit różni się od limitu przypisań ról na subskrypcję.

Uwaga

Limit przydziałów ról 500 na grupę zarządzania jest stały i nie można go zwiększyć.

Rozwiązanie

Spróbuj zmniejszyć liczbę przypisań ról w grupie zarządzania. Aby uzyskać możliwe opcje, zobacz Objaw — nie można utworzyć więcej przypisań ról. Aby zapytania pobierały zasoby na poziomie grupy zarządzania, należy wprowadzić następującą zmianę w zapytaniach:

Replace

| where id startswith "/subscriptions"

With

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

Objaw — nie można utworzyć więcej definicji ról

Podczas próby utworzenia nowej roli niestandardowej zostanie wyświetlony następujący komunikat:

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

Przyczyna

pomoc techniczna platformy Azure do 5000 ról niestandardowych w katalogu. (W przypadku platformy Microsoft Azure obsługiwanej przez firmę 21Vianet limit to 2000 ról niestandardowych).

Rozwiązanie

Wykonaj następujące kroki, aby znaleźć i usunąć nieużywane role niestandardowe platformy Azure.

  1. Zaloguj się do witryny Azure Portal i otwórz Eksploratora usługi Azure Resource Graph.

  2. Wybierz pozycję Zakres i ustaw zakres na Katalog dla zapytania.

    Zrzut ekranu przedstawiający Eksploratora usługi Azure Resource Graph z zaznaczonym zakresem.

  3. Uruchom następujące zapytanie, aby pobrać wszystkie role niestandardowe, które nie mają żadnych przypisań ról:

    To zapytanie sprawdza aktywne przypisania ról i nie uwzględnia kwalifikujących się przypisań ról niestandardowych w usłudze Microsoft Entra Privileged Identity Management. Aby wyświetlić listę kwalifikujących się przypisań ról niestandardowych, możesz użyć centrum administracyjnego firmy Microsoft, programu PowerShell lub interfejsu API REST. Aby uzyskać więcej informacji, zobacz Get-AzRoleEligibilityScheduleInstance lub Wystąpienia harmonogramu uprawnień roli — lista dla zakresu.

    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
    

    Poniżej przedstawiono przykład wyników:

    Zrzut ekranu przedstawiający Eksploratora usługi Azure Resource Graph z rolami niestandardowymi bez przypisań ról.

    Kolumna opis
    Identyfikator definicji roli Identyfikator nieużywanej roli niestandardowej.
    RoleDefinitionName Nazwa nieużywanej roli niestandardowej.
    Scope Zakresy możliwe do przypisania dla nieużywanej roli niestandardowej.
  4. Otwórz zakres (zazwyczaj subskrypcja), a następnie otwórz stronę Kontrola dostępu (zarządzanie dostępem i tożsamościami).

  5. Wybierz kartę Role, aby wyświetlić listę wszystkich ról wbudowanych i niestandardowych.

  6. W filtrze Typ wybierz pozycję CustomRole, aby wyświetlić swoje role niestandardowe.

  7. Wybierz wielokropek (...) dla roli niestandardowej, którą chcesz usunąć, a następnie wybierz pozycję Usuń.

    Zrzut ekranu przedstawiający listę ról niestandardowych, które można wybrać do usunięcia.

Następne kroki