Добавление условий назначения ролей Azure с помощью шаблонов ARM (предварительная версия)

Важно!

Azure ABAC и условия назначения ролей Azure в настоящее время доступны в предварительной версии. Эта предварительная версия предоставляется без соглашения об уровне обслуживания и не рекомендована для использования рабочей среде. Некоторые функции могут не поддерживаться или их возможности могут быть ограничены. Дополнительные сведения см. в статье Дополнительные условия использования предварительных выпусков Microsoft Azure.

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

Предварительные требования

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

Добавление условия

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

Чтобы использовать шаблон, необходимо указать следующие входные данные:

  • Идентификатор пользователя, группы, управляемого удостоверения или приложения для назначения роли
  • Тип субъекта, например User, Group или ServicePrincipal. Дополнительные сведения см. в этом разделе.
{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "principalId": {
            "type": "string",
            "metadata": {
                "description": "Principal ID to assign the role to"
            }
        },
        "principalType": {
            "type": "string",
            "metadata": {
                "description": "Type of principal"
            }
        },
        "roleAssignmentGuid": {
            "type": "string",
            "defaultValue": "[newGuid()]",
            "metadata": {
                "description": "New GUID used to identify the role assignment"
            }
        }
    },
    "variables": {
        "StorageBlobDataReader": "[concat(subscription().Id, '/providers/Microsoft.Authorization/roleDefinitions/2a2b9908-6ea1-4ae2-8e65-a410df84e7d1')]" // ID for Storage Blob Data Reader role, but can be any valid role ID
    },
    "resources": [
        {
            "name": "[parameters('roleAssignmentGuid')]",
            "type": "Microsoft.Authorization/roleAssignments",
            "apiVersion": "2020-04-01-preview", // API version to call the role assignment PUT.
            "properties": {
                "roleDefinitionId": "[variables('StorageBlobDataReader')]",
                "principalId": "[parameters('principalId')]",
                "principalType": "[parameters('principalType')]",
                "description": "Role assignment condition created with an ARM template",
                "condition": "((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals 'blobs-example-container'))", // Role assignment condition
                "conditionVersion": "2.0"
            }
        }
    ]
}

Область назначения ролей определяется исходя из уровня развертывания. Ниже приведены примеры команд New-AzResourceGroupDeployment и az deployment group create, показывающие, как запустить развертывание в области группы ресурсов.

New-AzResourceGroupDeployment -ResourceGroupName example-group -TemplateFile rbac-test.json -principalId $principalId -principalType "User"
az deployment group create --resource-group example-group --template-file rbac-test.json --parameters principalId=$principalId principalType="User"

Дальнейшие действия