Azure Kubernetes Service (AKS) の Azure Key Vault Secrets Store CSI Driver に Azure ID プロバイダーを接続する

Azure Kubernetes Service (AKS) 上の Secrets Store Container Storage Interface (CSI) Driver には、Azure Key Vault に ID ベースでアクセスするためのさまざまな方法が用意されています。 この記事では、Azure ロールベースのアクセス制御 (Azure RBAC) または OpenID Connect (OIDC) セキュリティ モデルを使用してキー コンテナーと AKS クラスターにアクセスする場合のこれらの方法とベスト プラクティスについて説明します。

次のいずれかのアクセス方法を使用できます。

  • マネージド ID を持つサービス コネクタ
  • ワークロード ID
  • ID バインディング付きのワークロード ID
  • ユーザー指定マネージドID

サービス コネクタを使用して、Azure Kubernetes Service (AKS) クラスター内のシークレット ストア CSI ドライバーを使用して Azure Key Vault に接続する方法を学習します。 この記事では、次のタスクを完了します。

  • 必要なAzure リソース プロバイダーを登録します。
  • Service Connector を使用した AKS クラスターと Azure Key Vault の間の接続を作成します。
  • SecretProviderClass CRD を作成し、CSI プロバイダーを利用する Pod を作成して、接続をテストします。
  • ポッドが Key Vault のシークレットにアクセスできることを確認します。

前提条件

初期セットアップ

  1. サービス コネクタを初めて使用する場合は、まず、コマンド az provider register を実行して、サービス コネクタおよび Kubernetes Configuration リソース プロバイダーを登録します。

    az provider register -n Microsoft.ServiceLinker
    
    az provider register -n Microsoft.KubernetesConfiguration
    

    ヒント

    コマンド az provider show -n "Microsoft.ServiceLinker" --query registrationState と az provider show -n "Microsoft.KubernetesConfiguration" --query registrationState を実行することで、これらのリソース プロバイダーが既に登録されているかどうかを確認できます。

  2. 必要に応じて、Azure CLI コマンドを使用して、AKS クラスターでサポートされているターゲット サービスの一覧を取得します。

    az aks connection list-support-types --output table
    

Service Connector を使用して AKS でサービス接続を作成する

