Включение ключа, управляемого клиентом
Эта статья является второй частью в серии учебников из четырех частей. Часть одна содержит обзор ключей, управляемых клиентом, их функций и рекомендаций, прежде чем включить его в реестре. В этой статье описывается, как включить управляемый клиентом ключ с помощью 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. Передайте ранее созданное и сохраненное значение
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) с невернутым ключом (который обеспечивает автоматическую смену ключей). См. шаги по созданию ключа в предыдущем разделе.
- Выберите Review + create (Просмотреть и создать).
- Нажмите кнопку Создать, чтобы активировать реестр.
Отображение состояния шифрования
Чтобы просмотреть состояние шифрования реестра на портале, перейдите в реестр. В разделе Параметры выберите Шифрование.
Включение ключа, управляемого клиентом, с помощью шаблона 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>
Следующие шаги
Перейдите к следующей статье, чтобы перейти к смене ключей, управляемых клиентом, обновлению версий ключей и отмене управляемого клиентом ключа.