Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье описываются некоторые распространенные решения при превышении ограничений в управлении доступом на основе ролей Azure (Azure RBAC).
Prerequisites
- Роль читателя для запуска запросов Azure Resource Graph.
- Роль администратора управления доступом на основе ролей (RBAC) для добавления и удаления назначений ролей.
- Роль администратора доступа пользователей для добавления назначений ролей, удаления назначений ролей или удаления пользовательских ролей.
- Роль администратора групп или администратора пользователей для создания групп.
Note
Запросы, используемые в этой статье, возвращают только назначения ролей или пользовательские роли, на чтение которых у вас есть разрешения. Например, если у вас есть только разрешения на чтение назначений ролей в области группы ресурсов, назначения ролей на уровне подписки не будут получены.
Симптом — невозможно создать больше назначений ролей
При попытке назначить роль вы получите следующее сообщение об ошибке:
No more role assignments can be created (code: RoleAssignmentLimitExceeded)
Cause
Azure поддерживает до 4000 назначений ролей на подписку. Это ограничение включает назначения ролей в подписке, группе ресурсов и областях ресурсов, но не на уровне группы управления. Соответствующие назначения ролей и назначения ролей, запланированные в будущем, не учитываются в этот лимит. Следует попытаться уменьшить количество назначений ролей в подписке.
Note
Ограничение на назначение ролей в 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 Privileged Identity Management. Для перечисления подходящих назначений ролей можно использовать Центр администрирования 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_ — это число субъектов, назначенных той же роли и в той же области. Число отсортировано в порядке убывания.
Определите строку, в которой требуется заменить несколько назначений ролей одним назначением ролей для группы.
В строке выберите "Просмотреть сведения" , чтобы открыть панель сведений .
Column Description RoleDefinitionId Идентификатор назначенной в настоящее время роли. Scope Область назначения роли в виде подписки, группы ресурсов или ресурса. 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 Privileged Identity Management. Для перечисления подходящих назначений ролей можно использовать Центр администрирования 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_ — это количество различных областей назначения ролей с одной и той же ролью и тем же субъектом. Число отсортировано в порядке убывания.
Column Description RoleDefinitionId Идентификатор назначенной в настоящее время роли. RoleDefinitionName Имя назначаемой в настоящее время роли. PrincipalId Идентификатор участника, которому назначена роль. count_ Количество различных областей назначения ролей с одной и той же ролью и тем же субъектом. Scopes Области назначений ролей с одной и той же ролью и тем же субъектом. Определите строку, в которой требуется удалить избыточные назначения ролей.
В строке выберите "Просмотреть сведения" , чтобы открыть панель сведений .
Используйте RoleDefinitionId, RoleDefinitionName и PrincipalId , чтобы получить идентификатор роли и субъекта.
Используйте области для получения списка областей для одной роли и одного и того же субъекта.
Определите, какая область требуется для назначения роли. Другие назначения ролей можно удалить.
При определении того, какие назначения ролей можно удалить, следует следовать рекомендациям по наименьшим привилегиям . Назначение роли на более высоком уровне может предоставлять принципалу больше доступа, чем необходимо. В этом случае необходимо удалить назначение роли с более высоким охватом. Например, пользователю может не потребоваться назначение роли участника виртуальной машины в области подписки, когда назначение роли участника виртуальной машины в более низкой области группы ресурсов предоставляет необходимый доступ.
Получите имя принципала из идентификатора принципала.
- Сведения об использовании портала Azure см. в статье "Добавление или обновление сведений о профиле и параметрах пользователя".
- Сведения об использовании PowerShell см. в разделе Get-MgUser.
- Сведения об использовании Azure, CLI см. в az ad user show.
Откройте страницу управления доступом (IAM) в рамках области, где находится назначение роли, которое вы хотите удалить.
Выберите вкладку Назначения ролей.
Чтобы отфильтровать назначения ролей, выберите фильтр роли и выберите имя роли.
Найдите субъект.
Выберите и удалите назначение роли. Дополнительные сведения см. в разделе "Удаление назначений ролей Azure".
Решение 3. Замена нескольких встроенных назначений ролей настраиваемым назначением ролей
Чтобы уменьшить количество назначений ролей в подписке, замените несколько встроенных назначений ролей одним пользовательским назначением ролей. Выполните следующие действия, чтобы определить, где могут быть заменены несколько встроенных назначений ролей.
Войдите на портал Azure и откройте обозреватель Azure Resource Graph.
Выберите область и задайте область для запроса.
Как правило, вы устанавливаете область в Каталог, чтобы делать запросы к арендатору, но вы можете сузить область до конкретных подписок.
Выполните следующий запрос, чтобы получить назначения ролей с одной и той же областью, но с разными встроенными ролями.
Этот запрос проверяет активные назначения ролей и не рассматривает подходящие назначения ролей в Microsoft Entra Privileged Identity Management. Для перечисления подходящих назначений ролей можно использовать Центр администрирования 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_ — это количество различных встроенных назначений ролей с одной и той же основной и той же областью. Число отсортировано в порядке убывания.
Column Description PrincipalId Идентификатор субъекта, назначаемого встроенными ролями. Scope Диапазон для встроенных назначений ролей. 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 Privileged Identity Management вместо постоянных назначений.
Решение 5. Добавление дополнительной подписки
Добавьте дополнительную подписку.
Симптом - Больше нельзя назначать роли на уровне группы управления
Невозможно назначить роль в области группы управлений.
Cause
Azure поддерживает до 500 назначений ролей для каждой группы управления. Это ограничение отличается от ограничения назначений ролей для каждой подписки.
Note
Ограничение на назначение ролей в 500 для каждой группы управления является фиксированным и не может быть увеличено.
Solution
Попробуйте уменьшить количество назначений ролей в группе управления. Возможные варианты см. в разделе "Симптом" — нет дополнительных назначений ролей. Для выполнения запросов получения ресурсов на уровне группы управления необходимо внести следующее изменение в эти запросы.
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)
Cause
Azure поддерживает до 5000 пользовательских ролей в каталоге. (Для Microsoft Azure, управляемой 21Vianet, ограничение составляет 2000 пользовательских ролей.)
Solution
Выполните следующие действия, чтобы найти и удалить неиспользуемые пользовательские роли Azure.
Войдите на портал Azure и откройте обозреватель Azure Resource Graph.
Выберите область и задайте область в каталоге для запроса.
Выполните следующий запрос, чтобы получить все пользовательские роли, у которых нет назначений ролей:
Этот запрос проверяет активные назначения ролей и не рассматривает допустимые настраиваемые назначения ролей в Microsoft Entra Privileged Identity Management. Чтобы вывести список подходящих настраиваемых назначений ролей, можно использовать Центр администрирования 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Ниже показан пример результатов:
Column Description RoleDefinitionId Идентификатор неиспользуемой пользовательской роли. RoleDefinitionName Название неиспользуемой пользовательской роли. Scope Назначаемые области для неиспользуемой пользовательской роли. Откройте область (обычно подписка), а затем откройте страницу управления доступом (IAM).
Перейдите на вкладку "Роли ", чтобы просмотреть список всех встроенных и настраиваемых ролей.
В фильтре Тип выберите CustomRole, чтобы видеть только пользовательские роли.
Выберите многоточие (...) для настраиваемой роли, которую вы хотите удалить, и нажмите кнопку "Удалить".