Azure portal または Azure CLI を使用して、Azure Key Vault へのサービス接続を作成できます。

  1. Azure portal で、ご使用の AKS クラスター リソースに移動します。

  2. サービス メニューの [設定] で、[ Service Connector>Create を選択します。

  3. [接続の作成] ページで、[基本] タブ内の以下の設定を構成します。

    • [Kubernetes 名前空間]: [既定] を選択します。
    • サービスの種類: [Key Vault] を選択してチェックボックスを選択して Azure Key Vault CSI プロバイダーを有効にします。
    • 接続名: 接続の名前を入力します。
    • サブスクリプション: キー コンテナーを含むサブスクリプションを選択します。
    • キー コンテナー: 作成したキー コンテナーを選択します。
    • クライアントの種類: [None] を選択します。
  4. [確認と作成] を選択した後、[作成] を選択して接続を作成します。

接続をテストする

サンプル リポジトリをクローンし、マニフェスト ファイルをデプロイする

  1. git clone コマンドを使用してサンプル リポジトリをクローンします。

    git clone https://github.com/Azure-Samples/serviceconnector-aks-samples.git
    
  2. ディレクトリを Azure Key Vault CSI プロバイダー サンプルに変更します。

    cd serviceconnector-aks-samples/azure-keyvault-csi-provider
    
  3. secret_provider_class.yaml ファイルで、以下のプレースホルダーを Azure Key Vault の情報に置き換えます。

    • <AZURE_KEYVAULT_NAME> を作成して接続したキー コンテナーの名前に置き換えます。
    • <AZURE_KEYVAULT_TENANTID> を キー コンテナーのテナント ID に置き換えます。
    • <AZURE_KEYVAULT_CLIENTID>を、azureKeyvaultSecretsProvider アドオンの ID クライアント ID に置き換えます。
    • <KEYVAULT_SECRET_NAME> を作成した Key Vault シークレットに置き換えます。 たとえば、ExampleSecret のようにします。
  4. SecretProviderClass コマンドを使用して、kubectl apply CRD をデプロイします。

    kubectl apply -f secret_provider_class.yaml
    
  5. Pod コマンドを使用して、kubectl apply マニフェスト ファイルをデプロイします。

    コマンドでは、AKS クラスターの既定の名前空間に sc-demo-keyvault-csi という名前のポッドが作成されます。

    kubectl apply -f pod.yaml
    

接続を確認する

  1. kubectl get コマンドを使用して、ポッドが正常に作成されたことを確認します。

    kubectl get pod/sc-demo-keyvault-csi
    

    ポッドが起動すると、デプロイ YAML で指定されたボリューム パスにマウントされたコンテンツが使用できるようになります。

  2. kubectl exec コマンドを使用して、シークレット ストア内に保持されているシークレットを表示します。

    kubectl exec sc-demo-keyvault-csi -- ls /mnt/secrets-store/
    
  3. kubectl exec コマンドを使用してシークレットを表示します。

    このコマンド例は ExampleSecret という名前のテスト シークレットを表示します。

    kubectl exec sc-demo-keyvault-csi -- cat /mnt/secrets-store/ExampleSecret
    

ワークロード ID を持つ CSI Driver の前提条件

Microsoft Entra ワークロード ID を使用してアクセスする

Microsoft Entra ワークロード ID とは、アプリケーションまたはサービスが、ソフトウェアのワークロードなど、他のAzure サービスに対して自身を認証するために使用する ID です。 Secrets Store CSI Driver は、ネイティブ Kubernetes 機能と統合して、外部 ID プロバイダーとフェデレーションします。

このセキュリティ モデルでは、AKS クラスターはトークン発行者として機能します。 シークレット ストア CSI ドライバーは、ボリュームをマウントすると、Kubernetes サービス アカウント トークンを要求し、Azure Key Vault プロバイダーはそのトークンをMicrosoft Entra トークンと交換します。 アプリケーションはマウントされたファイルを読み取り、このボリューム マウント フローのAzure ID クライアント ライブラリまたはMicrosoft Authentication Library (MSAL) を必要としません。 アプリケーションが保護された API を呼び出すためにMicrosoft Entraトークンを個別に要求する場合は、アプリケーションでAzure ID または MSAL を使用します。

シークレット ストア CSI ドライバー アドオンのAzure Key Vault プロバイダーは、ID バインディングもサポートしています。 ID バインディングを使用すると、複数の AKS クラスターで、1 つのフェデレーション ID 資格情報で同じユーザー割り当てマネージド ID (UAMI) を使用できます。 このサポートは、フェデレーション ID 資格情報の制限に達することなく、クラスター間でKey Vaultアクセスをスケーリングするのに役立ちます。 このアクセス方法を構成するには、UAMI と各 AKS クラスターの間に ID バインディングを設定 します。

注記

  • この認証方法は、Microsoft Entra のポッド マネージド ID (プレビュー) に代わるものです。 Azure Kubernetes Service のオープン ソースの Microsoft Entra ポッドマネージド ID (プレビュー) は、2022 年 10 月 24 日の時点で非推奨となりました。
  • Microsoft Entra ワークロード ID は、Windows と Linux クラスターの両方をサポートします。

ワークロード ID を構成する

  1. az account set コマンドを使用してサブスクリプションを設定します。

    export SUBSCRIPTION_ID=<subscription id>
    export RESOURCE_GROUP=<resource group name>
    export UAMI=<name for user assigned identity>
    export KEYVAULT_NAME=<existing keyvault name>
    export CLUSTER_NAME=<aks cluster name>
    
    az account set --subscription $SUBSCRIPTION_ID
    
  2. az identity create コマンドを使用して、マネージド ID を作成します。

    注記

    この手順では、ワークロード ID が有効になっている既存の AKS クラスターがあることを前提としています。 ワークロード ID が有効になっていない場合は、「既存の AKS クラスターでワークロード ID を有効にする 」を参照して有効にします。

    az identity create --name $UAMI --resource-group $RESOURCE_GROUP
    
    export USER_ASSIGNED_CLIENT_ID="$(az identity show --resource-group $RESOURCE_GROUP --name $UAMI --query 'clientId' -o tsv)"
    export KEYVAULT_TENANT_ID="$(az keyvault show --name $KEYVAULT_NAME --query properties.tenantId -o tsv)"
    
  3. az role assignment createコマンドを使用して、キー コンテナーのシークレット、アクセス キー、証明書にアクセスするための権限をワークロード ID に付与するロールの割り当てを作成します。

    重要

    • --enable-rbac-authorizationでkey vaultを設定し、keyまたはcertの種類を使用している場合は、Key Vault Certificate User ロールを割り当ててアクセス許可を付与します。
    • キー コンテナーが --enable-rbac-authorization で設定されていて、secret のタイプを使用している場合は、Key Vault Secrets User 役割を割り当てます。
    • キー コンテナーが --enable-rbac-authorization で設定されていない場合は、az keyvault set-policy コマンドを --key-permissions get、--certificate-permissions get、または --secret-permissions get パラメーターと共に使用して、キー、証明書、またはシークレットへのアクセスを許可するキー コンテナー ポリシーを作成できます。 次に例を示します。
    az keyvault set-policy --name $KEYVAULT_NAME --key-permissions get --secret-permissions get --object-id <identity-object-id>
    
    export KEYVAULT_SCOPE=$(az keyvault show --name $KEYVAULT_NAME --query id -o tsv)
    
    # Example commands for a key vault with Azure RBAC enabled using `key` and `secret` types
    az role assignment create --role "Key Vault Certificate User" --assignee $USER_ASSIGNED_CLIENT_ID --scope $KEYVAULT_SCOPE
    az role assignment create --role "Key Vault Secrets User" --assignee $USER_ASSIGNED_CLIENT_ID --scope $KEYVAULT_SCOPE
    
  4. az aks show コマンドを使用して、AKS クラスターの OIDC 発行者 URL を取得します。

    注記

    この手順では、OIDC 発行者 URL が有効な既存の AKS クラスターがあることを前提としています。 OIDC 発行者 URL が有効になっていない場合は、「 OIDC 発行者を使用して AKS クラスターを更新 して有効にする」を参照してください。

    export AKS_OIDC_ISSUER="$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query "oidcIssuerProfile.issuerUrl" -o tsv)"
    echo $AKS_OIDC_ISSUER
    
  5. ワークロードの Kubernetes サービス アカウントを作成します。 kubernetes サービス アカウント名とその名前空間を使用して、 SERVICE_ACCOUNT_NAME と SERVICE_ACCOUNT_NAMESPACE の値を更新します。

    export SERVICE_ACCOUNT_NAME="workload-identity-sa"  # sample name; can be changed
    export SERVICE_ACCOUNT_NAMESPACE="default" # can be changed to namespace of your workload
    
    cat <<EOF | kubectl apply -f -
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      annotations:
        azure.workload.identity/client-id: ${USER_ASSIGNED_CLIENT_ID}
      name: ${SERVICE_ACCOUNT_NAME}
      namespace: ${SERVICE_ACCOUNT_NAMESPACE}
    EOF
    
  6. az identity federated-credential create コマンドを使用して、マネージド ID、サービス アカウント発行者、およびサブジェクト間のフェデレーション ID 資格情報を作成します。

    export FEDERATED_IDENTITY_NAME="aksfederatedidentity" # can be changed as needed
    
    az identity federated-credential create --name $FEDERATED_IDENTITY_NAME --identity-name $UAMI --resource-group $RESOURCE_GROUP --issuer ${AKS_OIDC_ISSUER} --subject system:serviceaccount:${SERVICE_ACCOUNT_NAMESPACE}:${SERVICE_ACCOUNT_NAME}
    
  7. SecretProviderClass コマンドと次の YAML スクリプトを使用して kubectl apply をデプロイします。

    次のパラメーターは、ワークロード ID アクセスを構成します。

    • usePodIdentity: ワークロード ID を使用するときに "false" に設定されます。
    • clientID: ${USER_ASSIGNED_CLIENT_ID}に設定され、ワークロード ID に使用されるユーザー割り当てマネージド ID のクライアント ID。
    • cloudName: オプション。 既定の AzurePublicCloud 環境を使用するには、空のままにします。
    • objectType: マウントする Key Vault オブジェクトの種類に設定します。 有効な値は、 secret、 key、および certです。
    • tenantId: キー コンテナーを含むテナント ID に設定します。
    cat <<EOF | kubectl apply -f -
    # This is a SecretProviderClass example using workload identity to access your key vault
    apiVersion: secrets-store.csi.x-k8s.io/v1
    kind: SecretProviderClass
    metadata:
      name: azure-kvname-wi # needs to be unique per namespace
      namespace: ${SERVICE_ACCOUNT_NAMESPACE}
    spec:
      provider: azure
      parameters:
        usePodIdentity: "false"
        clientID: "${USER_ASSIGNED_CLIENT_ID}" # Setting this to use workload identity
        keyvaultName: ${KEYVAULT_NAME}       # Set to the name of your key vault
        cloudName: ""                         # [OPTIONAL for Azure] if not provided, the Azure environment defaults to AzurePublicCloud
        objects:  |
          array:
            - |
              objectName: secret1             # Set to the name of your secret
              objectType: secret              # object types: secret, key, or cert
              objectVersion: ""               # [OPTIONAL] object versions, default to latest if empty
            - |
              objectName: key1                # Set to the name of your key
              objectType: key
              objectVersion: ""
        tenantId: "${KEYVAULT_TENANT_ID}"     # The tenant ID of the key vault
    EOF
    

    注記

    objectAlias の代わりに objectName を使用する場合は、それを考慮するように YAML スクリプトを更新してください。

    注記

    SecretProviderClass が正しく機能するには、objects セクションで参照する前に、必ず Azure Key Vault にシークレット、キー、または証明書を設定します。

  8. kubectl apply コマンドと次の YAML スクリプトを使用してサンプル ポッドをデプロイします。

    cat <<EOF | kubectl apply -f -
    # This is a sample pod definition for using SecretProviderClass and workload identity to access your key vault
    kind: Pod
    apiVersion: v1
    metadata:
      name: busybox-secrets-store-inline-wi
      namespace: ${SERVICE_ACCOUNT_NAMESPACE}
      labels:
        azure.workload.identity/use: "true"
    spec:
      serviceAccountName: ${SERVICE_ACCOUNT_NAME}
      containers:
        - name: busybox
          image: registry.k8s.io/e2e-test-images/busybox:1.29-4
          command:
            - "/bin/sleep"
            - "10000"
          volumeMounts:
          - name: secrets-store01-inline
            mountPath: "/mnt/secrets-store"
            readOnly: true
      volumes:
        - name: secrets-store01-inline
          csi:
            driver: secrets-store.csi.k8s.io
            readOnly: true
            volumeAttributes:
              secretProviderClass: "azure-kvname-wi"
    EOF
    

ワークロード ID を使用してKey Vaultシークレットを検証する

ポッドの起動後、 /mnt/secrets-store にマウントされたコンテンツを使用できます。 次のコマンドを使って、シークレットを検証し、テスト シークレットを表示します。

  1. 次のコマンドを使用して、シークレット ストアに保持されているシークレットを表示します。

    kubectl exec --namespace $SERVICE_ACCOUNT_NAMESPACE busybox-secrets-store-inline-wi -- ls /mnt/secrets-store/
    
  2. 次のコマンドを使用して、ストアにシークレットを表示します。 このコマンド例は、テスト シークレット secret1 を示しています。

    kubectl exec --namespace $SERVICE_ACCOUNT_NAMESPACE busybox-secrets-store-inline-wi -- cat /mnt/secrets-store/secret1
    

マネージド ID を持つ CSI ドライバーの前提条件

マネージド ID を使用したアクセス

このメソッドでは、シークレット ストア CSI ドライバーのAzure Key Vault プロバイダーを有効にすると、AKS によって自動的に作成されるユーザー割り当てマネージド ID が使用されます。 ID は azurekeyvaultsecretsprovider-xxxxxという名前で、ノード リソース グループに格納され、仮想マシン スケール セットに割り当てられます。

Microsoft Entraマネージド ID を使用すると、Azure リソースまたはワークロードは、コードに資格情報を格納することなく、Microsoft Entra認証をサポートするサービスに対して認証できます。 AZURE RBAC またはアクセス ポリシーを使用して、この ID に適切なKey Vaultデータ プレーンのアクセス許可を付与し、次の手順で使用します。

AKS クラスターとキー コンテナーの作成方法に一致するタブを選択します。Azure Kubernetes Service (AKS) クラスター内のシークレット ストア CSI ドライバーのAzure Key Vault プロバイダーを使用します。 テスト済みの Terraform サンプルをデプロイした場合は、アドオン ID に Key Vault Secrets User ロールが既に付与されているため、手動ロールの割り当て手順はスキップしてください。

マネージド ID を構成する

  1. az aks show コマンドと、アドオンによって作成されたユーザー割り当てマネージド ID を使用して、キー コンテナーにアクセスしてください。 ID の clientIdも取得する必要があります。これは、 SecretProviderClassを作成するときに後の手順で使用します。

    export RESOURCE_GROUP=<resource-group>
    export CLUSTER_NAME=<cluster-name>
    export KEYVAULT_NAME=<key-vault-name>
    
    export IDENTITY_OBJECT_ID=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query addonProfiles.azureKeyvaultSecretsProvider.identity.objectId -o tsv)
    export USER_ASSIGNED_CLIENT_ID=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query addonProfiles.azureKeyvaultSecretsProvider.identity.clientId -o tsv)
    

    または、新しいマネージド ID を作成し、仮想マシン (VM) スケール セットまたは可用性セット内の各 VM インスタンスに割り当てることができます。

    export USER_ASSIGNED_IDENTITY_NAME=<identity-name>
    
    az identity create --resource-group $RESOURCE_GROUP --name $USER_ASSIGNED_IDENTITY_NAME
    
    export IDENTITY_RESOURCE_ID=$(az identity show --resource-group $RESOURCE_GROUP --name $USER_ASSIGNED_IDENTITY_NAME --query id -o tsv)
    export IDENTITY_OBJECT_ID=$(az identity show --resource-group $RESOURCE_GROUP --name $USER_ASSIGNED_IDENTITY_NAME --query principalId -o tsv)
    export USER_ASSIGNED_CLIENT_ID=$(az identity show --resource-group $RESOURCE_GROUP --name $USER_ASSIGNED_IDENTITY_NAME --query clientId -o tsv)
    

    VM スケール セット ベースのクラスターの場合は、VM スケール セットに ID を割り当てます。

    az vmss identity assign --resource-group <node-resource-group> --name <agent-pool-vmss> --identities $IDENTITY_RESOURCE_ID
    

    可用性セット ベースのクラスターの場合は、可用性セット内の各 VM インスタンスに ID を割り当てます。

    az vm identity assign --resource-group <node-resource-group> --name <agent-pool-vm> --identities $IDENTITY_RESOURCE_ID
    
  2. az role assignment create コマンドを使用して、アイデンティティにキーコンテナーのシークレット、アクセス キー、証明書へのアクセス権を付与するためのロール割り当てを作成します。

    重要

    • --enable-rbac-authorizationでkey vaultを設定し、keyまたはcertの種類を使用している場合は、Key Vault Certificate User ロールを割り当てます。
    • キー コンテナーが --enable-rbac-authorization で設定されていて、secret のタイプを使用している場合は、Key Vault Secrets User 役割を割り当てます。
    • キー コンテナーが --enable-rbac-authorization で設定されていない場合は、az keyvault set-policy コマンドを --key-permissions get、--certificate-permissions get、または --secret-permissions get パラメーターと共に使用して、キー、証明書、またはシークレットへのアクセスを許可するキー コンテナー ポリシーを作成できます。 次に例を示します。
    az keyvault set-policy --name $KEYVAULT_NAME --key-permissions get --secret-permissions get --object-id $IDENTITY_OBJECT_ID
    
    export KEYVAULT_SCOPE=$(az keyvault show --name $KEYVAULT_NAME --query id -o tsv)
    
    # Example commands for a key vault with Azure RBAC enabled using `key` and `secret` types
    az role assignment create --role "Key Vault Certificate User" --assignee-object-id $IDENTITY_OBJECT_ID --assignee-principal-type ServicePrincipal --scope $KEYVAULT_SCOPE
    az role assignment create --role "Key Vault Secrets User" --assignee-object-id $IDENTITY_OBJECT_ID --assignee-principal-type ServicePrincipal --scope $KEYVAULT_SCOPE
    
  3. ID クライアント ID を使用して SecretProviderClass を作成します。 キー コンテナーから取得するオブジェクトには、必ず独自の値を使用してください。

    次のパラメーターは、ユーザー割り当てマネージド ID アクセスを構成します。

    • usePodIdentity: マネージド ID を使用する場合は "false" に設定されます。
    • useVMManagedIdentity: マネージド ID モードを有効にするには、 "true" に設定します。
    • userAssignedIdentityID: ユーザー割り当てマネージド ID のクライアント ID に設定します。
    • tenantId: キー コンテナーを含むテナント ID に設定します。
    export KEYVAULT_TENANT_ID=$(az keyvault show --name $KEYVAULT_NAME --query properties.tenantId -o tsv)
    
    cat <<EOF > secretproviderclass.yaml
    # This is a SecretProviderClass example using user-assigned identity to access your key vault
    apiVersion: secrets-store.csi.x-k8s.io/v1
    kind: SecretProviderClass
    metadata:
      name: azure-kvname-user-msi
    spec:
      provider: azure
      parameters:
        usePodIdentity: "false"
        useVMManagedIdentity: "true"          # Set to true for using managed identity
        userAssignedIdentityID: ${USER_ASSIGNED_CLIENT_ID} # Set the client ID of the user-assigned managed identity to use
        keyvaultName: ${KEYVAULT_NAME}         # Set to the name of your key vault
        cloudName: ""                         # [OPTIONAL for Azure] if not provided, the Azure environment defaults to AzurePublicCloud
        objects:  |
          array:
            - |
              objectName: secret1
              objectType: secret              # object types: secret, key, or cert
              objectVersion: ""               # [OPTIONAL] object versions, default to latest if empty
            - |
              objectName: key1
              objectType: key
              objectVersion: ""
        tenantId: ${KEYVAULT_TENANT_ID}       # The tenant ID of the key vault
    EOF
    

    注記

    objectAlias の代わりに objectName を使う場合は、必ず YAML スクリプトを更新してください。

    注記

    SecretProviderClass が正しく機能するには、objects セクションで参照する前に、必ず Azure Key Vault にシークレット、キー、または証明書を設定します。

  4. SecretProviderClass コマンドを使用して kubectl apply をクラスターに適用します。

    kubectl apply -f secretproviderclass.yaml
    
  5. 次のコマンドを使用して、 pod.yaml という名前のポッド マニフェストを作成します。

    cat <<EOF > pod.yaml
    # This is a sample pod definition for using SecretProviderClass and the user-assigned identity to access your key vault
    kind: Pod
    apiVersion: v1
    metadata:
      name: busybox-secrets-store-inline-user-msi
    spec:
      containers:
        - name: busybox
          image: registry.k8s.io/e2e-test-images/busybox:1.29-4
          command:
            - "/bin/sleep"
            - "10000"
          volumeMounts:
          - name: secrets-store01-inline
            mountPath: "/mnt/secrets-store"
            readOnly: true
      volumes:
        - name: secrets-store01-inline
          csi:
            driver: secrets-store.csi.k8s.io
            readOnly: true
            volumeAttributes:
              secretProviderClass: "azure-kvname-user-msi"
    EOF
    
  6. kubectl apply コマンドを使用してポッドをクラスターに適用します。

    kubectl apply -f pod.yaml
    

