Поделиться через


Использование провайдера Azure Key Vault для драйвера CSI хранилища секретов в кластере Azure Kubernetes Service (AKS)

Поставщик Azure Key Vault для драйвера CSI хранилища секретов позволяет интегрировать Azure Key Vault как хранилище секретов с кластером Azure Kubernetes Service (AKS) через том CSI.

Функции

  • Подключает секреты, ключи и сертификаты к pod с помощью тома CSI.
  • Поддерживает встроенные тома CSI.
  • Поддерживает монтирование нескольких объектов хранилища секретов в виде одного тома.
  • Поддерживает переносимость pod с помощью SecretProviderClass CRD.
  • Поддерживает контейнеры Windows.
  • Синхронизируется с секретами Kubernetes.
  • Поддерживает авторотацию подключенного содержимого и синхронизированных секретов Kubernetes.

Ограничения

  • Контейнер, использующий ConfigMap или Secret в качестве точки монтирования тома subPath, не получает автоматических обновлений при замене секрета. Это ограничение Kubernetes. Чтобы изменения вступили в силу, приложение должно перезагрузить измененный файл, наблюдая за изменениями в файловой системе или перезапуском модуля pod. Дополнительные сведения см. в разделе "Известные ограничения для хранилища секретов CSI Driver".
  • Надстройка создает управляемое удостоверение с именем azurekeyvaultsecretsprovider-xxx в группе ресурсов узла и автоматически назначает его масштабируемым наборам виртуальных машин (VMSS). Это управляемое удостоверение или собственное управляемое удостоверение можно использовать для доступа к хранилищу ключей. Предотвращение создания удостоверения не поддерживается.

Предварительные условия

Сеть

  • При использовании изолированных сетевых кластеров рекомендуется настроить частную конечную точку для доступа к Azure Key Vault.
  • Если кластер имеет тип исходящего трафика userDefinedRouting и использует брандмауэрное устройство, которое может управлять исходящим трафиком на основе доменных имен, таких как Брандмауэр Azure, убедитесь, что разрешены необходимые правила для исходящего трафика и Полные доменные имена (FQDNs).
  • Если вы ограничиваете входящий трафик в кластер, убедитесь, что открыты порты 9808 и 8095 .

Роли

  • Учетные данные, которые используются вместе с SecretProviderClass, должны иметь Key Vault Certificate User для доступа к key или certificateтипам объектов.
  • Удостоверение, используемое вместе с SecretProviderClass, должно иметь Key Vault Secrets User для доступа к secretтипу объекта.

