Поделиться через


Устранение неполадок с ограничениями Azure RBAC

В этой статье описываются некоторые распространенные решения при превышении ограничений в управлении доступом на основе ролей Azure (Azure RBAC).

Необходимые компоненты

Примечание.

Запросы, используемые в этой статье, возвращают только назначения ролей или пользовательские роли, у которых есть разрешения на чтение. Например, если у вас есть только разрешения на чтение назначений ролей в группе ресурсов область, назначения ролей в подписке область не возвращаются.

Симптом. Больше назначений ролей не может быть создано

При попытке назначить роль вы получите следующее сообщение об ошибке:

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

Причина

поддержка Azure до 4000 назначений ролей на подписку. Это ограничение распространяется на назначения ролей в пределах подписки, группы ресурсов и ресурсов, но не в пределах группы управления. Необходимо попытаться уменьшить количество назначений ролей в подписке.

Примечание.

Ограничение на назначение ролей в 4000 для каждой подписки является фиксированным и не может быть увеличено.

Чтобы узнать число назначений ролей, можно просмотреть диаграмму на странице управления доступом (IAM) на портале Azure. Вы также можете воспользоваться такими командами Azure PowerShell:

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

Решение 1. Замена назначений ролей на основе субъекта на назначения ролей на основе групп

Чтобы уменьшить количество назначений ролей в подписке, добавьте субъектов (пользователей, субъектов-служб и управляемых удостоверений) в группы и назначьте роли группам. Выполните следующие действия, чтобы определить, где можно заменить несколько назначений ролей для субъектов одним назначением ролей для группы.

  1. Войдите в портал Azure и откройте Обозреватель Azure Resource Graph.

  2. Выберите область и задайте область для запроса.

    Обычно область в каталог для запроса всего клиента, но вы можете сузить область для определенных подписок.

    Снимок экрана: Обозреватель Azure Resource Graph, на котором показан выбор области.

  3. Выберите "Задать авторизацию область" и задайте для область авторизации значение "At" выше и ниже, чтобы запросить все ресурсы по указанному область.

    Снимок экрана: Обозреватель Azure Resource Graph, на котором показана панель

  4. Выполните следующий запрос, чтобы получить назначения ролей с одной и той же ролью и на одном и том же область, но для разных субъектов.

    Этот запрос проверка активные назначения ролей и не учитывает подходящие назначения ролей в Microsoft Entra управление привилегированными пользователями. Для перечисления подходящих назначений ролей можно использовать Центр администрирования Microsoft Entra, PowerShell или REST API. Дополнительные сведения см. в разделе Get-AzRoleEligibilityScheduleInstance или экземпляры расписания ролей — список для области.

    Если вы используете условия назначения ролей или делегируете управление назначениями ролей с условиями, используйте запрос "Условия". В противном случае используйте запрос по умолчанию.

    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
    

    Ниже показан пример результатов. Столбец count_ — это число субъектов, которым назначена одна и та же роль, и в том же область. Число отсортировано в порядке убывания.

    Снимок экрана: Обозреватель Azure Resource Graph, в котором показаны назначения ролей с одной и той же ролью и в одной область, но для разных субъектов.

  5. Определите строку, в которой требуется заменить несколько назначений ролей одним назначением ролей для группы.

  6. В строке выберите "Просмотреть сведения", чтобы открыть панель сведений.

    Снимок экрана: панель сведений, на котором показаны назначения ролей с одной и той же ролью и в одной и той же область, но для разных субъектов.

    Столбец Description
    RoleDefinitionId Идентификатор назначенной в настоящее время роли.
    Область Область назначения роли, которая будет подпиской, группой ресурсов или ресурсом.
    RoleDefinitionName Имя назначаемой в настоящее время роли.
    count_ Число субъектов, которым назначена одна и та же роль, и в том же область.
    AllPrincipals Список идентификаторов субъектов, назначенных той же роли и в том же область.
  7. Используйте RoleDefinitionId, RoleDefinitionName и Область, чтобы получить роль и область.

  8. Используйте AllPrincipals , чтобы получить список основных идентификаторов с одинаковым назначением ролей.

  9. Создайте группу Microsoft Entra. Дополнительные сведения см. в разделе "Управление группами Microsoft Entra" и членством в группах.

  10. Добавьте субъекты из AllPrincipals в группу.

    Сведения о массовом добавлении субъектов см. в разделе "Массовый добавление участников группы" в идентификаторе Microsoft Entra ID.

  11. Назначьте роль группе, созданной в той же область. Дополнительные сведения см. в разделе Назначение ролей Azure с помощью портала Azure.

    Теперь вы можете найти и удалить назначения ролей на основе субъекта.

  12. Получите имена субъектов из идентификаторов субъектов.

  13. Откройте страницу управления доступом (IAM) в том же область, что и назначения ролей.

  14. Выберите вкладку Назначения ролей.

  15. Чтобы отфильтровать назначения ролей, выберите фильтр роли и выберите имя роли.

  16. Найдите назначения ролей на основе субъекта.

    Вы также должны увидеть назначение ролей на основе групп.

    Снимок экрана: страница управления доступом (IAM), на котором показаны назначения ролей с одной и той же ролью и на одной область, но для разных субъектов.

  17. Выберите и удалите назначения ролей на основе субъекта. Дополнительные сведения см. в статье Удаление назначений ролей Azure.

