Назначение ролей Azure с помощью REST API

Управление доступом на основе ролей Azure (Azure RBAC) — это система авторизации, используемая для управления доступом к ресурсам в Azure. Чтобы предоставить доступ, необходимо назначить роли пользователям, группам, субъектам-службам или управляемым удостоверениям в определенной области. В этой статье описывается назначение ролей с помощью REST API.

Необходимые компоненты

Чтобы назначать роли Azure необходимо наличие:

Необходимо использовать следующие версии:

  • 2015-07-01 или более поздней версии, чтобы назначить роль Azure
  • 2018-09-01-preview или более поздней версии, чтобы назначить роль Azure новому субъекту-службе

Дополнительные сведения см. в версиях API REST API Azure RBAC.

Назначение роли Azure

Чтобы назначить роль, используйте REST API Назначения ролей — создание и укажите субъект безопасности, определение роли и область. Чтобы вызвать этот API, необходимо иметь доступ к Microsoft.Authorization/roleAssignments/write действию, например на основе ролей контроль доступа Администратор istrator.

  1. Используйте REST API Определения ролей — список или изучите раздел Встроенные роли, чтобы получить идентификатор для определения роли, которое требуется назначить.

  2. Используйте средство GUID для создания уникального идентификатора, который будет использоваться для назначения роли. Этот идентификатор имеет следующий формат: 00000000-0000-0000-0000-000000000000

  3. Можете начать со следующего запроса и основного текста:

    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}"
      }
    }
    
  4. Внутри 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.

  5. Замените {roleAssignmentId} идентификатором GUID для назначения роли.

  6. В тексте запроса замените {область} тем же область, что и в URI.

  7. Замените {roleDefinitionId} идентификатором определения роли.

  8. Замените {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"
  }
}

Следующие шаги