マネージド ID を使用してKey Vaultシークレットを検証する

ポッドの起動後、 /mnt/secrets-store にマウントされたコンテンツを使用できます。 次のコマンドを使って、シークレットを検証し、テスト シークレットを表示します。

  1. 次のコマンドを使用して、シークレット ストアに保持されているシークレットを表示します。

    kubectl exec busybox-secrets-store-inline-user-msi -- ls /mnt/secrets-store/
    
  2. 次のコマンドを使用して、ストアにシークレットを表示します。 このコマンド例は、テスト シークレット secret1 を示しています。

    kubectl exec busybox-secrets-store-inline-user-msi -- cat /mnt/secrets-store/secret1
    

証明書とキーの取得

Azure Key Vault の設計では、キー、シークレット、証明書が明確に区別されます。 Key Vault サービスの証明書機能は、キーとシークレットの機能を利用して設計されます。 Key Vault 証明書が作成されると、アドレス指定可能なキーとシークレットが同じ名前で作成されます。 このキーを使用すると認証操作が可能になり、シークレットでは証明書の値をシークレットとして取得できます。

Key Vault 証明書には、公開 x509 証明書メタデータも含まれます。 Azure Key Vault によって証明書の公開と非公開の両方の部分がシークレットに格納されます。 objectType で SecretProviderClass を指定することで、個々のコンポーネントを取得できます。 次の表は、キー コンテナー証明書のさまざまなコンポーネントを取得するためにobjectTypeで指定できるSecretProviderClass値と、各値が返す内容を示しています。