Решение 2. Удаление избыточных назначений ролей

Чтобы уменьшить количество назначений ролей в подписке, удалите избыточные назначения ролей. Выполните следующие действия, чтобы определить, где избыточные назначения ролей в более низкой область потенциально могут быть удалены, так как назначение роли на более высоком область уже предоставляет доступ.

  1. Войдите в портал Azure и откройте Обозреватель Azure Resource Graph.

  2. Выберите область и задайте область для запроса.

    Обычно область в каталог для запроса всего клиента, но вы можете сузить область для определенных подписок.

    Снимок экрана: Обозреватель Azure Resource Graph, на котором показан выбор области.

  3. Выберите "Задать авторизацию область" и задайте для область авторизации значение "At" выше и ниже, чтобы запросить все ресурсы по указанному область.

    Снимок экрана: Обозреватель Azure Resource Graph, на котором показана панель

  4. Выполните следующий запрос, чтобы получить назначения ролей с одной и той же ролью и одной и той же ролью, но в разных область.

    Этот запрос проверка активные назначения ролей и не учитывает подходящие назначения ролей в Microsoft Entra управление привилегированными пользователями. Для перечисления подходящих назначений ролей можно использовать Центр администрирования Microsoft Entra, PowerShell или REST API. Дополнительные сведения см. в разделе Get-AzRoleEligibilityScheduleInstance или экземпляры расписания ролей — список для области.

    Если вы используете условия назначения ролей или делегируете управление назначениями ролей с условиями, используйте запрос "Условия". В противном случае используйте запрос по умолчанию.

    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
    

    Ниже показан пример результатов. Столбец count_ — это количество различных область для назначений ролей с одной и той же ролью и одной и той же ролью. Число отсортировано в порядке убывания.

    Снимок экрана: Обозреватель Azure Resource Graph, в котором показаны назначения ролей для одной и той же роли и одного и того же субъекта, но в разных область.

    Столбец Description
    RoleDefinitionId Идентификатор назначенной в настоящее время роли.
    RoleDefinitionName Имя назначаемой в настоящее время роли.
    PrincipalId Идентификатор участника, которому назначена роль.
    count_ Количество различных область для назначений ролей с одной и той же ролью и одной и той же ролью.
    Области Области назначений ролей с одной и той же ролью и тем же субъектом.
  5. Определите строку, в которой требуется удалить избыточные назначения ролей.

  6. В строке выберите "Просмотреть сведения", чтобы открыть панель сведений.

    Снимок экрана: панель сведений, на котором показаны назначения ролей для одной роли и одного и того же субъекта, но в разных область.

  7. Используйте RoleDefinitionId, RoleDefinitionName и PrincipalId, чтобы получить идентификатор роли и субъекта.

  8. Используйте области для получения списка область для той же роли и одного и того же субъекта.

  9. Определите, какой область необходим для назначения роли. Другие назначения ролей можно удалить.

    При определении того, какие назначения ролей можно удалить, следует следовать рекомендациям по наименьшим привилегиям . Назначение роли на более высоком область может предоставлять больше доступа к субъекту, чем необходимо. В этом случае необходимо удалить назначение роли с более высоким область. Например, пользователю может не потребоваться назначение роли участника виртуальной машины в подписке область когда назначение роли участника виртуальной машины в более низкой группе ресурсов область предоставляет необходимый доступ.

  10. Получите имя субъекта из идентификатора субъекта.

  11. Откройте страницу управления доступом (IAM) на область назначения роли, которую вы хотите удалить.

  12. Выберите вкладку Назначения ролей.

  13. Чтобы отфильтровать назначения ролей, выберите фильтр роли и выберите имя роли.

  14. Найдите субъект.

  15. Выберите и удалите назначение роли. Дополнительные сведения см. в статье Удаление назначений ролей Azure.

