Запросы, используемые в этой статье, возвращают только назначения ролей или пользовательские роли, у которых есть разрешения на чтение. Например, если у вас есть только разрешения на чтение назначений ролей в области группы ресурсов, назначения ролей в области подписки не возвращаются.
Симптом. Больше назначений ролей не может быть создано
При попытке назначить роль вы получите следующее сообщение об ошибке:
No more role assignments can be created (code: RoleAssignmentLimitExceeded)
Причина
поддержка Azure до 4000 назначений ролей на подписку. Это ограничение распространяется на назначения ролей в пределах подписки, группы ресурсов и ресурсов, но не в пределах группы управления.
Соответствующие назначения ролей и назначения ролей, запланированные в будущем, не учитываются в этом пределе. Необходимо попытаться уменьшить количество назначений ролей в подписке.
Примечание
Ограничение на назначение ролей в 4000 для каждой подписки является фиксированным и не может быть увеличено.
Решение 1. Замена назначений ролей на основе субъекта на назначения ролей на основе групп
Чтобы уменьшить количество назначений ролей в подписке, добавьте субъектов (пользователей, субъектов-служб и управляемых удостоверений) в группы и назначьте роли группам. Выполните следующие действия, чтобы определить, где можно заменить несколько назначений ролей для субъектов одним назначением ролей для группы.
Войдите в портал Azure и откройте обозреватель Azure Resource Graph.
Выберите область и задайте область для запроса.
Как правило, для запроса всего клиента задано значение "Каталог", но вы можете сузить область до определенных подписок.
Выберите "Задать область авторизации" и задайте для области авторизации значение At, выше и ниже, чтобы запросить все ресурсы в указанной области.
Выполните следующий запрос, чтобы получить назначения ролей с одной и той же ролью и в одной области, но для разных субъектов.
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
authorizationresources
| where type =~ "microsoft.authorization/roleassignments"
| where id startswith "/subscriptions"
| extend RoleId = tolower(tostring(properties.roleDefinitionId))
| extend condition = tostring(properties.condition)
| 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, condition
| where count_ > 1
| order by count_ desc
Ниже показан пример результатов. Столбец count_ — это число субъектов, которым назначена та же роль и в той же области. Число отсортировано в порядке убывания.
Определите строку, в которой требуется заменить несколько назначений ролей одним назначением ролей для группы.
В строке выберите "Просмотреть сведения", чтобы открыть панель сведений.
Откройте страницу управления доступом (IAM) в той же области, что и назначения ролей.
Выберите вкладку Назначения ролей.
Чтобы отфильтровать назначения ролей, выберите фильтр роли и выберите имя роли.
Найдите назначения ролей на основе субъекта.
Вы также должны увидеть назначение ролей на основе групп.
Выберите и удалите назначения ролей на основе субъекта. Дополнительные сведения см. в статье Удаление назначений ролей Azure.
Решение 2. Удаление избыточных назначений ролей
Чтобы уменьшить количество назначений ролей в подписке, удалите избыточные назначения ролей. Выполните следующие действия, чтобы определить, где избыточные назначения ролей в нижней области могут быть удалены, так как назначение роли в более высокой области уже предоставляет доступ.
Войдите в портал Azure и откройте обозреватель Azure Resource Graph.
Выберите область и задайте область для запроса.
Как правило, для запроса всего клиента задано значение "Каталог", но вы можете сузить область до определенных подписок.
Выберите "Задать область авторизации" и задайте для области авторизации значение At, выше и ниже, чтобы запросить все ресурсы в указанной области.
Выполните следующий запрос, чтобы получить назначения ролей с одной и той же ролью и тем же субъектом, но в разных областях.
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
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)
| extend condition = tostring(properties.condition)
| 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, condition
| where count_ > 1
| order by count_ desc
Ниже показан пример результатов. Столбец count_ — это количество различных областей назначения ролей с одной и той же ролью и тем же субъектом. Число отсортировано в порядке убывания.
Количество различных областей назначения ролей с одной и той же ролью и тем же субъектом.
Области
Области назначений ролей с одной и той же ролью и тем же субъектом.
Определите строку, в которой требуется удалить избыточные назначения ролей.
В строке выберите "Просмотреть сведения", чтобы открыть панель сведений.
Используйте RoleDefinitionId, RoleDefinitionName и PrincipalId, чтобы получить идентификатор роли и субъекта.
Используйте области для получения списка областей для одной роли и одного и того же субъекта.
Определите, какая область требуется для назначения роли. Другие назначения ролей можно удалить.
При определении того, какие назначения ролей можно удалить, следует следовать рекомендациям по наименьшим привилегиям . Назначение роли в более высокой области может предоставлять больше доступа к субъекту, чем необходимо. В этом случае необходимо удалить назначение роли с более высокой областью. Например, пользователю может не потребоваться назначение роли участника виртуальной машины в области подписки, когда назначение роли участника виртуальной машины в более низкой области группы ресурсов предоставляет необходимый доступ.
Решение 3. Замена нескольких встроенных назначений ролей настраиваемым назначением ролей
Чтобы уменьшить количество назначений ролей в подписке, замените несколько встроенных назначений ролей одним пользовательским назначением ролей. Выполните следующие действия, чтобы определить, где могут быть заменены несколько встроенных назначений ролей.
Войдите в портал Azure и откройте обозреватель Azure Resource Graph.
Выберите область и задайте область для запроса.
Как правило, для запроса всего клиента задано значение "Каталог", но вы можете сузить область до определенных подписок.
Выполните следующий запрос, чтобы получить назначения ролей с одной и той же областью, но с разными встроенными ролями.
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
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))
| extend condition = tostring(properties.condition)
| 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, condition
| where count_ > 1
| order by count_ desc
Ниже показан пример результатов. Столбец count_ — это количество различных встроенных назначений ролей с одной и той же основной и той же областью. Число отсортировано в порядке убывания.
Создайте пользовательскую роль, которая включает все действия и действия данных в качестве встроенных ролей. Чтобы упростить создание настраиваемой роли, можно начать с клонирования одной из встроенных ролей. Дополнительные сведения см. в статье "Создание или обновление пользовательских ролей Azure" с помощью портал Azure.
Симптом. Больше назначений ролей не может быть создано в области группы управления
Не удается назначить роль в области группы управления.
Причина
поддержка 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.
Войдите в портал Azure и откройте обозреватель Azure Resource Graph.
Выберите область и задайте область в каталоге для запроса.
Выполните следующий запрос, чтобы получить все пользовательские роли, у которых нет назначений ролей:
Продемонстрировать функции идентификатора Microsoft Entra для модернизации решений удостоверений, реализации гибридных решений и реализации управления удостоверениями.
Узнайте, как удалять доступ к ресурсам Azure для пользователей, групп, субъектов-служб и управляемых удостоверений с помощью портала Azure, Azure PowerShell, Azure CLI и REST API.
В этой статье описываются встроенные роли Azure для управления доступом на основе ролей Azure (Azure RBAC). В ней перечислены элементы Actions, NotActions, DataActions и NotDataActions.
Узнайте, как определить, к каким ресурсам у пользователей, групп, субъектов-служб или управляемых удостоверений есть доступ с помощью портала Microsoft Azure и управления доступом на основе ролей Azure (Azure RBAC).