Azure Kubernetes Service (AKS) クラスターで Secrets Store CSI Driver 用 Azure Key Vault プロバイダーを使う

Secrets Store CSI Driver 用 Azure Key Vault プロバイダーを使うと、CSI ボリューム経由でシークレット ストアとしての Azure キー コンテナーを Azure Kubernetes Service (AKS) クラスターと統合できます。

機能

  • CSI ボリュームを使用してシークレット、キー、証明書をポッドにマウントします。
  • CSI インライン ボリュームがサポートされています。
  • 複数のシークレット ストア オブジェクトを 1 つのボリュームとしてマウントすることがサポートされています。
  • SecretProviderClass CRD によるポッド移植性がサポートされています。
  • Windows コンテナーがサポートされています。
  • Kubernetes シークレットと同期します。
  • マウントされたコンテンツと同期された Kubernetes シークレットの自動ローテーションがサポートされています。

制限事項

"subPath ボリューム マウント" を使うコンテナーは、ローテーション時にシークレットの更新を受け取りません。 詳細については、Secrets Store CSI Driver の既知の制限事項に関するページを参照してください。

前提条件

Secrets Store CSI Driver 用 Azure Key Vault プロバイダーをサポートする AKS クラスターを作成する

  1. az group create コマンドを使用して、Azure リソース グループを作成します。

    az group create --name myResourceGroup --location eastus2
    
  2. az aks create コマンドを使用し、--enable-managed-identity パラメーターと --enable-addons azure-keyvault-secrets-provider パラメーターを指定し、Secrets Store CSI Driver 機能用の Azure Key Vault プロバイダーで AKS クラスターを作成します。 このアドオンでは、キー コンテナーの認証に使用できるユーザー割り当てマネージド ID が作成されます。 次の例では、Secrets Store CSI Driver の Azure Key Vault プロバイダーを有効にし、AKS クラスターが作成されます。

    Note

    Microsoft Entra ワークロード 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
    
    az aks create --name myAKSCluster --resource-group myResourceGroup --enable-managed-identity --enable-addons azure-keyvault-secrets-provider
    
  3. 前のコマンドは、Azure リソースにアクセスするために、ユーザー割り当てマネージド ID azureKeyvaultSecretsProvider を作成します。 この例では、この ID を使って、シークレットを格納するキー コンテナーに接続しますが、他の ID アクセス方法も使用できます。 出力内の ID の clientId をメモします。

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

Note

この機能を有効にすると、AKS でノード リソース グループにマネージド identity named azurekeyvaultsecretsprovider-xxx が作成され、Virtual Machine Scale Sets (VMSS) に自動的に割り当てられます。 このマネージド ID または独自のマネージド ID を使用して、キー コンテナーにアクセスできます。 ID を作成できないようにすることはサポートされていません。

Secrets Store CSI Driver 用 Azure Key Vault プロバイダーをサポートするように既存の AKS クラスターをアップグレードする

  • az aks enable-addons コマンドを使って、Secrets Store CSI Driver 用 Azure Key Vault プロバイダー機能を使って既存の AKS クラスターをアップグレードし、azure-keyvault-secrets-provider アドオンを有効にします。 このアドオンでは、キー コンテナーの認証に使用できるユーザー割り当てマネージド ID が作成されます。

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

Note

この機能を有効にすると、AKS でノード リソース グループにマネージド identity named azurekeyvaultsecretsprovider-xxx が作成され、Virtual Machine Scale Sets (VMSS) に自動的に割り当てられます。 このマネージド ID または独自のマネージド ID を使用して、キー コンテナーにアクセスできます。 ID を作成できないようにすることはサポートされていません。

Secrets Store CSI Driver 用 Azure Key Vault プロバイダーのインストールを確認する

  1. kubectl get pods コマンドを使用してインストールが完了したことを確認します。このコマンドでは、kube-system 名前空間内の secrets-store-csi-driver および secrets-store-provider-azure ラベルを持つすべてのポッドが一覧表示されます。

    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
    
  2. クラスターのノード プール内の各ノードに、Secrets Store CSI Driver ポッドと Secrets Store Provider Azure ポッドが実行されていることを確認します。

Azure Key Vault を作成するか既存のものを使用する

  1. az keyvault create コマンドまたは --enable-rbac-authorization フラグを指定した az keyvault update コマンドを使って、Azure ロールベースのアクセス制御 (Azure RBAC) を有効にしてキー コンテナーを作成するか、更新します。 キー コンテナーの名前は、グローバルに一意である必要があります。 キー コンテナーのアクセス許可モデルと Azure RBAC の詳細については、「Azure のロールベースのアクセス制御を使用して Key Vault のキー、証明書、シークレットへのアクセス権を付与する」を参照してください

    ## 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 テナント ID

次のステップ

この記事では、AKS クラスターで Secrets Store CSI Driver 用 Azure Key Vault プロバイダーを使う方法について説明しました。 Azure キー コンテナーにアクセスする ID を指定する必要があります。 その方法については、次の記事に進んでください。