Решение 3. Замена нескольких встроенных назначений ролей настраиваемым назначением ролей

Чтобы уменьшить количество назначений ролей в подписке, замените несколько встроенных назначений ролей одним пользовательским назначением ролей. Выполните следующие действия, чтобы определить, где могут быть заменены несколько встроенных назначений ролей.

  1. Войдите в портал Azure и откройте Обозреватель Azure Resource Graph.

  2. Выберите область и задайте область для запроса.

    Обычно область в каталог для запроса всего клиента, но вы можете сузить область для определенных подписок.

    Снимок экрана: Обозреватель Azure Resource Graph, на котором показан выбор области.

  3. Выполните следующий запрос, чтобы получить назначения ролей с одной и той же область, но с разными встроенными ролями.

    Этот запрос проверка активные назначения ролей и не учитывает подходящие назначения ролей в Microsoft Entra управление привилегированными пользователями. Для перечисления подходящих назначений ролей можно использовать Центр администрирования Microsoft Entra, PowerShell или REST API. Дополнительные сведения см. в разделе Get-AzRoleEligibilityScheduleInstance или экземпляры расписания ролей — список для области.

    Если вы используете условия назначения ролей или делегируете управление назначениями ролей с условиями, используйте запрос "Условия". В противном случае используйте запрос по умолчанию.

    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
    

    Ниже показан пример результатов. Столбец count_ — это количество различных встроенных назначений ролей с одинаковым субъектом и одинаковым область. Число отсортировано в порядке убывания.

    Снимок экрана: Обозреватель Azure Resource Graph, в котором показаны назначения ролей для одного и того же субъекта и того же область.

    Столбец Description
    PrincipalId Идентификатор субъекта, назначаемого встроенными ролями.
    Область Область для встроенных назначений ролей.
    count_ Количество встроенных назначений ролей с тем же субъектом и тем же область.
    AllRD Идентификатор и имя встроенных ролей.
  4. В строке выберите "Просмотреть сведения", чтобы открыть панель сведений.

    Снимок экрана: панель сведений, на котором показаны назначения ролей с тем же субъектом и тем же область.

  5. Используйте AllRD для просмотра встроенных ролей, которые могут быть объединены в настраиваемую роль.

  6. Перечислить действия и действия данных для встроенных ролей. Дополнительные сведения см. в разделе "Список определений ролей Azure" или встроенных ролей Azure

  7. Создайте пользовательскую роль, которая включает все действия и действия данных в качестве встроенных ролей. Чтобы упростить создание настраиваемой роли, можно начать с клонирования одной из встроенных ролей. Дополнительные сведения см. в статье "Создание или обновление пользовательских ролей Azure" с помощью портал Azure.

  8. Получите имя субъекта из идентификатора субъекта.

  9. Откройте страницу управления доступом (IAM) в том же область, что и назначения ролей.

  10. Назначьте новую пользовательскую роль субъекту. Дополнительные сведения см. в разделе Назначение ролей Azure с помощью портала Azure.

    Теперь можно удалить встроенные назначения ролей.

  11. На странице управления доступом (IAM) на той же область перейдите на вкладку "Назначения ролей".

  12. Найдите субъект и встроенные назначения ролей.

  13. Удалите встроенные назначения ролей из субъекта. Дополнительные сведения см. в статье Удаление назначений ролей Azure.

