Поделиться через


Добавление или изменение условий назначения ролей Azure с помощью REST API

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

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

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

  • 2020-03-01-preview или более поздней версии.
  • 2020-04-01-preview или более поздней версии, если вы хотите использовать description свойство для назначений ролей
  • 2022-04-01 является первой стабильной версией

Дополнительные сведения о предварительных требованиях для добавления или изменения условий назначения ролей см. в разделе "Условия".

Добавить условие

Чтобы добавить условие назначения роли, используйте REST API Role Assignments — Create. Интерфейс Role Assignments — Create включает следующие параметры, относящиеся к условиям.

Параметр Тип Описание:
condition Строка Условие, при котором пользователю может быть предоставлено разрешение.
conditionVersion Строка Версия синтаксиса условия. Если condition указан без conditionVersion, для версии устанавливается значение по умолчанию 2.0.

Используйте следующий запрос и основной текст:

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}",
        "condition": "{condition}",
        "conditionVersion": "2.0",
        "description": "{description}"
    }
}

В нижеприведенном примере показано, как назначить роль Читатель данных больших двоичных объектов хранилища с условием. Условие проверяет, равно ли имя контейнера значению "blobs-example-container".

PUT https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}?api-version=2022-04-01
{
    "properties": {
        "roleDefinitionId": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Authorization/roleDefinitions/2a2b9908-6ea1-4ae2-8e65-a410df84e7d1",
        "principalId": "{principalId}",
        "condition": "((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals 'blobs-example-container'))",
        "conditionVersion": "2.0",
        "description": "Read access if container name equals blobs-example-container"
    }
}

Ниже приведен пример выходных данных:

{
    "properties": {
        "roleDefinitionId": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Authorization/roleDefinitions/2a2b9908-6ea1-4ae2-8e65-a410df84e7d1",
        "principalId": "{principalId}",
        "principalType": "User",
        "scope": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}",
        "condition": "((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals 'blobs-example-container'))",
        "conditionVersion": "2.0",
        "createdOn": "2022-07-20T06:20:44.0205560Z",
        "updatedOn": "2022-07-20T06:20:44.2955371Z",
        "createdBy": null,
        "updatedBy": "{updatedById}",
        "delegatedManagedIdentityResourceId": null,
        "description": "Read access if container name equals blobs-example-container"
    },
    "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}",
    "type": "Microsoft.Authorization/roleAssignments",
    "name": "{roleAssignmentId}"
}

Изменение условия

Чтобы изменить существующее условие назначения роли, используйте тот же REST API Role Assignments — Create, что и при добавлении условия назначения роли. Ниже приведен пример JSON-файла, в котором обновляются свойства condition и description. Изменять можно только свойства condition, conditionVersion и description. Другие свойства должны соответствовать существующему назначению роли.

PUT https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}?api-version=2022-04-01
{
    "properties": {
        "roleDefinitionId": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Authorization/roleDefinitions/2a2b9908-6ea1-4ae2-8e65-a410df84e7d1",
        "principalId": "{principalId}",
        "condition": "((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals 'blobs-example-container' OR @Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals 'blobs-example-container2'))",
        "conditionVersion": "2.0",
        "description": "Read access if container name equals blobs-example-container or blobs-example-container2"
    }
}

Просмотр условия

Чтобы получить список условий назначения ролей, используйте REST API получения или перечисления назначений ролей. Дополнительные сведения см. в статье Формирование списка назначений ролей Azure с помощью REST API.

Удаление условия

Для удаления условия назначения роли отредактируйте условие назначения роли и в качестве значений для условия и версии условия укажите пустую строку или NULL.

Кроме того, если вы хотите удалить и назначение роли вместе с условием, можно использовать API Role Assignments — Delete. Дополнительные сведения см. в статье Удаление назначений ролей Azure.

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