Устранение неполадок с ограничениями 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 и Scope, чтобы получить роль и область.

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

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

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