objectType 値 戻り値 証明書チェーン全体を返します
key Privacy Enhanced Mail (PEM) 形式の公開キー。 該当なし
cert PEM 形式の証明書。 いいえ
secret PEM 形式の秘密キーと証明書。 はい

既存のクラスターでアドオンを無効にする

注記

アドオンを無効にする前に、noSecretProviderClass が使用されていることを確認します。 SecretProviderClass が存在している間にアドオンを無効にしようとすると、エラーが発生します。

az aks disable-addons アドオンを指定して azure-keyvault-secrets-provider コマンドを使い、既存のクラスターで Secrets Store CSI Driver 用 Azure Key Vault プロバイダー機能を無効にします。

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

注記

アドオンを無効にする場合、既存のワークロードに問題がないこと、またはマウントされたシークレットに更新プログラムが表示されることが必要です。 ポッドが再起動するか、スケールアップ イベントの一部として新しいポッドが作成された場合、ドライバーが実行されなくなるため、ポッドの起動に失敗します。

次のステップ

この記事では、Azure キー コンテナーにアクセスするための ID を作成して提供する方法について説明しました。 サービス コネクタ統合は、AKS ワークロードと Azure バッキング サービスの接続構成を簡素化するのに役立ちます。 認証とネットワーク構成を安全に処理し、ベスト プラクティスに従って Azure サービスに接続することができます。 詳しくは、「AKS クラスターでシークレット ストア CSI ドライバーのために Azure Key Vault プロバイダーを使用する」と「サービス コネクタの概要」を参照してください。

追加の構成オプションを構成する場合や、トラブルシューティングを実行する場合については、AKS のシークレット ストア CSI ドライバー用の Azure Key Vault プロバイダーの構成オプションとトラブルシューティング リソースに関する記事を参照してください。