Назначение ролей Azure с помощью REST API
Управление доступом на основе ролей Azure (Azure RBAC) — это система авторизации, используемая для управления доступом к ресурсам в Azure. Чтобы предоставить доступ, необходимо назначить роли пользователям, группам, субъектам-службам или управляемым удостоверениям в определенной области. В этой статье описывается назначение ролей с помощью REST API.
Необходимые компоненты
Чтобы назначать роли Azure необходимо наличие:
Microsoft.Authorization/roleAssignments/write
разрешения, такие как контроль доступа Администратор istrator на основе ролей или Администратор istrator пользователя
Необходимо использовать следующие версии:
2015-07-01
или более поздней версии, чтобы назначить роль Azure2018-09-01-preview
или более поздней версии, чтобы назначить роль Azure новому субъекту-службе
Дополнительные сведения см. в версиях API REST API Azure RBAC.
Назначение роли Azure
Чтобы назначить роль, используйте REST API Назначения ролей — создание и укажите субъект безопасности, определение роли и область. Чтобы вызвать этот API, необходимо иметь доступ к Microsoft.Authorization/roleAssignments/write
действию, например на основе ролей контроль доступа Администратор istrator.
Используйте REST API Определения ролей — список или изучите раздел Встроенные роли, чтобы получить идентификатор для определения роли, которое требуется назначить.
Используйте средство GUID для создания уникального идентификатора, который будет использоваться для назначения роли. Этот идентификатор имеет следующий формат:
00000000-0000-0000-0000-000000000000
Можете начать со следующего запроса и основного текста:
PUT https://management.azure.com/{scope}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}?api-version=2022-04-01
{ "properties": { "roleDefinitionId": "/{scope}/providers/Microsoft.Authorization/roleDefinitions/{roleDefinitionId}", "principalId": "{principalId}" } }
Внутри URI замените {scope} областью для назначения роли.
Область Тип providers/Microsoft.Management/managementGroups/{groupId1}
Группа управления subscriptions/{subscriptionId1}
Подписка subscriptions/{subscriptionId1}/resourceGroups/myresourcegroup1
Группа ресурсов subscriptions/{subscriptionId1}/resourceGroups/myresourcegroup1/providers/microsoft.web/sites/mysite1
Ресурс В предыдущем примере microsoft.web — это поставщик ресурсов, который ссылается на экземпляр Службы приложений. Аналогичным образом можно использовать любые другие поставщики ресурсов и указать область. Дополнительные сведения см. в статье Поставщики и типы ресурсов Azure и Операции поставщиков ресурсов Azure.
Замените {roleAssignmentId} идентификатором GUID для назначения роли.
В тексте запроса замените {область} тем же область, что и в URI.
Замените {roleDefinitionId} идентификатором определения роли.
Замените {principalId} идентификатором объекта для пользователя, группы или субъекта-службы, которым будет назначена роль.
В этом примере показан запрос (включая текст), который назначает роль читателя архивных копий пользователю в области действия подписки:
PUT https://management.azure.com/subscriptions/{subscriptionId1}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId1}?api-version=2022-04-01
{
"properties": {
"roleDefinitionId": "/subscriptions/{subscriptionId1}/providers/Microsoft.Authorization/roleDefinitions/a795c7a0-d4a2-40c1-ae25-d81f01202912",
"principalId": "{objectId1}"
}
}
Ниже приведен пример выходных данных:
{
"properties": {
"roleDefinitionId": "/subscriptions/{subscriptionId1}/providers/Microsoft.Authorization/roleDefinitions/a795c7a0-d4a2-40c1-ae25-d81f01202912",
"principalId": "{objectId1}",
"principalType": "User",
"scope": "/subscriptions/{subscriptionId1}",
"condition": null,
"conditionVersion": null,
"createdOn": "2022-05-06T23:55:23.7679147Z",
"updatedOn": "2022-05-06T23:55:23.7679147Z",
"createdBy": null,
"updatedBy": "{updatedByObjectId1}",
"delegatedManagedIdentityResourceId": null,
"description": null
},
"id": "/subscriptions/{subscriptionId1}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId1}",
"type": "Microsoft.Authorization/roleAssignments",
"name": "{roleAssignmentId1}"
}
Новый субъект-служба
Если вы создадите новый субъект-службу и сразу же попытаетесь назначить роль этому субъекту-службе, в некоторых случаях такое назначение роли может завершиться ошибкой. Например, если создать новое управляемое удостоверение и затем попытаться назначить роль этому субъекту-службе, назначение роли может завершиться ошибкой. Наиболее вероятной причиной этой ошибки является задержка репликации. Субъект-служба создается в одном регионе; однако назначение ролей может происходить в другом регионе, который еще не реплицировал субъект-службу.
Для решения этой проблемы используйте REST API Назначения ролей — создание и задайте для свойства principalType
значение ServicePrincipal
. Необходимо также задать для параметра apiVersion
версию 2018-09-01-preview
или более позднюю. 2022-04-01
— первая стабильная версия.
PUT https://management.azure.com/{scope}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}?api-version=2022-04-01
{
"properties": {
"roleDefinitionId": "/{scope}/providers/Microsoft.Authorization/roleDefinitions/{roleDefinitionId}",
"principalId": "{principalId}",
"principalType": "ServicePrincipal"
}
}