Создание управляемого приложения Azure, которое развертывает учетную запись хранения, зашифрованную с помощью ключа, управляемого клиентом
В этой статье описывается, как создать управляемое приложение Azure, которое развертывает учетную запись хранения, зашифрованную с помощью управляемого клиентом ключа. служба хранилища учетной записи, Cosmos DB и Базы данных Azure для Postgres поддерживают шифрование неактивных данных с помощью ключей, управляемых клиентом, или ключей, управляемых корпорацией Майкрософт. Для защиты данных в учетной записи хранения можно использовать собственный ключ шифрования. Указанный ключ CMK используется для защиты доступа к ключу, который шифрует данные, и управления этим доступом. Ключи CMK обеспечивают большую гибкость при администрировании операций управления доступом.
Необходимые компоненты
- Учетная запись Azure с активной подпиской и разрешениями для ресурсов Microsoft Entra, таких как пользователи, группы или субъекты-службы. Если у вас нет учетной записи, создайте бесплатную учетную запись, прежде чем начинать работу.
- Visual Studio Code с последней версией расширения средств Resource Manager. Для файлов Bicep установите расширение Bicep для Visual Studio Code.
- Установите последнюю версию Azure PowerShell или Azure CLI.
- Ознакомьтесь с тем, как создать и развернуть определение каталога служб.
Управляемые удостоверения
Настройка ключа, управляемого клиентом, для учетной записи хранения, развернутой управляемым приложением в качестве ресурса в управляемой группе ресурсов, требует управляемого удостоверения, назначаемого пользователем. Это управляемое удостоверение, назначаемое пользователем, можно использовать для предоставления управляемому приложению доступа к другим существующим ресурсам. Чтобы узнать, как настроить управляемое приложение с помощью управляемого удостоверения, назначаемого пользователем, перейдите в управляемое приложение Azure с управляемым удостоверением.
Приложению можно предоставить два типа удостоверений:
- Управляемое удостоверение , назначаемое системой, назначается приложению и удаляется при удалении приложения. Приложение может иметь только одно управляемое удостоверение, назначаемое системой.
- Управляемое удостоверение , назначаемое пользователем, — это автономный ресурс Azure, который можно назначить приложению. Приложение может иметь несколько управляемых удостоверений, назначаемых пользователем.
Чтобы развернуть учетную запись хранения в управляемой группе ресурсов управляемого приложения, зашифрованной ключами клиента из существующего хранилища ключей, требуется дополнительная конфигурация. Управляемое удостоверение, настроенное с помощью управляемого приложения, требует встроенного оператора управления доступом на основе ролей Azure через управляемое удостоверение, которое имеет доступ к хранилищу ключей. Дополнительные сведения см. в роли оператора управляемых удостоверений.
Создание хранилища ключей с защитой очистки
- Войдите на портал Azure.
- В меню портал Azure или на домашней странице выберите "Создать ресурс".
- В поле поиска введите Key Vault.
- В списке результатов выберите Key Vault.
- В разделе Key Vault нажмите кнопку "Создать".
- В разделе "Создание хранилища ключей" укажите следующие сведения:
- Подписка. Выберите нужную подписку.
- Группа ресурсов: выберите "Создать" и введите имя, например demo-cmek-rg.
- Имя: необходимо уникальное имя, например demo-keyvault-cmek.
- Регион: выберите расположение, например восточная часть США.
- Ценовая категория: выберите "Стандартный " из раскрывающегося списка.
- Защита от очистки: выберите "Включить защиту очистки".
- Нажмите кнопку "Далее " и перейдите на вкладку "Политика доступа".
- Конфигурация доступа. Выберите управление доступом на основе ролей Azure.
- Примите значения по умолчанию для всех остальных параметров.
- Выберите Review + create (Просмотреть и создать).
- Подтвердите правильность параметров и нажмите кнопку "Создать".
После успешного развертывания выберите "Перейти к ресурсу". На вкладке "Обзор" запишите следующие свойства:
- Имя хранилища: в примере имя хранилища — demo-keyvault-cmek. Вы будете использовать это имя для выполнения других действий.
- Универсальный код ресурса (URI) хранилища. В примере используется
https://demo-keyvault-cmek.vault.azure.net/
универсальный код ресурса (URI) хранилища.
Создание управляемого удостоверения, назначаемого пользователем
Чтобы создать управляемое удостоверение, назначаемое пользователем, учетная запись должна назначать роль участника управляемого удостоверения.
- В поле поиска введите управляемые удостоверения.
- В разделе "Службы" выберите управляемые удостоверения.
- Нажмите кнопку "Создать" и введите следующие значения на вкладке "Основные сведения".
- Подписка. Выберите нужную подписку.
- Группа ресурсов: выберите демонстрационную группу ресурсов cmek-rg , созданную на предыдущих шагах.
- Регион: выберите регион, например восточная часть США.
- Имя. Введите имя управляемого удостоверения, назначаемого пользователем, например demokeyvaultmi.
- Выберите Review + create (Просмотреть и создать).
- После отображения прохождения проверки нажмите кнопку "Создать".
После успешного развертывания выберите "Перейти к ресурсу".
Создание назначений ролей
Необходимо создать два назначения ролей для хранилища ключей. Дополнительные сведения см. в статье "Назначение ролей Azure с помощью портал Azure".
Предоставление разрешения ключа в хранилище ключей управляемому удостоверению
Создайте назначение ролей для управляемого удостоверения хранилища ключей demokeyvaultmi , чтобы упаковать и распаковывать ключи.
- Перейдите в хранилище ключей demo-cmek-keyvault.
- Выберите Управление доступом (IAM) .
- Выберите Добавить>Добавить назначение ролей.
- Назначьте следующую роль:
- Роль: пользователь шифрования криптослужбы Key Vault
- Назначение доступа: управляемое удостоверение
- Участник: demokeyvaultmi
- Выберите "Рецензирование" и " Назначить" , чтобы просмотреть параметры.
- Выберите "Проверить и назначить" , чтобы создать назначение роли.
Создание назначения ролей для учетной записи
Создайте другое назначение ролей, чтобы учетная запись может создать новый ключ в хранилище ключей.
- Назначьте следующую роль:
- Роль: сотрудник по шифрованию Key Vault
- Назначение доступа: пользователь, группа или субъект-служба
- Участник: ваша учетная запись Microsoft Entra
- Выберите "Рецензирование" и " Назначить" , чтобы просмотреть параметры.
- Выберите "Проверить и назначить" , чтобы создать назначение роли.
Вы можете проверить назначения ролей хранилища ключей в назначениях ролей управления доступом (IAM)>Role.
Создание ключа
Необходимо создать ключ, который используется хранилищем ключей для шифрования учетной записи хранения.
- Перейдите в хранилище ключей, demo-cmek-keyvault.
- Выберите Ключи.
- Выберите Создать/импортировать.
- На странице "Создание ключа" выберите следующие значения:
- Параметры: создание
- Имя: demo-cmek-key
- Примите значения по умолчанию для других параметров.
- Выберите Создать.
Запишите имя ключа. Он используется при развертывании управляемого приложения.
Создание управляемого удостоверения, назначаемого пользователем для управляемого приложения
Создайте управляемое удостоверение, назначаемое пользователем, для использования в качестве управляемого удостоверения для управляемого приложения.
- В поле поиска введите Управляемые удостоверения.
- В разделе "Службы" выберите управляемые удостоверения.
- Выберите Создать.
- Подписка. Выберите нужную подписку.
- Группа ресурсов: выберите демонстрационную группу ресурсов cmek-rg.
- Регион: выберите регион, например восточная часть США.
- Имя. Введите имя управляемого удостоверения, назначаемого пользователем, например demomanagedappmi.
- Выберите Review + create (Просмотреть и создать).
- После отображения прохождения проверки нажмите кнопку "Создать".
После успешного развертывания выберите "Перейти к ресурсу".
Назначение разрешения роли управляемому удостоверению
Назначьте роль оператора управляемого удостоверения управляемому удостоверению в область управляемого удостоверения, назначаемого пользователем с именем demokeyvaultmi.
- Перейдите к управляемому удостоверению с именем demokeyvaultmi, назначаемого пользователем.
- Выберите Управление доступом (IAM) .
- Выберите Добавить>Добавить назначение ролей, чтобы открыть страницу "Добавление назначения ролей".
- Назначьте следующую роль.
- Роль: оператор управляемого удостоверения
- Назначение доступа: управляемое удостоверение
- Участник: demomanagedappmi
- Выберите "Рецензирование" и " Назначить" , чтобы просмотреть параметры.
- Выберите "Проверить и назначить" , чтобы создать назначение роли.
Вы можете проверить назначение роли для demokeyvaultmi в назначениях ролей управления доступом (IAM)>.
Пример шаблона управляемого приложения
Создайте управляемое приложение, которое развертывает учетную запись хранения в управляемой группе ресурсов и используйте уже существующий ключ хранилища ключей для шифрования данных в учетной записи хранения.
Ниже представлен порядок публикации управляемого приложения в каталоге услуг.
- Создайте файл creatUIDefinition.json из примера в этой статье. Шаблон определяет элементы пользовательского интерфейса портала при развертывании управляемого приложения.
- Создайте шаблон Azure Resource Manager с именем mainTemplate.json , преобразовав файл Bicep из этой статьи в JSON. Шаблон определяет ресурсы для развертывания с помощью управляемого приложения.
- Создайте ZIP-пакет, содержащий необходимые JSON-файлы: createUiDefinition.json и mainTemplate.json.
- Опубликуйте определение управляемого приложения, чтобы оно было доступно в каталоге служб. Дополнительные сведения см. в кратком руководстве по созданию и публикации определения управляемого приложения Azure.
Создание шаблона createUiDefinition.json
Следующий шаблон создает управляемое удостоверение, назначаемое пользователем для управляемого приложения. В этом примере мы отключаем управляемое удостоверение, назначаемое системой, так как нам нужно заранее настроить управляемое удостоверение, назначаемое пользователем, с разрешениями оператора управляемых удостоверений по управляемому удостоверению хранилища ключей.
- Создайте файл в Visual Studio Code с именем creatUIDefinition.json.
- Скопируйте и вставьте следующий код в файл.
- Сохраните файл.
{
"$schema": "https://schema.management.azure.com/schemas/0.1.2-preview/CreateUIDefinition.MultiVm.json#",
"handler": "Microsoft.Azure.CreateUIDef",
"version": "0.1.2-preview",
"parameters": {
"basics": [],
"steps": [
{
"name": "managedApplicationSetting",
"label": "Application Settings",
"subLabel": {
"preValidation": "Configure your application settings and Managed Identity for the application",
"postValidation": "Done"
},
"bladeTitle": "Application Settings - Config",
"elements": [
{
"name": "appIdentity",
"type": "Microsoft.ManagedIdentity.IdentitySelector",
"label": "Managed Identity Configuration for the Application (Needs Managed Identity Operator permissions over KV Managed Identity).",
"toolTip": {
"systemAssignedIdentity": "Enable system assigned identity to grant the managed application access to additional existing resources.",
"userAssignedIdentity": "Add user assigned identities to grant the managed application access to additional existing resources."
},
"defaultValue": {
"systemAssignedIdentity": "Off"
},
"options": {
"hideSystemAssignedIdentity": true,
"hideUserAssignedIdentity": false,
"readOnlySystemAssignedIdentity": true
},
"visible": true
}
]
},
{
"name": "configuration",
"type": "Microsoft.Common.Section",
"label": "Configuration",
"elements": [
{
"name": "cmek",
"type": "Microsoft.Common.Section",
"label": "Customer Managed Encryption Key (CMEK)",
"elements": [
{
"name": "cmekEnable",
"type": "Microsoft.Common.CheckBox",
"label": "Enable CMEK",
"toolTip": "Enable to provide a CMEK",
"constraints": {
"required": false
}
},
{
"name": "cmekKeyVaultUrl",
"type": "Microsoft.Common.TextBox",
"label": "Key Vault URL",
"toolTip": "Specify the CMEK Key Vault URL",
"defaultValue": "",
"constraints": {
"required": "[steps('configuration').cmek.cmekEnable]",
"regex": ".*",
"validationMessage": "The value must not be empty."
},
"visible": "[steps('configuration').cmek.cmekEnable]"
},
{
"name": "cmekKeyName",
"type": "Microsoft.Common.TextBox",
"label": "Key Name",
"toolTip": "Specify the key name from your key vault.",
"defaultValue": "",
"constraints": {
"required": "[steps('configuration').cmek.cmekEnable]",
"regex": ".*",
"validationMessage": "The value must not be empty."
},
"visible": "[steps('configuration').cmek.cmekEnable]"
},
{
"name": "cmekKeyIdentity",
"type": "Microsoft.ManagedIdentity.IdentitySelector",
"label": "Managed Identity Configuration for Key Vault Access",
"toolTip": {
"systemAssignedIdentity": "Enable system assigned identity to grant the managed application access to additional existing resources.",
"userAssignedIdentity": "Add user assigned identities to grant the managed application access to additional existing resources."
},
"defaultValue": {
"systemAssignedIdentity": "Off"
},
"options": {
"hideSystemAssignedIdentity": true,
"hideUserAssignedIdentity": false,
"readOnlySystemAssignedIdentity": true
},
"visible": "[steps('configuration').cmek.cmekEnable]"
}
],
"visible": true
}
]
}
],
"outputs": {
"location": "[location()]",
"managedIdentity": "[steps('managedApplicationSetting').appIdentity]",
"cmekConfig": {
"kvUrl": "[if(empty(steps('configuration').cmek.cmekKeyVaultUrl), '', steps('configuration').cmek.cmekKeyVaultUrl)]",
"keyName": "[if(empty(steps('configuration').cmek.cmekKeyName), '', steps('configuration').cmek.cmekKeyName)]",
"identityId": "[if(empty(steps('configuration').cmek.cmekKeyIdentity), '', steps('configuration').cmek.cmekKeyIdentity)]"
}
}
}
}
Создание шаблона mainTemplate.json
Следующий файл Bicep — это исходный код для файла mainTemplate.json. Шаблон использует управляемое удостоверение, назначаемое пользователем, определенное в файле createUiDefinition.json .
- Создайте файл в Visual Studio Code с именем mainTemplate.bicep.
- Скопируйте и вставьте следующий код в файл.
- Сохраните файл.
param cmekConfig object = {
kvUrl: ''
keyName: ''
identityId: {}
}
@description('Specify the Azure region to place the application definition.')
param location string = resourceGroup().location
/////////////////////////////////
// Common Resources Configuration
/////////////////////////////////
var commonproperties = {
name: 'cmekdemo'
displayName: 'Common Resources'
storage: {
sku: 'Standard_LRS'
kind: 'StorageV2'
accessTier: 'Hot'
minimumTlsVersion: 'TLS1_2'
}
}
var identity = items(cmekConfig.identityId.userAssignedIdentities)[0].key
resource storage 'Microsoft.Storage/storageAccounts@2022-05-01' = {
name: '${commonproperties.name}${uniqueString(resourceGroup().id)}'
location: location
sku: {
name: commonproperties.storage.sku
}
kind: commonproperties.storage.kind
identity: cmekConfig.identityId
properties: {
accessTier: commonproperties.storage.accessTier
minimumTlsVersion: commonproperties.storage.minimumTlsVersion
encryption: {
identity: {
userAssignedIdentity: identity
}
services: {
blob: {
enabled: true
}
table: {
enabled: true
}
file: {
enabled: true
}
}
keySource: 'Microsoft.Keyvault'
keyvaultproperties: {
keyname: '${cmekConfig.keyName}'
keyvaulturi: '${cmekConfig.kvUrl}'
}
}
}
}
Используйте PowerShell или Azure CLI для создания файла mainTemplate.json . Перейдите в каталог, в котором вы сохранили файл Bicep и выполните build
команду.
bicep build mainTemplate.bicep
После преобразования Bicep-файла в JSON файл mainTemplate.json должен соответствовать следующему примеру. У вас могут быть разные значения в metadata
свойствах и templateHash
version
.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"metadata": {
"_generator": {
"name": "bicep",
"version": "0.16.2.56959",
"templateHash": "1234567891234567890"
}
},
"parameters": {
"cmekConfig": {
"type": "object",
"defaultValue": {
"kvUrl": "",
"keyName": "",
"identityId": {}
}
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]",
"metadata": {
"description": "Specify the Azure region to place the application definition."
}
}
},
"variables": {
"commonproperties": {
"name": "cmekdemo",
"displayName": "Common Resources",
"storage": {
"sku": "Standard_LRS",
"kind": "StorageV2",
"accessTier": "Hot",
"minimumTlsVersion": "TLS1_2"
}
},
"identity": "[items(parameters('cmekConfig').identityId.userAssignedIdentities)[0].key]"
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2022-05-01",
"name": "[format('{0}{1}', variables('commonproperties').name, uniqueString(resourceGroup().id))]",
"location": "[parameters('location')]",
"sku": {
"name": "[variables('commonproperties').storage.sku]"
},
"kind": "[variables('commonproperties').storage.kind]",
"identity": "[parameters('cmekConfig').identityId]",
"properties": {
"accessTier": "[variables('commonproperties').storage.accessTier]",
"minimumTlsVersion": "[variables('commonproperties').storage.minimumTlsVersion]",
"encryption": {
"identity": {
"userAssignedIdentity": "[variables('identity')]"
},
"services": {
"blob": {
"enabled": true
},
"table": {
"enabled": true
},
"file": {
"enabled": true
}
},
"keySource": "Microsoft.Keyvault",
"keyvaultproperties": {
"keyname": "[format('{0}', parameters('cmekConfig').keyName)]",
"keyvaulturi": "[format('{0}', parameters('cmekConfig').kvUrl)]"
}
}
}
}
]
}
Развертывание управляемого приложения
После создания определения каталога служб можно развернуть управляемое приложение. Дополнительные сведения см. в кратком руководстве по развертыванию управляемого приложения каталога служб.
Во время развертывания вы используете управляемые удостоверения, назначаемые пользователем, имя хранилища ключей, URL-адрес хранилища ключей, имя ключа хранилища ключей. Файл createUiDefinition.json создает интерфейс использования.
Например, в развертывании портала на вкладке "Приложение Параметры" добавьте демоменаджdappmi.
На вкладке "Конфигурация" включите ключ, управляемый клиентом, и добавьте управляемое удостоверение, назначаемое пользователем для хранилища ключей, demokeyvaultmi. Вы также указываете URL-адрес хранилища ключей и имя ключа хранилища ключей, созданное вами.
Проверка развертывания
После завершения развертывания можно проверить назначение удостоверения управляемого приложения. Назначаемое пользователем управляемое удостоверение demomanagedappmi назначается управляемому приложению.
- Перейдите в группу ресурсов, в которой развернуто управляемое приложение.
- В разделе Параметры> Identity выберите user assigned (preview).
Вы также можете проверить учетную запись хранения, развернутую управляемым приложением. На вкладке "Шифрование " отображается ключ demo-cmek-key и идентификатор ресурса для управляемого удостоверения, назначаемого пользователем.
- Перейдите в группу управляемых ресурсов, в которой развернута учетная запись хранения управляемого приложения.
- В разделе "Безопасность и сеть" выберите "Шифрование".
Следующие шаги
- Дополнительные сведения о шифровании хранилища см. в ключах, управляемых клиентом, для служба хранилища Azure шифрования.
- Дополнительные сведения об управляемом удостоверении, назначаемом пользователем, с разрешениями на доступ к ключу в хранилище ключей, см. в разделе "Настройка ключей, управляемых клиентом" в том же клиенте для существующей учетной записи хранения.