Создание кластера AKS с помощью поставщика Azure Key Vault для поддержки драйвера CSI хранилища секретов

  1. Создайте группу ресурсов Azure с помощью az group create команды.

    az group create --name myResourceGroup --location eastus2
    
  2. Создайте кластер AKS с модулем Azure Key Vault для использования драйвера CSI для хранилища секретов с помощью команды az aks create с параметром --enable-addons azure-keyvault-secrets-provider. Надстройка создает управляемое удостоверение, назначаемое пользователем, которое можно использовать для аутентификации в вашем хранилище ключей. В следующем примере создается кластер AKS с включенной поддержкой Хранилища ключей Azure для драйвера CSI Хранилища секретов.

    Примечание.

    Если вы хотите использовать Microsoft Entra Workload ID, необходимо также использовать параметры --enable-oidc-issuer и --enable-workload-identity, например в следующем примере:

    az aks create --name myAKSCluster --resource-group myResourceGroup --enable-addons azure-keyvault-secrets-provider --enable-oidc-issuer --enable-workload-identity --generate-ssh-keys
    
    az aks create \
        --name myAKSCluster \
        --resource-group myResourceGroup \
        --enable-addons azure-keyvault-secrets-provider \
        --generate-ssh-keys
    
  3. Предыдущая команда создает управляемое удостоверение, назначаемое пользователем, azureKeyvaultSecretsProviderдля доступа к ресурсам Azure. В следующем примере используется это удостоверение для подключения к хранилищу ключей, в которой хранятся секреты, но также можно использовать другие методы доступа к удостоверениям. Обратите внимание на идентификатор clientId в выходных данных.

    ...,
     "addonProfiles": {
        "azureKeyvaultSecretsProvider": {
          ...,
          "identity": {
            "clientId": "<client-id>",
            ...
          }
        }
    

Примечание.

После включения этой функции AKS создает управляемое удостоверение с именем azurekeyvaultsecretsprovider-xxx в группе ресурсов узла AKS и автоматически назначает его наборам виртуальных машин с автоматическим масштабированием (VMSS). Это управляемое удостоверение или собственное управляемое удостоверение можно использовать для доступа к хранилищу ключей. Предотвращение создания удостоверения не поддерживается.

Обновление существующего кластера AKS с поддержкой драйвера CSI для хранилища секретов с помощью провайдера Azure Key Vault

  • Обновите существующий кластер AKS с помощью поставщика Azure Key Vault для возможности драйвера CSI хранилища секретов с помощью az aks enable-addons команды и включите надстройку azure-keyvault-secrets-provider . Надстройка создает управляемое удостоверение, назначаемое пользователем, которое можно использовать для аутентификации в вашем хранилище ключей.

    az aks enable-addons --addons azure-keyvault-secrets-provider --name myAKSCluster --resource-group myResourceGroup
    

Примечание.

После включения этой функции AKS создает управляемое удостоверение с именем azurekeyvaultsecretsprovider-xxx в группе ресурсов узла AKS и автоматически назначает его наборам виртуальных машин с автоматическим масштабированием (VMSS). Это управляемое удостоверение или собственное управляемое удостоверение можно использовать для доступа к хранилищу ключей. Предотвращение создания удостоверения не поддерживается.

Проверьте драйвер CSI для хранилища секретов поставщика Azure Key Vault

  1. Получите учетные данные кластера AKS с помощью az aks get-credentials команды.

    az aks get-credentials --name myAKSCluster --resource-group myResourceGroup
    
  2. Убедитесь, что установка завершена, используя команду kubectl get pods, которая перечисляет все поды с метками secrets-store-csi-driver и secrets-store-provider-azure в пространстве имен kube-system.

    kubectl get pods -n kube-system -l 'app in (secrets-store-csi-driver,secrets-store-provider-azure)'
    

    Выходные данные должны выглядеть примерно так:

    NAME                                     READY   STATUS    RESTARTS   AGE
    aks-secrets-store-csi-driver-4vpkj       3/3     Running   2          4m25s
    aks-secrets-store-csi-driver-ctjq6       3/3     Running   2          4m21s
    aks-secrets-store-csi-driver-tlvlq       3/3     Running   2          4m24s
    aks-secrets-store-provider-azure-5p4nb   1/1     Running   0          4m21s
    aks-secrets-store-provider-azure-6pqmv   1/1     Running   0          4m24s
    aks-secrets-store-provider-azure-f5qlm   1/1     Running   0          4m25s
    
  3. Убедитесь, что на каждом узле в пуле узлов вашего кластера запущены pod драйвера CSI Хранилища секретов и pod поставщика хранилища секретов Azure.

Создание или использование существующей службы Azure Key Vault

  1. Создайте или обновите хранилище ключей, включив управление доступом на основе ролей Azure (Azure RBAC), используя команду az keyvault create или команду az keyvault update с флагом --enable-rbac-authorization. Имя хранилища ключей должно быть уникальным в глобальном масштабе. Дополнительные сведения о моделях разрешений хранилища ключей и Azure RBAC см. в статье "Предоставление доступа к ключам Key Vault, сертификатам и секретам с помощью управления доступом на основе ролей Azure"

    ## Create a new Azure key vault
    az keyvault create --name <keyvault-name> --resource-group myResourceGroup --location eastus2 --enable-rbac-authorization
    
    ## Update an existing Azure key vault
    az keyvault update --name <keyvault-name> --resource-group myResourceGroup --location eastus2 --enable-rbac-authorization
    
  2. Хранилище ключей может хранить ключи, секреты и сертификаты. В этом примере используйте az keyvault secret set команду для задания нешифрованного текстового секрета ExampleSecret.

    az keyvault secret set --vault-name <keyvault-name> --name ExampleSecret --value MyAKSExampleSecret
    
  3. Запишите следующие свойства для дальнейшего использования:

    • Имя секретного объекта в хранилище ключей
    • Тип объекта (секрет, ключ или сертификат)
    • Имя ресурса хранилища ключей
    • Идентификатор клиента Azure подписки

Следующие шаги

Из этой статьи вы узнали, как использовать поставщика Azure Key Vault для CSI-драйвера для хранилища секретов в кластере AKS. Теперь необходимо предоставить удостоверение для доступа к Azure Key Vault. Чтобы узнать, как, перейдите к следующей статье.