Решение 4. Создание подходящих назначений ролей

Чтобы уменьшить количество назначений ролей в подписке и у вас есть идентификатор Microsoft Entra ID P2, сделайте назначения ролей допустимыми в Microsoft Entra управление привилегированными пользователями вместо постоянно назначенных.

Решение 5. Добавление дополнительной подписки

Создайте еще одну подписку.

Симптом. Больше назначений ролей нельзя создавать в группе управления область

Вы не можете назначить роль в группе управления область.

Причина

поддержка Azure до 500 назначений ролей на каждую группу управления. Это ограничение отличается от ограничения назначений ролей на подписку.

Примечание.

Ограничение на назначение ролей в 500 для каждой группы управления является фиксированным и не может быть увеличено.

Решение

Попробуйте уменьшить количество назначений ролей в группе управления. Возможные варианты см. в разделе "Симптом" — нет дополнительных назначений ролей. Чтобы запросы для получения ресурсов на уровне группы управления, необходимо внести следующее изменение в запросы:

Replace

| where id startswith "/subscriptions"

With

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

Симптом. Больше определений ролей не может быть создано

При попытке создать новую пользовательскую роль вы получите следующее сообщение:

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

Причина

Azure поддерживает до 5000 настраиваемых ролей в каталоге. (Для Microsoft Azure, управляемой 21Vianet, ограничение составляет 2000 пользовательских ролей.)

Решение

Выполните следующие действия, чтобы найти и удалить неиспользуемые пользовательские роли Azure.

  1. Войдите в портал Azure и откройте Обозреватель Azure Resource Graph.

  2. Выберите область и задайте область в каталог для запроса.

    Снимок экрана: Обозреватель Azure Resource Graph, на котором показан выбор области.

  3. Выполните следующий запрос, чтобы получить все пользовательские роли, у которых нет назначений ролей:

    Этот запрос проверка активные назначения ролей и не рассматривает допустимые пользовательские назначения ролей в Microsoft Entra управление привилегированными пользователями. Чтобы вывести список подходящих настраиваемых назначений ролей, можно использовать Центр администрирования Microsoft Entra, PowerShell или REST API. Дополнительные сведения см. в разделе Get-AzRoleEligibilityScheduleInstance или экземпляры расписания ролей — список для области.

    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
    

    Ниже показан пример результатов:

    Снимок экрана: Обозреватель Azure Resource Graph, в котором показаны пользовательские роли без назначений ролей.

    Столбец Description
    RoleDefinitionId Идентификатор неиспользуемой пользовательской роли.
    RoleDefinitionName Имя неиспользуемой пользовательской роли.
    Область Назначаемые область для неиспользуемой пользовательской роли.
  4. Откройте область (обычно подписка), а затем откройте страницу управления доступом (IAM).

  5. Чтобы просмотреть список всех встроенных и настраиваемых ролей, выберите вкладку Роли.

  6. В фильтре типов выберите CustomRole , чтобы просто просмотреть пользовательские роли.

  7. Выберите многоточие (...) для настраиваемой роли, которую вы хотите удалить, и нажмите кнопку "Удалить".

    Снимок экрана: список настраиваемых ролей, которые можно выбрать для удаления.

Следующие шаги