Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Эта статья является второй частью в серии учебников из четырех частей. Часть одна содержит обзор ключей, управляемых клиентом, их функций и рекомендаций, прежде чем включить его в реестре. В этой статье описывается, как включить управляемый клиентом ключ с помощью Azure CLI, портал Azure или шаблона Azure Resource Manager.
Предварительные требования
- Установите Azure CLI или подготовьте к использованию Azure Cloud Shell.
- Войдите на портал Azure.
Включение ключа, управляемого клиентом, с помощью Azure CLI
Создать группу ресурсов
Выполните команду az group create, чтобы создать группу ресурсов, которая будет содержать хранилище ключей, реестр контейнеров и другие необходимые ресурсы:
az group create --name <resource-group-name> --location <location>
Создание управляемого удостоверения, назначаемого пользователем
Настройте управляемое удостоверение, назначаемое пользователем, для реестра, чтобы получить доступ к хранилищу ключей:
Выполните команду az identity create, чтобы создать управляемое удостоверение:
az identity create \ --resource-group <resource-group-name> \ --name <managed-identity-name>
В выходных данных команды обратите внимание на значения
id
иprincipalId
для настройки доступа к реестру через хранилище ключей.{ "clientId": "00001111-aaaa-2222-bbbb-3333cccc4444", "clientSecretUrl": "https://control-eastus.identity.azure.net/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/myresourcegroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myidentityname/credentials?tid=aaaabbbb-0000-cccc-1111-dddd2222eeee&oid=aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb&aid=00001111-aaaa-2222-bbbb-3333cccc4444", "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/myresourcegroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myresourcegroup", "location": "eastus", "name": "myidentityname", "principalId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "resourceGroup": "myresourcegroup", "tags": {}, "tenantId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "type": "Microsoft.ManagedIdentity/userAssignedIdentities" }
Для удобства сохраните значения
id
иprincipalId
в переменных среды.identityID=$(az identity show --resource-group <resource-group-name> --name <managed-identity-name> --query 'id' --output tsv) identityPrincipalID=$(az identity show --resource-group <resource-group-name> --name <managed-identity-name> --query 'principalId' --output tsv)
Создание хранилища ключей
Выполните команду az keyvault create, чтобы создать хранилище ключей, в котором можно хранить управляемый клиентом ключ для шифрования реестра.
По умолчанию новое хранилище ключей автоматически включает параметр мягкого удаления. Чтобы предотвратить потерю данных от случайного удаления ключей или хранилищ ключей, рекомендуется включить параметр защиты очистки :
az keyvault create --name <key-vault-name> \ --resource-group <resource-group-name> \ --enable-purge-protection
Для удобства запишите идентификатор ресурса хранилища ключей и сохраните значение в переменных среды:
keyvaultID=$(az keyvault show --resource-group <resource-group-name> --name <key-vault-name> --query 'id' --output tsv)
Включение доверенных служб для доступа к хранилищу ключей
Если хранилище ключей защищено брандмауэром или виртуальной сетью (частной конечной точкой), включите параметр сети, чтобы разрешить доступ доверенным службам Azure. Дополнительные сведения см. в разделе Настройка сетевых параметров Azure Key Vault.
Включите управляемые удостоверения для доступа к хранилищу ключей
Существует два способа включения управляемых удостоверений для доступа к хранилищу ключей.
Первый вариант — настроить политику доступа для хранилища ключей и задать разрешения ключа для доступа с управляемым удостоверением, назначаемого пользователем:
Выполните команду az keyvault set policy. Передайте ранее созданное и сохраненное значение
principalID
переменной среды.Установите разрешения для ключей
get
,unwrapKey
иwrapKey
:az keyvault set-policy \ --resource-group <resource-group-name> \ --name <key-vault-name> \ --object-id $identityPrincipalID \ --key-permissions get unwrapKey wrapKey
Второй вариант — использовать управление доступом на основе ролей Azure (RBAC) для назначения разрешений управляемому удостоверению, назначаемого пользователем, и доступа к хранилищу ключей.
Запустите команду az role assignment create и назначьте Key Vault Crypto Service Encryption User
роль управляемому удостоверению, назначаемого пользователем:
az role assignment create --assignee $identityPrincipalID \
--role "Key Vault Crypto Service Encryption User" \
--scope $keyvaultID
Создание ключа и получение идентификатора ключа
Выполните команду создания ключа az keyvault, чтобы создать ключ в хранилище ключей:
az keyvault key create \ --name <key-name> \ --vault-name <key-vault-name>
В выходных данных команды запишите идентификатор ключа (
kid
):[...] "key": { "crv": null, "d": null, "dp": null, "dq": null, "e": "AQAB", "k": null, "keyOps": [ "encrypt", "decrypt", "sign", "verify", "wrapKey", "unwrapKey" ], "kid": "https://mykeyvault.vault.azure.net/keys/mykey/<version>", "kty": "RSA", [...]
Для удобства сохраните формат, который вы выбрали для идентификатора ключа в переменной
$keyID
среды. Идентификатор ключа можно использовать с версией или без нее.
Смена ключей
Вы можете выбрать ручной или автоматический поворот ключей.
Шифрование реестра с помощью управляемого клиентом ключа, содержащего указанную версию, разрешает только ручную смену ключей в Реестре контейнеров Azure. В приведенном примере сохраняется свойство kid
ключа.
keyID=$(az keyvault key show \
--name <keyname> \
--vault-name <key-vault-name> \
--query 'key.kid' --output tsv)
Шифрование реестра с управляемым клиентом ключом без указания версии ключа позволит автоматической смене ключей автоматически обнаруживать новую версию ключа в Azure Key Vault. В этом примере из свойства ключа kid
удаляется версия.
keyID=$(az keyvault key show \
--name <keyname> \
--vault-name <key-vault-name> \
--query 'key.kid' --output tsv)
keyID=$(echo $keyID | sed -e "s/\/[^/]*$//")
Создание реестра с использованием управляемого клиентом ключа
Выполните команду az acr create, чтобы создать реестр на уровне служб Premium и включить управляемый клиентом ключ.
Передайте значения идентификатора управляемого удостоверения (
id
) и идентификатора ключа (kid
), хранящиеся в переменных среды на предыдущих этапах.az acr create \ --resource-group <resource-group-name> \ --name <container-registry-name> \ --identity $identityID \ --key-encryption-key $keyID \ --sku Premium
Показать статус шифрования
Выполните команду az acr encryption show, чтобы показать состояние шифрования реестра с помощью ключа, управляемого клиентом:
az acr encryption show --name <container-registry-name>
В зависимости от ключа, используемого для шифрования реестра, выходные данные аналогичны следующим:
{
"keyVaultProperties": {
"identity": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"keyIdentifier": "https://myvault.vault.azure.net/keys/myresourcegroup/abcdefg123456789...",
"keyRotationEnabled": true,
"lastKeyRotationTimestamp": xxxxxxxx
"versionedKeyIdentifier": "https://myvault.vault.azure.net/keys/myresourcegroup/abcdefg123456789...",
},
"status": "enabled"
}
Включение клиентского управляющего ключа с помощью портала Azure
Создание управляемой идентичности, заданной пользователем
Чтобы создать назначаемое пользователем управляемое удостоверение для ресурсов Azure в портале Azure,
Выполните действия, чтобы создать идентификатор, назначаемый пользователем.
Сохраните имя удостоверения, чтобы использовать его в последующих шагах.
Создание хранилища ключей
Следуйте шагам в кратком руководстве: создание хранилища ключей с помощью портала Azure.
При создании хранилища ключей для ключа, управляемого клиентом, на вкладке Основные включите параметр Защита от очистки. Этот параметр помогает предотвратить потерю данных от случайного удаления ключей или хранилищ ключей.
Включение доверенных служб для доступа к хранилищу ключей
Если хранилище ключей защищено брандмауэром или виртуальной сетью (частной конечной точкой), включите параметр сети, чтобы разрешить доступ доверенным службам Azure. Дополнительные сведения см. в разделе Настройка сетевых параметров Azure Key Vault.
Включите управляемые идентификаторы для доступа к хранилищу ключей
Существует два способа подключения управляемых удостоверений для доступа к хранилищу ключей.
Первый вариант — настроить политику доступа для хранилища ключей и задать разрешения ключа для доступа с управляемым удостоверением, назначаемого пользователем:
- Перейдите в хранилище ключей.
- Выберите пункт Параметры>Политика доступа > +Добавить политику доступа.
- Выберите разрешения "Ключ", а затем выберите "Получить", "Распаковка ключа" и "Ключ оболочки".
- В разделе Выбор объекта управления выберите имя ресурса для управляемого удостоверения, назначенного пользователем.
- Выберите Добавить, затем выберите Сохранить.
Другим вариантом является назначение роли Key Vault Crypto Service Encryption User
RBAC управляемому удостоверению, назначенному пользователем, в области хранилища ключей. Подробные инструкции см. в статье Назначение ролей Azure с помощью портала Microsoft Azure.
Создание ключа
Создайте ключ в хранилище ключей и используйте его для шифрования реестра. Выполните приведенные ниже действия, если необходимо выбрать конкретную версию ключа, управляемого клиентом. Перед созданием реестра может потребоваться создать ключ, если доступ к хранилищу ключей ограничен частной конечной точкой или выбранными сетями.
- Перейдите в хранилище ключей.
- Выберите Параметры>Ключи.
- Выберите + создать или импортировать и введите уникальное имя для ключа.
- Примите оставшиеся значения по умолчанию и нажмите кнопку "Создать".
- После создания выберите ключ и его текущую версию. Скопируйте ИД ключа для версии ключа.
Создание реестра контейнеров
- Последовательно выберите Создать ресурс>Контейнеры>Реестр контейнеров.
- На вкладке "Основные сведения" выберите или создайте группу ресурсов, а затем введите имя реестра. В поле SKU выберите пункт Премиум.
- На вкладке "Шифрование" для ключа, управляемого клиентом, выберите "Включено".
- Для идентичности выберите созданную управляемую идентичность.
- Для шифрования выберите один из следующих параметров:
- Выберите пункт "Выбрать из Key Vault", а затем выберите существующее хранилище ключей и ключ или нажмите кнопку "Создать". Выбранная клавиша отменяется и включает автоматическую смену ключей.
- Выберите Ввести URI ключаи укажите идентификатор существующего ключа. Вы можете указать URI ключа с версией (для ключа, который должен быть повернут вручную) или универсальный код ресурса (URI) с невернутым ключом (который обеспечивает автоматическую смену ключей). См. шаги по созданию ключа в предыдущем разделе.
- Выберите Просмотр и создание.
- Нажмите кнопку Создать, чтобы активировать реестр.
Снимок экрана: параметры создания зашифрованного реестра на портале Azure.
Отображение состояния шифрования
Чтобы просмотреть состояние шифрования реестра на портале, перейдите в реестр. В разделе Параметры выберите Шифрование.
Включение ключа, управляемого клиентом, с помощью шаблона Resource Manager
Шаблон Resource Manager можно использовать для создания реестра контейнеров и включения шифрования с помощью ключа, управляемого клиентом:
Скопируйте следующее содержимое шаблона Resource Manager в новый файл и сохраните его как CMKtemplate.json:
{ "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "vault_name": { "defaultValue": "", "type": "String" }, "registry_name": { "defaultValue": "", "type": "String" }, "identity_name": { "defaultValue": "", "type": "String" }, "kek_id": { "type": "String" } }, "variables": {}, "resources": [ { "type": "Microsoft.ContainerRegistry/registries", "apiVersion": "2019-12-01-preview", "name": "[parameters('registry_name')]", "location": "[resourceGroup().location]", "sku": { "name": "Premium", "tier": "Premium" }, "identity": { "type": "UserAssigned", "userAssignedIdentities": { "[resourceID('Microsoft.ManagedIdentity/userAssignedIdentities', parameters('identity_name'))]": {} } }, "dependsOn": [ "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', parameters('identity_name'))]" ], "properties": { "adminUserEnabled": false, "encryption": { "status": "enabled", "keyVaultProperties": { "identity": "[reference(resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', parameters('identity_name')), '2018-11-30').clientId]", "KeyIdentifier": "[parameters('kek_id')]" } }, "networkRuleSet": { "defaultAction": "Allow", "virtualNetworkRules": [], "ipRules": [] }, "policies": { "quarantinePolicy": { "status": "disabled" }, "trustPolicy": { "type": "Notary", "status": "disabled" }, "retentionPolicy": { "days": 7, "status": "disabled" } } } }, { "type": "Microsoft.KeyVault/vaults/accessPolicies", "apiVersion": "2018-02-14", "name": "[concat(parameters('vault_name'), '/add')]", "dependsOn": [ "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', parameters('identity_name'))]" ], "properties": { "accessPolicies": [ { "tenantId": "[subscription().tenantId]", "objectId": "[reference(resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', parameters('identity_name')), '2018-11-30').principalId]", "permissions": { "keys": [ "get", "unwrapKey", "wrapKey" ] } } ] } }, { "type": "Microsoft.ManagedIdentity/userAssignedIdentities", "apiVersion": "2018-11-30", "name": "[parameters('identity_name')]", "location": "[resourceGroup().location]" } ] }
Выполните действия, описанные в предыдущих разделах, чтобы создать следующие ресурсы:
- Хранилище ключей, идентифицируемое по имени
- Ключ хранилища ключей, идентифицируемый по идентификатору ключа
Выполните команду az deployment group create, чтобы создать реестр с помощью предыдущего файла шаблона. При указании укажите новое имя реестра и имя управляемого удостоверения, назначаемое пользователем, а также имя хранилища ключей и созданный идентификатор ключа.
az deployment group create \ --resource-group <resource-group-name> \ --template-file CMKtemplate.json \ --parameters \ registry_name=<registry-name> \ identity_name=<managed-identity> \ vault_name=<key-vault-name> \ key_id=<key-vault-key-id>
Выполните команду az acr encryption show, чтобы показать состояние шифрования реестра:
az acr encryption show --name <registry-name>
Следующие шаги
Перейдите к следующей статье, чтобы перейти к смене ключей, управляемых клиентом, обновлению версий ключей и отмене управляемого клиентом ключа.