Устранение неполадок с ограничениями Azure RBAC
В этой статье описываются некоторые распространенные решения при превышении ограничений в управлении доступом на основе ролей Azure (Azure RBAC).
Необходимые компоненты
- Роль читателя для запуска запросов Azure Resource Graph.
- Роль на основе ролей контроль доступа Администратор istrator для добавления или удаления назначений ролей.
- Роль Администратор istrator для добавления назначений ролей, удаления назначений ролей или удаления пользовательских ролей.
- Роли Администратор istrator или User Администратор istrator для создания групп.
Примечание.
Запросы, используемые в этой статье, возвращают только назначения ролей или пользовательские роли, у которых есть разрешения на чтение. Например, если у вас есть только разрешения на чтение назначений ролей в группе ресурсов область, назначения ролей в подписке область не возвращаются.
Симптом. Больше назначений ролей не может быть создано
При попытке назначить роль вы получите следующее сообщение об ошибке:
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 и Область, чтобы получить роль и область.
Используйте 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 , чтобы просто просмотреть пользовательские роли.
Выберите многоточие (...) для настраиваемой роли, которую вы хотите удалить, и нажмите кнопку "Удалить".
Следующие шаги
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по