Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
При запуске ресурсов Azure Container Instances (ACI) в облаке, служба ACI собирает и сохраняет данные, связанные с вашими контейнерами. ACI автоматически шифрует эти данные при сохранении в облаке. Такое шифрование защищает данные, помогая соблюдать корпоративные обязательства по обеспечению безопасности и нормативно-правовому соответствию. ACI также позволяет шифровать эти данные с помощью собственного ключа, обеспечивая больший контроль над данными, связанными с развертываниями ACI.
Шифрование данных ACI
Данные в ACI шифруются и расшифровываются с использованием 256-разрядного шифрования AES. Он включен для всех развертываний ACI, и вам не нужно изменять развертывание или контейнеры, чтобы воспользоваться этим шифрованием. Это охват включает метаданные о развертывании, переменных среды, ключах, которые передаются в контейнеры, и журналах, сохраненных после остановки контейнеров, чтобы вы смогли их просмотреть. Шифрование не влияет на производительность группы контейнеров и не будет дополнительных затрат на шифрование.
Вы можете использовать ключи, управляемые Майкрософт, для шифрования данных контейнера, или управлять шифрованием с помощью собственных ключей. В следующей таблице сравниваются эти два варианта:
Ключи, управляемые Майкрософт | Ключи, управляемые клиентом | |
---|---|---|
Операции шифрования и расшифровки | Лазурный | Лазурный |
Хранилище ключей | Хранилище ключей Майкрософт | Azure Key Vault |
Ответственность за смену ключей | Корпорация Майкрософт | Клиент |
Доступ к ключу | Только Майкрософт | Майкрософт, клиент |
В этой статье рассматриваются два потока шифрования данных с помощью ключа, управляемого клиентом:
- Шифрование данных с помощью ключа, управляемого клиентом, хранящегося в стандартном 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.
- Установите
apiVersion
на2019-12-01
в разделеresources
. - В разделе свойств группы контейнеров шаблона развертывания добавьте значение
encryptionProperties
, содержащее следующие значения:-
vaultBaseUrl
: DNS-имя вашего хранилища ключей, которое можно найти на панели обзора ресурса хранилища ключей в Portal. -
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.
- Установите
apiVersion
в2022-09-01
подresources
. - В разделе свойств группы контейнеров шаблона развертывания добавьте значение
encryptionProperties
, содержащее следующие значения:-
vaultBaseUrl
: DNS-имя хранилища ключей. Это свойство можно найти в колонке обзора ресурса хранилища ключей на портале. -
keyName
: имя ключа, созданного ранее; -
keyVersion
: текущая версия ключа. Это свойство можно найти, щелкнув сам ключ (в разделе "Ключи" в разделе "Параметры" ресурса хранилища ключей) -
identity
: это свойство является URI ресурса экземпляра управляемой идентичности, созданного ранее.
-
- В свойствах группы контейнеров добавьте
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, шифруются с указанным ключом.