Шифрование данных развертывания
При запуске ресурсов экземпляров контейнеров Azure (ACI) в облаке служба ACI собирает и сохраняет данные, связанные с контейнерами. ACI автоматически шифрует эти данные при сохранении в облаке. Такое шифрование защищает данные, помогая соблюдать корпоративные обязательства по обеспечению безопасности и нормативно-правовому соответствию. ACI также позволяет шифровать эти данные с помощью собственного ключа, обеспечивая больший контроль над данными, связанными с развертываниями ACI.
О шифровании данных ACI
Данные в ACI шифруются и расшифровываются с использованием 256-разрядного шифрования AES. Он включен для всех развертываний ACI, и вам не нужно изменять развертывание или контейнеры, чтобы воспользоваться преимуществами этого шифрования. Сюда входят метаданные о развертывании, переменные среды, ключи, передаваемые в контейнеры, и журналы, сохраненные после остановки контейнеров, чтобы их по-прежнему можно было просмотреть. Шифрование не влияет на производительность группы контейнеров, и для него не требуются дополнительные затраты.
Вы можете использовать ключи, управляемые Майкрософт, для шифрования данных контейнера, или управлять шифрованием с помощью собственных ключей. В следующей таблице сравниваются эти два варианта:
Ключи, управляемые Майкрософт | Ключи, управляемые клиентом | |
---|---|---|
Операции шифрования и расшифровки | Azure | Azure |
Хранилище ключей | Хранилище ключей Майкрософт | Azure Key Vault |
Ответственность за смену ключей | Microsoft | Customer |
Доступ к ключам | Только Майкрософт | Майкрософт, клиент |
В этой статье рассматриваются два потока шифрования данных с помощью ключа, управляемого клиентом:
- Шифрование данных с помощью ключа, управляемого клиентом, хранящегося в стандартном Key Vault Azure
- Шифрование данных с помощью ключа, управляемого клиентом, хранящегося в защищенной сети Key Vault Azure с включенными доверенными службами.
Шифрование данных с помощью ключа, управляемого клиентом, хранящегося в стандартном Key Vault Azure
Предварительные требования
Используйте среду Bash в Azure Cloud Shell. Дополнительные сведения см. в статье Краткое руководство по Bash в Azure Cloud Shell.
Если вы предпочитаете выполнять справочные команды CLI локально, установите Azure CLI. Если вы работаете в Windows или macOS, Azure CLI можно запустить в контейнере Docker. Дополнительные сведения см. в разделе Запуск Azure CLI в контейнере Docker.
Если вы используете локальную установку, выполните вход в Azure CLI с помощью команды az login. Чтобы выполнить аутентификацию, следуйте инструкциям в окне терминала. Сведения о других возможностях, доступных при входе, приведены в статье Вход с помощью Azure CLI.
Установите расширение Azure CLI при первом использовании, когда появится соответствующий запрос. Дополнительные сведения о расширениях см. в статье Использование расширений с Azure CLI.
Выполните команду az version, чтобы узнать установленную версию и зависимые библиотеки. Чтобы обновиться до последней версии, выполните команду az upgrade.
Создание субъекта-службы для ACI
Прежде всего необходимо обеспечить, чтобы клиенту Azure был назначен субъект-служба для предоставления разрешений службе "Экземпляры контейнеров Azure".
Важно!
Чтобы выполнить следующую команду и успешно создать субъект-службу, убедитесь, что у вас есть разрешения на создание субъектов-служб в клиенте.
Следующая команда CLI настраивает ACI SP в среде Azure:
az ad sp create --id 6bb8e274-af5d-4df2-98a3-4fd78b4cafd9
В выходных данных выполнения этой команды должна отображаться субъект-служба, настроенная с использованием "displayName": "служба экземпляра контейнера Azure".
Если вы не можете успешно создать субъект-службу:
- убедитесь, что у вас есть соответствующие разрешения в клиенте
- проверьте, существует ли уже субъект-служба в вашем клиенте для развертывания в ACI. Для этого запустите
az ad sp show --id 6bb8e274-af5d-4df2-98a3-4fd78b4cafd9
и используйте эту субъект-службу
Создание ресурса хранилища ключей
Создайте хранилище ключей Azure с помощью портала Azure, Azure CLI или Azure PowerShell.
Для свойств хранилища ключей используйте следующие рекомендации:
- Name (Имя). Укажите уникальное имя.
- Подписка: Выберите подписку.
- Для группы ресурсов выберите существующую группу ресурсов или создайте новую и введите имя группы ресурсов.
- Выберите расположение в раскрывающемся меню "Расположение".
- Можно оставить другие параметры по умолчанию или выбрать их в зависимости от дополнительных требований.
Важно!
При использовании ключей, управляемых клиентом, для шифрования шаблона развертывания ACI рекомендуется установить следующие два свойства для хранилища ключей: "Обратимое удаление" и "Не очищать". Эти свойства по умолчанию отключены, но их можно включить с помощью PowerShell или Azure CLI в новом или имеющемся хранилище ключей.
Создание нового ключа
После создания хранилища ключей перейдите к ресурсу на портале Azure. В меню навигации слева в колонке ресурсов в разделе "Параметры" нажмите Ключи. В представлении "Ключи" нажмите кнопку "Создать или импортировать", чтобы создать новый ключ. Используйте любое уникальное имя для этого ключа и другие параметры в соответствии с вашими требованиями.
Настройка политики доступа
Создайте новую политику доступа, чтобы предоставить службе ACI доступ к ключу.
- После создания ключа вернитесь в колонку ресурсов хранилища ключей в разделе "Параметры" и нажмите Политики доступа.
- На странице "Политики доступа" для хранилища ключей нажмите Добавить политику доступа.
- Установите Разрешения ключей таким образом, чтобы в их число входили Получение и Распаковка ключа
.
- В разделе Выбор субъекта выберите Служба "Экземпляр контейнера Azure" .
- В нижней части страницы нажмите Добавить
После этого политика доступа должна отобразиться в политиках доступа хранилища ключей.
Изменение шаблона развертывания JSON
Важно!
Шифрование данных развертывания с помощью ключа, управляемого клиентом, доступно в последней версии API (2019-12-01), которая выходит в данный момент. Укажите версию API в шаблоне развертывания. Если у вас возникнут проблемы, обратитесь в службу поддержки Azure.
После настройки ключа и политики доступа к хранилищу ключей добавьте следующие свойства в шаблон развертывания ACI. Дополнительные сведения о развертывании ресурсов ACI с помощью шаблона см. в руководстве по развертыванию группы с несколькими контейнерами с использованием шаблона Resource Manager.
- В разделе
resources
задайте для параметраapiVersion
значение2019-12-01
. - В разделе свойств группы контейнеров шаблона развертывания добавьте элемент
encryptionProperties
со следующими значениями:vaultBaseUrl
: DNS-имя хранилища ключей, его можно найти в колонке обзора ресурса хранилища ключей на портале;keyName
: имя ключа, созданного ранее;keyVersion
: текущая версия ключа. Ее можно найти, нажав ключ ("Ключи" в разделе "Параметры" ресурса хранилища ключей).
- В свойствах группы контейнеров добавьте свойство
sku
со значениемStandard
. Свойствоsku
является обязательным в API версии 2019-12-01.
В следующем фрагменте шаблона показаны эти дополнительные свойства для шифрования данных развертывания:
[...]
"resources": [
{
"name": "[parameters('containerGroupName')]",
"type": "Microsoft.ContainerInstance/containerGroups",
"apiVersion": "2019-12-01",
"location": "[resourceGroup().location]",
"properties": {
"encryptionProperties": {
"vaultBaseUrl": "https://example.vault.azure.net",
"keyName": "acikey",
"keyVersion": "xxxxxxxxxxxxxxxx"
},
"sku": "Standard",
"containers": {
[...]
}
}
}
]
Ниже приведен полный шаблон, основанный на шаблоне из руководства по развертыванию группы с несколькими контейнерами с использованием шаблона Resource Manager.
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"containerGroupName": {
"type": "string",
"defaultValue": "myContainerGroup",
"metadata": {
"description": "Container Group name."
}
}
},
"variables": {
"container1name": "aci-tutorial-app",
"container1image": "mcr.microsoft.com/azuredocs/aci-helloworld:latest",
"container2name": "aci-tutorial-sidecar",
"container2image": "mcr.microsoft.com/azuredocs/aci-tutorial-sidecar"
},
"resources": [
{
"name": "[parameters('containerGroupName')]",
"type": "Microsoft.ContainerInstance/containerGroups",
"apiVersion": "2019-12-01",
"location": "[resourceGroup().location]",
"properties": {
"encryptionProperties": {
"vaultBaseUrl": "https://example.vault.azure.net",
"keyName": "acikey",
"keyVersion": "xxxxxxxxxxxxxxxx"
},
"sku": "Standard",
"containers": [
{
"name": "[variables('container1name')]",
"properties": {
"image": "[variables('container1image')]",
"resources": {
"requests": {
"cpu": 1,
"memoryInGb": 1.5
}
},
"ports": [
{
"port": 80
},
{
"port": 8080
}
]
}
},
{
"name": "[variables('container2name')]",
"properties": {
"image": "[variables('container2image')]",
"resources": {
"requests": {
"cpu": 1,
"memoryInGb": 1.5
}
}
}
}
],
"osType": "Linux",
"ipAddress": {
"type": "Public",
"ports": [
{
"protocol": "tcp",
"port": "80"
},
{
"protocol": "tcp",
"port": "8080"
}
]
}
}
}
],
"outputs": {
"containerIPv4Address": {
"type": "string",
"value": "[reference(resourceId('Microsoft.ContainerInstance/containerGroups/', parameters('containerGroupName'))).ipAddress.ip]"
}
}
}
Развертывание ресурсов
После создания и редактирования файла шаблона на рабочем столе его можно отправить в каталог Cloud Shell, перетащив в него файл.
Создайте группу ресурсов с помощью команды az group create.
az group create --name myResourceGroup --location eastus
Разверните шаблон с помощью команды az deployment group create.
az deployment group create --resource-group myResourceGroup --template-file deployment-template.json
В течение нескольких секунд вы должны получить исходный ответ Azure. По завершении развертывания все связанные с ним данные, сохраненные службой ACI, будут зашифрованы с помощью предоставленного ключа.
Шифрование данных с помощью ключа, управляемого клиентом, в защищенном сетью Key Vault Azure с включенными доверенными службами
Создание ресурса хранилища ключей
Создайте хранилище ключей Azure с помощью портала Azure, Azure CLI или Azure PowerShell. Для начала не применяйте ограничения сети, чтобы мы могли добавить необходимые ключи в хранилище. На последующих шагах мы добавим ограничения сети и включим доверенные службы.
Для свойств хранилища ключей используйте следующие рекомендации:
- Name (Имя). Укажите уникальное имя.
- Подписка: Выберите подписку.
- Для группы ресурсов выберите существующую группу ресурсов или создайте новую и введите имя группы ресурсов.
- Выберите расположение в раскрывающемся меню "Расположение".
- Можно оставить другие параметры по умолчанию или выбрать их в зависимости от дополнительных требований.
Важно!
При использовании ключей, управляемых клиентом, для шифрования шаблона развертывания ACI рекомендуется установить следующие два свойства для хранилища ключей: "Обратимое удаление" и "Не очищать". Эти свойства по умолчанию отключены, но их можно включить с помощью PowerShell или Azure CLI в новом или имеющемся хранилище ключей.
Создание нового ключа
После создания хранилища ключей перейдите к ресурсу на портале Azure. В меню навигации слева в колонке ресурсов в разделе "Параметры" нажмите Ключи. В представлении "Ключи" нажмите кнопку "Создать или импортировать", чтобы создать новый ключ. Используйте любое уникальное имя для этого ключа и другие параметры в соответствии с вашими требованиями. Обязательно запишите имя и версию ключа для последующих шагов.
Создание управляемого удостоверения, назначаемого пользователем, для группы контейнеров
Создайте в подписке удостоверение, используя команду az identity create. Вы можете использовать ту же группу ресурсов, что и для создания хранилища ключей, или любую другую.
az identity create \
--resource-group myResourceGroup \
--name myACIId
Чтобы применить это удостоверение на следующих шагах, выполните команду az identity show для сохранения идентификатора субъекта-службы и идентификатора ресурса в переменных.
# Get service principal ID of the user-assigned identity
spID=$(az identity show \
--resource-group myResourceGroup \
--name myACIId \
--query principalId --output tsv)
Настройка политики доступа
Создайте новую политику доступа, чтобы разрешить назначаемому пользователем удостоверению доступ к ключу и распаковывать его в целях шифрования.
az keyvault set-policy \
--name mykeyvault \
--resource-group myResourceGroup \
--object-id $spID \
--key-permissions get unwrapKey
Изменение сетевых разрешений Key Vault Azure
Следующие команды настраивают Брандмауэр Azure для Key Vault Azure и разрешают доступ к доверенным службам Azure, таким как ACI.
az keyvault update \
--name mykeyvault \
--resource-group myResourceGroup \
--default-action Deny
az keyvault update \
--name mykeyvault \
--resource-group myResourceGroup \
--bypass AzureServices
Изменение шаблона развертывания JSON
Важно!
Шифрование данных развертывания с помощью ключа, управляемого клиентом, доступно в API 2022-09-01 или более поздней версии. Версия API 2022-09-01 доступна только через ARM или REST. Если у вас возникнут проблемы, обратитесь в службу поддержки Azure. После настройки ключа и политики доступа к хранилищу ключей добавьте следующие свойства в шаблон развертывания ACI. Дополнительные сведения о развертывании ресурсов ACI с помощью шаблона см. в руководстве по развертыванию группы с несколькими контейнерами с использованием шаблона Resource Manager.
- В разделе
resources
задайте для параметраapiVersion
значение2022-09-01
. - В разделе свойств группы контейнеров шаблона развертывания добавьте элемент
encryptionProperties
со следующими значениями:vaultBaseUrl
: DNS-имя хранилища ключей. Это можно найти в колонке обзора ресурса хранилища ключей на портале.keyName
: имя ключа, созданного ранее;keyVersion
: текущая версия ключа. Ее можно найти, нажав ключ ("Ключи" в разделе "Параметры" ресурса хранилища ключей).identity
: это URI ресурса экземпляра управляемого удостоверения, созданного ранее.
- В свойствах группы контейнеров добавьте свойство
sku
со значениемStandard
. Свойствоsku
является обязательным в API версии 2022-09-01. - В разделе resources добавьте объект , необходимый
identity
для использования управляемого удостоверения с ACI, который содержит следующие значения:type
: тип используемого удостоверения (назначаемого пользователем или системой). В этом случае будет задано значение UserAssigned.userAssignedIdentities
: ресурс URI того же назначаемого пользователем удостоверения, используемого выше в объектеencryptionProperties
.
В следующем фрагменте шаблона показаны эти дополнительные свойства для шифрования данных развертывания:
[...]
"resources": [
{
"name": "[parameters('containerGroupName')]",
"type": "Microsoft.ContainerInstance/containerGroups",
"apiVersion": "2019-12-01",
"location": "[resourceGroup().location]",
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"/subscriptions/XXXXXXXXXXXXXXXXXXXXXX/resourcegroups/XXXXXXXXXXXXXXXXXXXXXX/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACIId": {}
}
},
"properties": {
"encryptionProperties": {
"vaultBaseUrl": "https://example.vault.azure.net",
"keyName": "acikey",
"keyVersion": "xxxxxxxxxxxxxxxx",
"identity": "/subscriptions/XXXXXXXXXXXXXXXXXXXXXX/resourcegroups/XXXXXXXXXXXXXXXXXXXXXX/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACIId"
},
"sku": "Standard",
"containers": {
[...]
}
}
}
]
Ниже приведен полный шаблон, основанный на шаблоне из руководства по развертыванию группы с несколькими контейнерами с использованием шаблона Resource Manager.
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"containerGroupName": {
"type": "string",
"defaultValue": "myContainerGroup",
"metadata": {
"description": "Container Group name."
}
}
},
"variables": {
"container1name": "aci-tutorial-app",
"container1image": "mcr.microsoft.com/azuredocs/aci-helloworld:latest",
"container2name": "aci-tutorial-sidecar",
"container2image": "mcr.microsoft.com/azuredocs/aci-tutorial-sidecar"
},
"resources": [
{
"name": "[parameters('containerGroupName')]",
"type": "Microsoft.ContainerInstance/containerGroups",
"apiVersion": "2022-09-01",
"location": "[resourceGroup().location]",
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"/subscriptions/XXXXXXXXXXXXXXXXXXXXXX/resourcegroups/XXXXXXXXXXXXXXXXXXXXXX/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACIId": {}
}
},
"properties": {
"encryptionProperties": {
"vaultBaseUrl": "https://example.vault.azure.net",
"keyName": "acikey",
"keyVersion": "xxxxxxxxxxxxxxxx",
"identity": "/subscriptions/XXXXXXXXXXXXXXXXXXXXXX/resourcegroups/XXXXXXXXXXXXXXXXXXXXXX/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACIId"
},
"sku": "Standard",
"containers": [
{
"name": "[variables('container1name')]",
"properties": {
"image": "[variables('container1image')]",
"resources": {
"requests": {
"cpu": 1,
"memoryInGb": 1.5
}
},
"ports": [
{
"port": 80
},
{
"port": 8080
}
]
}
},
{
"name": "[variables('container2name')]",
"properties": {
"image": "[variables('container2image')]",
"resources": {
"requests": {
"cpu": 1,
"memoryInGb": 1.5
}
}
}
}
],
"osType": "Linux",
"ipAddress": {
"type": "Public",
"ports": [
{
"protocol": "tcp",
"port": "80"
},
{
"protocol": "tcp",
"port": "8080"
}
]
}
}
}
],
"outputs": {
"containerIPv4Address": {
"type": "string",
"value": "[reference(resourceId('Microsoft.ContainerInstance/containerGroups/', parameters('containerGroupName'))).ipAddress.ip]"
}
}
}
Развертывание ресурсов
После создания и редактирования файла шаблона на рабочем столе его можно отправить в каталог Cloud Shell, перетащив в него файл.
Создайте группу ресурсов с помощью команды az group create.
az group create --name myResourceGroup --location eastus
Разверните шаблон с помощью команды az deployment group create.
az deployment group create --resource-group myResourceGroup --template-file deployment-template.json
В течение нескольких секунд вы должны получить исходный ответ Azure. По завершении развертывания все связанные с ним данные, сохраненные службой ACI, будут зашифрованы с помощью предоставленного ключа.
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по