Шифрование данных развертывания
При запуске ресурсов Экземпляры контейнеров Azure (ACI) в облаке служба ACI собирает и сохраняет данные, связанные с контейнерами. ACI автоматически шифрует эти данные при сохранении в облаке. Такое шифрование защищает данные, помогая соблюдать корпоративные обязательства по обеспечению безопасности и нормативно-правовому соответствию. ACI также позволяет шифровать эти данные с помощью собственного ключа, обеспечивая больший контроль над данными, связанными с развертываниями ACI.
Шифрование данных ACI
Данные в ACI шифруются и расшифровываются с использованием 256-разрядного шифрования AES. Он включен для всех развертываний ACI, и вам не нужно изменять развертывание или контейнеры, чтобы воспользоваться этим шифрованием. Это покрытие включает метаданные о развертывании, переменных среды, ключах, передаваемых в контейнеры, и журналах, сохраненных после остановки контейнеров, чтобы их можно было увидеть. Шифрование не влияет на производительность группы контейнеров и не будет дополнительных затрат на шифрование.
Вы можете использовать ключи, управляемые Майкрософт, для шифрования данных контейнера, или управлять шифрованием с помощью собственных ключей. В следующей таблице сравниваются эти два варианта:
Ключи, управляемые Майкрософт | Ключи, управляемые клиентом | |
---|---|---|
Операции шифрования и расшифровки | Azure | Azure |
Хранилище ключей | Хранилище ключей Майкрософт | Azure Key Vault |
Ответственность за смену ключей | Microsoft | Клиент |
Доступ к ключу | Только Майкрософт | Майкрософт, клиент |
В этой статье рассматриваются два потока шифрования данных с помощью ключа, управляемого клиентом:
- Шифрование данных с помощью ключа, управляемого клиентом, хранящегося в стандартном Azure Key Vault
- Шифрование данных с помощью ключа, управляемого клиентом, хранящегося в сетевом хранилище ключей Azure с включенными доверенными службами .
Шифрование данных с помощью ключа, управляемого клиентом, хранящегося в стандартном Azure Key Vault
Необходимые компоненты
Используйте среду 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.
Для свойств хранилища ключей используйте следующие рекомендации:
- Имя: требуется указать уникальное имя.
- Подписка — выберите подписку.
- Для группы ресурсов выберите существующую группу ресурсов или создайте новую и введите имя группы ресурсов.
- В раскрывающемся меню Расположение выберите расположение.
- Можно оставить другие параметры по умолчанию или выбрать их в зависимости от дополнительных требований.
Внимание
При использовании ключей, управляемых клиентом, для шифрования шаблона развертывания ACI рекомендуется установить следующие два свойства для хранилища ключей: "Обратимое удаление" и "Не очищать". Эти свойства по умолчанию отключены, но их можно включить с помощью PowerShell или Azure CLI в новом или имеющемся хранилище ключей.
Создание нового ключа
После создания хранилища ключей перейдите к ресурсу на портале Azure. В меню навигации слева колонки ресурсов в разделе "Параметры" выберите "Ключи". В представлении "Ключи" выберите "Создать и импортировать", чтобы создать новый ключ. Используйте любое уникальное имя для этого ключа и другие параметры в соответствии с вашими требованиями.
Настройка политики доступа
Создайте новую политику доступа, чтобы предоставить службе ACI доступ к ключу.
- После создания ключа в колонке ресурсов хранилища ключей в разделе "Параметры" выберите "Политики доступа".
- На странице "Политики доступа" для хранилища ключей выберите "Добавить политику доступа".
- Задайте разрешения ключа для включения ключа Get и Unwrap Key
- В разделе Выбор субъекта выберите Служба "Экземпляр контейнера Azure".
- Выберите " Добавить" внизу
После этого политика доступа должна отобразиться в политиках доступа хранилища ключей.
Изменение шаблона развертывания JSON
Внимание
Шифрование данных развертывания с помощью ключа, управляемого клиентом, доступно в последней версии API (2019-12-01), которая выходит в данный момент. Укажите версию API в шаблоне развертывания. Если у вас возникнут проблемы, обратитесь в службу поддержки Azure.
После настройки ключа и политики доступа к хранилищу ключей добавьте следующие свойства в шаблон развертывания ACI. Дополнительные сведения о развертывании ресурсов ACI с помощью шаблона см. в Руководстве по развертыванию группы с несколькими контейнерами с использованием шаблона Resource Manager.
- В разделе
resourcesa0 2019-12-01
>apiVersion
. - В разделе свойств группы контейнеров шаблона развертывания добавьте значение
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, шифруются с указанным ключом.
Шифрование данных с помощью ключа, управляемого клиентом, в сетевом защищенном Azure Key Vault с включенными доверенными службами
Создание ресурса хранилища ключей
Создайте хранилище ключей Azure с помощью портала Azure, Azure CLI или Azure PowerShell. Чтобы начать, не применяйте какие-либо ограничения сети, чтобы мы могли добавлять необходимые ключи в хранилище. В последующих шагах мы добавим ограничения сети и включите доверенные службы.
Для свойств хранилища ключей используйте следующие рекомендации:
- Имя: требуется указать уникальное имя.
- Подписка — выберите подписку.
- Для группы ресурсов выберите существующую группу ресурсов или создайте новую и введите имя группы ресурсов.
- В раскрывающемся меню Расположение выберите расположение.
- Можно оставить другие параметры по умолчанию или выбрать их в зависимости от дополнительных требований.
Внимание
При использовании ключей, управляемых клиентом, для шифрования шаблона развертывания 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
Изменение разрешений сети Azure Key Vault
Следующие команды настраивают Брандмауэр Azure для Azure Key Vault и разрешают доступ к доверенным службам 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.
- В разделе
resourcesa0 2022-09-01
>apiVersion
. - В разделе свойств группы контейнеров шаблона развертывания добавьте значение
encryptionProperties
, содержащее следующие значения:vaultBaseUrl
: DNS-имя хранилища ключей. Это свойство можно найти в колонке обзора ресурса хранилища ключей на портале.keyName
: имя ключа, созданного ранее;keyVersion
: текущая версия ключа. Это свойство можно найти, щелкнув сам ключ (в разделе "Ключи" в разделе "Параметры" ресурса хранилища ключей)identity
: это свойство является универсальным кодом ресурса экземпляра управляемого удостоверения, созданного ранее.
- В свойствах группы контейнеров добавьте
sku
свойство со значениемStandard
. Этоsku
свойство требуется в API версии 2022-09-01. - В разделе ресурсов добавьте объект, необходимый для использования управляемого
identity
удостоверения с ACI, который содержит следующие значения:type
: тип используемого удостоверения (назначаемое пользователем или назначаемое системой). Этот случай имеет значение UserAssigned.userAssignedIdentities
: resourceURI того же удостоверения, назначаемого пользователем, используемого в объекте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, шифруются с указанным ключом.