Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Это важно
В этой статье описывается устаревший интерфейс KMS для AKS. Для новых кластеров под управлением Kubernetes версии 1.33 или более поздней мы рекомендуем использовать новый интерфейс шифрования данных KMS , который предлагает управляемые платформой ключи, ключи, управляемые клиентом, с автоматической сменой ключей и упрощенную настройку.
Общие сведения о параметрах шифрования данных см. в разделе "Основные понятия шифрования данных" для AKS.
В этой статье показано, как включить шифрование в состоянии покоя для общедоступного или частного хранилища ключей с помощью Azure Key Vault и плагина службы управления ключами (KMS) в AKS. Плагин KMS можно использовать для:
- Используйте ключ в хранилище ключей для шифрования etcd.
- приносите свои ключи
- Обеспечьте шифрование данных в состоянии покоя для секретов, хранящихся в etcd.
- Повернуть ключи в хранилище ключей.
Дополнительные сведения об использовании KMS см. в разделе "Использование поставщика KMS для шифрования данных".
Предварительные условия
- Учетная запись Azure с активной подпиской. Создайте учетную запись бесплатно .
- Azure CLI 2.39.0 или более поздней версии. Найдите версию с помощью
az --versionкоманды. Если вам необходимо выполнить установку или обновление, обратитесь к статье Установка Azure CLI.
Предупреждение
Начиная с 15 сентября 2024 г., Konnectivity больше не поддерживается для хранилищ закрытых ключей для новых подписок или подписок, которые ранее не использовали эту конфигурацию. Для подписок, используемых в настоящее время с помощью этой конфигурации или используемой в течение последних 60 дней, поддержка продолжается до тех пор, пока AKS версии 1.30 не закончится для поддержки сообщества.
KMS поддерживает интеграцию виртуальных сетей сервера API или Konnectivity для хранилищ открытых ключей.
KMS поддерживает интеграцию виртуальной сети СЕРВЕРА API для частных и открытых хранилищ ключей.
Вы можете использовать kubectl get pods -n kube-system для проверки результатов и показать, что konnectivity-agent pod запущен. Если под работает, кластер AKS использует Konnectivity. При использовании интеграции виртуальной сети сервера API можно выполнить команду az aks show --resource-group <resource-group-name> --name <cluster-name>, чтобы убедиться, что для enableVnetIntegration установлено значение true.
Ограничения
При интеграции шифрования KMS etcd с AKS действуют следующие ограничения:
- Удаление ключа, хранилища ключей или связанного удостоверения не поддерживается.
- Шифрование KMS etcd не работает с управляемым удостоверением, назначаемым системой. Перед включением функции необходимо задать политику доступа к хранилищу ключей. Системно назначаемое управляемое удостоверение становится доступным только после создания кластера. Учтите зависимость цикла.
- Так как брандмауэр блокирует трафик из подключаемого модуля KMS в Key Vault, два сценария не поддерживаются. Во-первых, Azure Key Vault нельзя настроить с параметром брандмауэра Разрешить общедоступный доступ из определенных виртуальных сетей и IP-адресов. Во-вторых, Azure Key Vault нельзя настроить с отключением общедоступного доступа , если интеграция виртуальной сети API-сервера не включена.
- Максимальное количество секретов, поддерживаемых кластером с включенной функцией KMS, составляет 2000. Однако важно отметить, что KMS версии 2 не ограничивается этим ограничением и может обрабатывать большее количество секретов.
- Использование собственного ((BYO) Bring Your Own) хранилища ключей Azure от другого арендатора не поддерживается.
- С включенной функцией KMS нельзя изменить связанный режим хранилища ключей (общедоступный и закрытый). Чтобы обновить режим хранилища ключей, сначала необходимо отключить KMS, а затем снова включить его.
- Если кластер включил KMS и имеет хранилище закрытых ключей, он должен использовать туннель интеграции виртуальной сети СЕРВЕРА API . Поддержка Konnectivity отсутствует.
- Использование API "Масштабируемые наборы виртуальных машин" для масштабирования узлов в кластере до нуля приводит к их освобождению. Затем кластер исчезает и становится неустранимым.
- После отключения KMS невозможно удалить ключи или истечь срок их действия. Такое поведение приведет к остановке работы сервера API.
- Для частного кластера с поддержкой KMS и интеграции виртуальной сети, использующего хранилище закрытых ключей, группа безопасности сети (NSG) должна разрешить TCP-порт 443 с сервера API на IP-адрес частной конечной точки хранилища закрытых ключей. Это ограничение необходимо учитывать при использовании других правил в подсети API NSG или подсети кластера.
Создание хранилища ключей и ключа для хранилища открытых ключей
В следующих разделах описывается включение KMS для хранилища открытых ключей. Вы можете использовать хранилище открытых ключей с управлением доступом на основе ролей Azure или без нее (Azure RBAC).
Предупреждение
Удаление ключа или хранилища ключей не поддерживается и приводит к тому, что секреты в кластере становятся невосстановимыми.
Если вам нужно восстановить хранилище ключей или ключ, см. управление процессом восстановления Azure Key Vault с мягким удалением и защитой от полной очистки.
- Создание хранилища ключей и ключа с помощью Azure RBAC
- Создание хранилища ключей и ключей без Azure RBAC
Создайте хранилище ключей с помощью Azure RBAC с помощью
az keyvault createкоманды. В этом примере команда также экспортирует идентификатор ресурса хранилища ключей в переменную среды.export KEY_VAULT_RESOURCE_ID=$(az keyvault create --name $KEY_VAULT --resource-group $RESOURCE_GROUP --enable-rbac-authorization true --query id -o tsv)Назначьте себе разрешения на создание ключа с помощью
az role assignment createкоманды. В этом примере роль офицера шифрования Key Vault назначается пользователю, вошедшего в систему.az role assignment create --role "Key Vault Crypto Officer" --assignee-object-id $(az ad signed-in-user show --query id -o tsv) --assignee-principal-type "User" --scope $KEY_VAULT_RESOURCE_IDСоздайте ключ с помощью
az keyvault key createкоманды.az keyvault key create --name $KEY_NAME --vault-name $KEY_VAULTПолучите идентификатор ключа и сохраните его в качестве переменной среды с помощью
az keyvault key showкоманды.export KEY_ID=$(az keyvault key show --name $KEY_NAME --vault-name $KEY_VAULT --query 'key.kid' -o tsv) echo $KEY_ID
Создайте назначаемую пользователем управляемую идентичность для хранилища открытых ключей
Создайте пользовательское управляемое удостоверение с помощью команды
az identity create.az identity create --name $IDENTITY_NAME --resource-group $RESOURCE_GROUPПолучите идентификатор объекта удостоверения и сохраните его в качестве переменной среды с помощью
az identity showкоманды.export IDENTITY_OBJECT_ID=$(az identity show --name $IDENTITY_NAME --resource-group $RESOURCE_GROUP --query 'principalId' -o tsv) echo $IDENTITY_OBJECT_IDПолучите идентификатор ресурса удостоверения и сохраните его в качестве переменной среды с помощью команды
az identity show.export IDENTITY_RESOURCE_ID=$(az identity show --name $IDENTITY_NAME --resource-group $RESOURCE_GROUP --query 'id' -o tsv) echo $IDENTITY_RESOURCE_ID
Назначение разрешений для расшифровки и шифрования хранилища открытых ключей
В следующих разделах описывается назначение разрешений расшифровки и шифрования для хранилища открытых ключей с azure RBAC или без нее.
- Назначение разрешений для хранилища открытых ключей с помощью Azure RBAC
- Назначение разрешений для хранилища открытых ключей без Azure RBAC
Назначьте роль криптопользователя Key Vault для предоставления прав на расшифровку и шифрование с помощью команды
az role assignment create.az role assignment create --role "Key Vault Crypto User" --assignee-object-id $IDENTITY_OBJECT_ID --assignee-principal-type "ServicePrincipal" --scope $KEY_VAULT_RESOURCE_ID
Включение KMS для хранилища открытых ключей в кластере AKS
В следующих разделах описывается включение KMS для хранилища открытых ключей в новом или существующем кластере AKS.
Создание кластера AKS с открытым хранилищем ключей и KMS
Создайте кластер AKS с хранилищем ключей public key, KMS, используя команду
az aks createс параметрами--enable-azure-keyvault-kms,--azure-keyvault-kms-key-vault-network-accessи--azure-keyvault-kms-key-id.az aks create \ --name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUP \ --assign-identity $IDENTITY_RESOURCE_ID \ --enable-azure-keyvault-kms \ --azure-keyvault-kms-key-vault-network-access "Public" \ --azure-keyvault-kms-key-id $KEY_ID \ --generate-ssh-keys
Включение хранилища открытых ключей и KMS в существующем кластере AKS
Включите KMS в публичном хранилище ключей на существующем кластере с помощью команды
az aks updateс параметрами--enable-azure-keyvault-kms,--azure-keyvault-kms-key-vault-network-access, и--azure-keyvault-kms-key-id.az aks update \ --name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUP \ --enable-azure-keyvault-kms \ --azure-keyvault-kms-key-vault-network-access "Public" \ --azure-keyvault-kms-key-id $KEY_IDОбновите все секреты с помощью команды
kubectl get secrets, чтобы убедиться, что созданные ранее секреты больше не остаются зашифрованными. Для больших кластеров может потребоваться разделить секреты по пространству имен или создать скрипт обновления. Если предыдущая команда для обновления KMS завершается ошибкой, выполните следующую команду во избежание неожиданного состояния плагина KMS.kubectl get secrets --all-namespaces -o json | kubectl replace -f -При выполнении команды следующую ошибку можно игнорировать без опасений:
The object has been modified; please apply your changes to the latest version and try again.
Ротация существующих ключей в хранилище открытых ключей
После изменения идентификатора ключа (включая изменение имени ключа или версии ключа), можно повернуть существующие ключи в хранилище открытых ключей.
Предупреждение
После смены ключей не забудьте обновить все секреты. Если вы не обновляете все секреты, секреты недоступны, если созданные ранее ключи не существуют или больше не работают.
KMS одновременно использует два ключа. После первого поворота ключа необходимо убедиться, что старые и новые ключи действительны (не истекли) до следующего поворота ключа. После второй ротации ключей самый старый ключ можно безопасно удалить или дезактивировать.
После смены версии ключа KMS с новой keyId, проверьте json ресурса AKS securityProfile.azureKeyVaultKms.keyId. Убедитесь, что используется новая версия ключа.
Используйте существующие ключи с помощью команды
az aks updateс параметрами--enable-azure-keyvault-kms,--azure-keyvault-kms-key-vault-network-accessи--azure-keyvault-kms-key-id.az aks update \ --name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUP \ --enable-azure-keyvault-kms \ --azure-keyvault-kms-key-vault-network-access "Public" \ --azure-keyvault-kms-key-id $NEW_KEY_IDОбновите все секреты с помощью команды
kubectl get secrets, чтобы убедиться, что созданные ранее секреты больше не остаются зашифрованными. Для больших кластеров может потребоваться разделить секреты по пространству имен или создать скрипт обновления. Если предыдущая команда для обновления KMS завершается ошибкой, выполните следующую команду во избежание неожиданного состояния плагина KMS.kubectl get secrets --all-namespaces -o json | kubectl replace -f -При выполнении команды следующую ошибку можно игнорировать без опасений:
The object has been modified; please apply your changes to the latest version and try again.
Создание хранилища ключей и ключа для закрытого хранилища ключей
Если включить KMS для хранилища закрытых ключей, AKS автоматически создает частную конечную точку и приватную ссылку в группе ресурсов узла. У хранилища ключей имеется подключение частной конечной точки к кластеру AKS.
Предупреждение
При использовании хранилища закрытых ключей следует учитывать следующие сведения:
- KMS поддерживает только интеграцию виртуальной сети СЕРВЕРА API для хранилища закрытых ключей.
- Создание или обновление ключей в хранилище закрытых ключей, у которых нет частной конечной точки, не поддерживается. Сведения об управлении хранилищами закрытых ключей см. в статье Интеграция хранилища ключей через Azure Private Link.
- Удаление ключа или хранилища ключей не поддерживается и приводит к тому, что секреты в кластере становятся невосстановимыми. Если вам нужно восстановить хранилище ключей или ключ, см. управление процессом восстановления Azure Key Vault с мягким удалением и защитой от полной очистки.
Создайте хранилище закрытых ключей с помощью
az keyvault createкоманды с параметром--public-network-access Disabled.az keyvault create --name $KEY_VAULT --resource-group $RESOURCE_GROUP --public-network-access DisabledСоздайте ключ с помощью
az keyvault key createкоманды.az keyvault key create --name $KEY_NAME --vault-name $KEY_VAULT
Создайте назначаемое пользователем управляемое удостоверение для частного хранилища ключей
Создайте пользовательское управляемое удостоверение с помощью команды
az identity create.az identity create --name $IDENTITY_NAME --resource-group $RESOURCE_GROUPПолучите идентификатор объекта удостоверения и сохраните его в качестве переменной среды с помощью
az identity showкоманды.export IDENTITY_OBJECT_ID=$(az identity show --name $IDENTITY_NAME --resource-group $RESOURCE_GROUP --query 'principalId' -o tsv) echo $IDENTITY_OBJECT_IDПолучите идентификатор ресурса удостоверения и сохраняйте его в качестве переменной среды с помощью команды
az identity show.export IDENTITY_RESOURCE_ID=$(az identity show --name $IDENTITY_NAME --resource-group $RESOURCE_GROUP --query 'id' -o tsv) echo $IDENTITY_RESOURCE_ID
Назначение разрешений для расшифровки и шифрования хранилища закрытых ключей
В следующих разделах описывается назначение разрешений расшифровки и шифрования для хранилища закрытых ключей с помощью Azure RBAC или без нее.
- Назначение разрешений для хранилища закрытых ключей с помощью Azure RBAC
- Назначение разрешений для хранилища закрытых ключей без Azure RBAC
Назначьте роль пользователя криптографии Key Vault для расшифровки и шифрования с помощью команды
az role assignment create.az role assignment create --role "Key Vault Crypto User" --assignee-object-id $IDENTITY_OBJECT_ID --assignee-principal-type "ServicePrincipal" --scope $KEY_VAULT_RESOURCE_ID
Назначение разрешений для создания приватной ссылки
Для хранилищ закрытых ключей роль участника Key Vault требуется для создания приватного канала между хранилищем закрытых ключей и кластером.
Назначьте роль участника Key Vault с помощью
az role assignment createкоманды.az role assignment create --role "Key Vault Contributor" --assignee-object-id $IDENTITY_OBJECT_ID --assignee-principal-type "ServicePrincipal" --scope $KEY_VAULT_RESOURCE_ID
Включение KMS для хранилища закрытых ключей в кластере AKS
В следующих разделах описывается включение KMS для хранилища закрытых ключей в новом или существующем кластере AKS.
Создание кластера AKS с закрытым хранилищем ключей и KMS
Создайте кластер AKS с закрытым хранилищем ключей и KMS с помощью команды
az aks createс параметрами--enable-azure-keyvault-kms,--azure-keyvault-kms-key-id,--azure-keyvault-kms-key-vault-network-accessи--azure-keyvault-kms-key-vault-resource-id.az aks create \ --name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUP \ --assign-identity $IDENTITY_RESOURCE_ID \ --enable-azure-keyvault-kms \ --azure-keyvault-kms-key-id $KEY_ID \ --azure-keyvault-kms-key-vault-network-access "Private" \ --azure-keyvault-kms-key-vault-resource-id $KEY_VAULT_RESOURCE_ID \ --generate-ssh-keys
Обновление существующего кластера AKS для включения шифрования KMS и т. д. для хранилища закрытых ключей
Включите KMS в хранилище приватных ключей в существующем кластере с помощью команды
az aks updateс параметрами--enable-azure-keyvault-kms,--azure-keyvault-kms-key-id,--azure-keyvault-kms-key-vault-network-accessи--azure-keyvault-kms-key-vault-resource-id.az aks update \ --name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUP \ --enable-azure-keyvault-kms \ --azure-keyvault-kms-key-id $KEY_ID \ --azure-keyvault-kms-key-vault-network-access "Private" \ --azure-keyvault-kms-key-vault-resource-id $KEY_VAULT_RESOURCE_IDОбновите все секреты с помощью команды
kubectl get secrets, чтобы убедиться, что созданные ранее секреты больше не остаются зашифрованными. Для больших кластеров может потребоваться разделить секреты по пространству имен или создать скрипт обновления. Если предыдущая команда для обновления KMS завершается ошибкой, выполните следующую команду во избежание неожиданного состояния плагина KMS.kubectl get secrets --all-namespaces -o json | kubectl replace -f -При выполнении команды следующую ошибку можно игнорировать без опасений:
The object has been modified; please apply your changes to the latest version and try again.
Обновление существующих ключей в хранилище закрытых ключей
После изменения идентификатора ключа (включая изменение имени ключа или версии ключа), можно повернуть существующие ключи в хранилище закрытых ключей.
Предупреждение
После смены ключей не забудьте обновить все секреты. Если вы не обновляете все секреты, секреты недоступны, если созданные ранее ключи не существуют или больше не работают.
После смены ключа предыдущий ключ (key1) по-прежнему кэшируется и не должен быть удален. Если вы хотите немедленно удалить предыдущий ключ (key1), необходимо дважды повернуть ключ. Затем кэшируются ключ 2 и key3, а ключ1 можно удалить, не затрагивая существующий кластер.
После смены версии ключа KMS с новой keyId, проверьте json ресурса AKS securityProfile.azureKeyVaultKms.keyId. Убедитесь, что используется новая версия ключа.
Поворот существующих ключей в хранилище закрытых ключей с помощью команды
az aks updateс параметрами--enable-azure-keyvault-kms,--azure-keyvault-kms-key-id,--azure-keyvault-kms-key-vault-network-accessи--azure-keyvault-kms-key-vault-resource-id.az aks update \ --name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUP \ --enable-azure-keyvault-kms \ --azure-keyvault-kms-key-id $NEW_KEY_ID \ --azure-keyvault-kms-key-vault-network-access "Private" \ --azure-keyvault-kms-key-vault-resource-id $KEY_VAULT_RESOURCE_IDОбновите все секреты с помощью команды
kubectl get secrets, чтобы убедиться, что созданные ранее секреты больше не остаются зашифрованными. Для больших кластеров может потребоваться разделить секреты по пространству имен или создать скрипт обновления. Если предыдущая команда для обновления KMS завершается ошибкой, выполните следующую команду во избежание неожиданного состояния плагина KMS.kubectl get secrets --all-namespaces -o json | kubectl replace -f -При выполнении команды следующую ошибку можно игнорировать без опасений:
The object has been modified; please apply your changes to the latest version and try again.
Отключение KMS в кластере AKS
Прежде чем отключить KMS, убедитесь, что KMS включен в кластере
az aks listс помощью команды.az aks list --query "[].{Name:name, KmsEnabled:securityProfile.azureKeyVaultKms.enabled, KeyId:securityProfile.azureKeyVaultKms.keyId}" -o tableПосле подтверждения можно отключить KMS с помощью
az aks updateкоманды с параметром--disable-azure-keyvault-kms.az aks update --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --disable-azure-keyvault-kmsОбновите все секреты с помощью команды
kubectl get secrets, чтобы убедиться, что созданные ранее секреты больше не остаются зашифрованными. Для больших кластеров может потребоваться разделить секреты по пространству имен или создать скрипт обновления. Если предыдущая команда для обновления KMS завершается ошибкой, выполните следующую команду во избежание неожиданного состояния плагина KMS.kubectl get secrets --all-namespaces -o json | kubectl replace -f -При выполнении команды следующую ошибку можно игнорировать без опасений:
The object has been modified; please apply your changes to the latest version and try again.
Дальнейшие шаги
Дополнительные сведения об использовании KMS с AKS см. в следующих статьях:
- Включение шифрования данных KMS в AKS — новый интерфейс KMS с ключами, управляемыми платформой, и автоматической сменой ключей
- Основные понятия шифрования неактивных данных для AKS
- Обновление режима хранилища ключей для кластера Службы Azure Kubernetes (AKS) с шифрованием KMS и т. д.
- Перейдите на KMS версии 2 для шифрования etcd в службе Azure Kubernetes (AKS)
- Наблюдаемость шифрования KMS и т. д. в службе Azure Kubernetes (AKS)