Устранение неполадок с ограничениями Azure RBAC
В этой статье описываются некоторые распространенные решения при превышении ограничений в управлении доступом на основе ролей Azure (Azure RBAC).
Необходимые компоненты
- Роль читателя для запуска запросов Azure Resource Graph.
- Роль контроль доступа администратора на основе ролей для добавления или удаления назначений ролей.
- Роль администратора доступа пользователей для добавления назначений ролей, удаления назначений ролей или удаления пользовательских ролей.
- Роль администратора групп или администратора пользователей для создания групп.
Примечание.
Запросы, используемые в этой статье, возвращают только назначения ролей или пользовательские роли, у которых есть разрешения на чтение. Например, если у вас есть только разрешения на чтение назначений ролей в области группы ресурсов, назначения ролей в области подписки не возвращаются.
Симптом. Больше назначений ролей не может быть создано
При попытке назначить роль вы получите следующее сообщение об ошибке:
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. Замена назначений ролей на основе субъекта на назначения ролей на основе групп
Чтобы уменьшить количество назначений ролей в подписке, добавьте субъектов (пользователей, субъектов-служб и управляемых удостоверений) в группы и назначьте роли группам. Выполните следующие действия, чтобы определить, где можно заменить несколько назначений ролей для субъектов одним назначением ролей для группы.
Войдите в портал Azure и откройте обозреватель Azure Resource Graph.
Выберите область и задайте область для запроса.
Как правило, для запроса всего клиента задано значение "Каталог", но вы можете сузить область до определенных подписок.
Выберите "Задать область авторизации" и задайте для области авторизации значение At, выше и ниже, чтобы запросить все ресурсы в указанной области.
Выполните следующий запрос, чтобы получить назначения ролей с одной и той же ролью и в одной области, но для разных субъектов.
Этот запрос проверяет активные назначения ролей и не рассматривает подходящие назначения ролей в 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_ — это число субъектов, которым назначена та же роль и в той же области. Число отсортировано в порядке убывания.
Определите строку, в которой требуется заменить несколько назначений ролей одним назначением ролей для группы.
В строке выберите "Просмотреть сведения", чтобы открыть панель сведений.
Столбец Description RoleDefinitionId Идентификатор назначенной в настоящее время роли. Область Область назначения роли, которая будет подпиской, группой ресурсов или ресурсом. RoleDefinitionName Имя назначаемой в настоящее время роли. count_ Число субъектов, назначенных той же роли и в той же области. AllPrincipals Список идентификаторов субъектов, назначенных той же роли и в той же области. Используйте RoleDefinitionId, RoleDefinitionName и Scope, чтобы получить роль и область.
Используйте AllPrincipals , чтобы получить список основных идентификаторов с одинаковым назначением ролей.
Создайте группу Microsoft Entra. Дополнительные сведения см. в разделе "Управление группами Microsoft Entra" и членством в группах.
Добавьте субъекты из AllPrincipals в группу.
Сведения о массовом добавлении субъектов см. в разделе "Массовый добавление участников группы" в идентификаторе Microsoft Entra ID.
Назначьте роль группе, созданной в той же области. Дополнительные сведения см. в разделе Назначение ролей Azure с помощью портала Azure.
Теперь вы можете найти и удалить назначения ролей на основе субъекта.
Получите имена субъектов из идентификаторов субъектов.
- Сведения об использовании портал Azure см. в разделе "Добавление или обновление сведений о профиле и параметрах пользователя".
- Сведения об использовании PowerShell см. в разделе Get-MgUser.
- Сведения об использовании Azure, CLI см. в az ad user show.
Откройте страницу управления доступом (IAM) в той же области, что и назначения ролей.
Выберите вкладку Назначения ролей.
Чтобы отфильтровать назначения ролей, выберите фильтр роли и выберите имя роли.
Найдите назначения ролей на основе субъекта.
Вы также должны увидеть назначение ролей на основе групп.
Выберите и удалите назначения ролей на основе субъекта. Дополнительные сведения см. в статье Удаление назначений ролей Azure.
Решение 2. Удаление избыточных назначений ролей
Чтобы уменьшить количество назначений ролей в подписке, удалите избыточные назначения ролей. Выполните следующие действия, чтобы определить, где избыточные назначения ролей в нижней области могут быть удалены, так как назначение роли в более высокой области уже предоставляет доступ.
Войдите в портал Azure и откройте обозреватель Azure Resource Graph.
Выберите область и задайте область для запроса.
Как правило, для запроса всего клиента задано значение "Каталог", но вы можете сузить область до определенных подписок.
Выберите "Задать область авторизации" и задайте для области авторизации значение At, выше и ниже, чтобы запросить все ресурсы в указанной области.
Выполните следующий запрос, чтобы получить назначения ролей с одной и той же ролью и тем же субъектом, но в разных областях.
Этот запрос проверяет активные назначения ролей и не рассматривает подходящие назначения ролей в 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_ — это количество различных областей назначения ролей с одной и той же ролью и тем же субъектом. Число отсортировано в порядке убывания.
Столбец Description RoleDefinitionId Идентификатор назначенной в настоящее время роли. RoleDefinitionName Имя назначаемой в настоящее время роли. PrincipalId Идентификатор участника, которому назначена роль. count_ Количество различных областей назначения ролей с одной и той же ролью и тем же субъектом. Области Области назначений ролей с одной и той же ролью и тем же субъектом. Определите строку, в которой требуется удалить избыточные назначения ролей.
В строке выберите "Просмотреть сведения", чтобы открыть панель сведений.
Используйте RoleDefinitionId, RoleDefinitionName и PrincipalId, чтобы получить идентификатор роли и субъекта.
Используйте области для получения списка областей для одной роли и одного и того же субъекта.
Определите, какая область требуется для назначения роли. Другие назначения ролей можно удалить.
При определении того, какие назначения ролей можно удалить, следует следовать рекомендациям по наименьшим привилегиям . Назначение роли в более высокой области может предоставлять больше доступа к субъекту, чем необходимо. В этом случае необходимо удалить назначение роли с более высокой областью. Например, пользователю может не потребоваться назначение роли участника виртуальной машины в области подписки, когда назначение роли участника виртуальной машины в более низкой области группы ресурсов предоставляет необходимый доступ.
Получите имя субъекта из идентификатора субъекта.
- Сведения об использовании портал Azure см. в разделе "Добавление или обновление сведений о профиле и параметрах пользователя".
- Сведения об использовании PowerShell см. в разделе Get-MgUser.
- Сведения об использовании Azure, CLI см. в az ad user show.
Откройте страницу управления доступом (IAM) в области назначения роли, которую вы хотите удалить.
Выберите вкладку Назначения ролей.
Чтобы отфильтровать назначения ролей, выберите фильтр роли и выберите имя роли.
Найдите субъект.
Выберите и удалите назначение роли. Дополнительные сведения см. в статье Удаление назначений ролей Azure.
Решение 3. Замена нескольких встроенных назначений ролей настраиваемым назначением ролей
Чтобы уменьшить количество назначений ролей в подписке, замените несколько встроенных назначений ролей одним пользовательским назначением ролей. Выполните следующие действия, чтобы определить, где могут быть заменены несколько встроенных назначений ролей.
Войдите в портал Azure и откройте обозреватель Azure Resource Graph.
Выберите область и задайте область для запроса.
Как правило, для запроса всего клиента задано значение "Каталог", но вы можете сузить область до определенных подписок.
Выполните следующий запрос, чтобы получить назначения ролей с одной и той же областью, но с разными встроенными ролями.
Этот запрос проверяет активные назначения ролей и не рассматривает подходящие назначения ролей в 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_ — это количество различных встроенных назначений ролей с одной и той же основной и той же областью. Число отсортировано в порядке убывания.
Столбец Description PrincipalId Идентификатор субъекта, назначаемого встроенными ролями. Область Область для встроенных назначений ролей. count_ Количество встроенных назначений ролей с одной и той же областью. AllRD Идентификатор и имя встроенных ролей. В строке выберите "Просмотреть сведения", чтобы открыть панель сведений.
Используйте AllRD для просмотра встроенных ролей, которые могут быть объединены в настраиваемую роль.
Перечислить действия и действия данных для встроенных ролей. Дополнительные сведения см. в разделе "Список определений ролей Azure" или встроенных ролей Azure
Создайте пользовательскую роль, которая включает все действия и действия данных в качестве встроенных ролей. Чтобы упростить создание настраиваемой роли, можно начать с клонирования одной из встроенных ролей. Дополнительные сведения см. в статье "Создание или обновление пользовательских ролей Azure" с помощью портал Azure.
Получите имя субъекта из идентификатора субъекта.
- Сведения об использовании портал Azure см. в разделе "Добавление или обновление сведений о профиле и параметрах пользователя".
- Сведения об использовании PowerShell см. в разделе Get-MgUser.
- Сведения об использовании Azure, CLI см. в az ad user show.
Откройте страницу управления доступом (IAM) в той же области, что и назначения ролей.
Назначьте новую пользовательскую роль субъекту. Дополнительные сведения см. в разделе Назначение ролей Azure с помощью портала Azure.
Теперь можно удалить встроенные назначения ролей.
На странице управления доступом (IAM) в той же области выберите вкладку "Назначения ролей".
Найдите субъект и встроенные назначения ролей.
Удалите встроенные назначения ролей из субъекта. Дополнительные сведения см. в статье Удаление назначений ролей 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.
Войдите в портал Azure и откройте обозреватель Azure Resource Graph.
Выберите область и задайте область в каталоге для запроса.
Выполните следующий запрос, чтобы получить все пользовательские роли, у которых нет назначений ролей:
Этот запрос проверяет активные назначения ролей и не рассматривает допустимые пользовательские назначения ролей в 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
Ниже показан пример результатов:
Столбец Description RoleDefinitionId Идентификатор неиспользуемой пользовательской роли. RoleDefinitionName Имя неиспользуемой пользовательской роли. Область Назначаемые области для неиспользуемой пользовательской роли. Откройте область (обычно подписка), а затем откройте страницу управления доступом (IAM).
Чтобы просмотреть список всех встроенных и настраиваемых ролей, выберите вкладку Роли.
В фильтре типов выберите CustomRole , чтобы просто просмотреть пользовательские роли.
Выберите многоточие (...) для настраиваемой роли, которую вы хотите удалить, и нажмите кнопку "Удалить".