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 の間の接続を作成します。
-
SecretProviderClassCRD を作成し、CSI プロバイダーを利用するPodを作成して、接続をテストします。 - ポッドが Key Vault のシークレットにアクセスできることを確認します。
前提条件
- アクティブなサブスクリプションが含まれる Azure アカウント。 無料でアカウントを作成できます。
-
Azure CLI。
az loginコマンドを使用してサインインします。 -
Docker と kubectl。 kubectl をローカルにインストールするには、
az aks install-cliコマンドを使用します。 - コンテナーと AKS の基本的な理解。 AKS 用のアプリケーションの準備を始めてください。
- 開始する前に、必ず「Azure Kubernetes Service (AKS) クラスターで Secrets Store CSI Driver 用 Azure Key Vault プロバイダーを使う」 の手順を完了して、AKS クラスターで Azure Key Vault Secrets Store CSI Driver を有効にしてください。
初期セットアップ
サービス コネクタを初めて使用する場合は、まず、コマンド az provider register を実行して、サービス コネクタおよび Kubernetes Configuration リソース プロバイダーを登録します。
az provider register -n Microsoft.ServiceLinkeraz provider register -n Microsoft.KubernetesConfigurationヒント
コマンド
az provider show -n "Microsoft.ServiceLinker" --query registrationStateとaz provider show -n "Microsoft.KubernetesConfiguration" --query registrationStateを実行することで、これらのリソース プロバイダーが既に登録されているかどうかを確認できます。必要に応じて、Azure CLI コマンドを使用して、AKS クラスターでサポートされているターゲット サービスの一覧を取得します。
az aks connection list-support-types --output table
Service Connector を使用して AKS でサービス接続を作成する
Azure portal または Azure CLI を使用して、Azure Key Vault へのサービス接続を作成できます。
Azure portal で、ご使用の AKS クラスター リソースに移動します。
サービス メニューの [設定] で、[ Service Connector>Create を選択します。
[接続の作成] ページで、[基本] タブ内の以下の設定を構成します。
- [Kubernetes 名前空間]: [既定] を選択します。
- サービスの種類: [Key Vault] を選択してチェックボックスを選択して Azure Key Vault CSI プロバイダーを有効にします。
- 接続名: 接続の名前を入力します。
- サブスクリプション: キー コンテナーを含むサブスクリプションを選択します。
- キー コンテナー: 作成したキー コンテナーを選択します。
- クライアントの種類: [None] を選択します。
[確認と作成] を選択した後、[作成] を選択して接続を作成します。
接続をテストする
サンプル リポジトリをクローンし、マニフェスト ファイルをデプロイする
git cloneコマンドを使用してサンプル リポジトリをクローンします。git clone https://github.com/Azure-Samples/serviceconnector-aks-samples.gitディレクトリを Azure Key Vault CSI プロバイダー サンプルに変更します。
cd serviceconnector-aks-samples/azure-keyvault-csi-providersecret_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のようにします。
-
SecretProviderClassコマンドを使用して、kubectl applyCRD をデプロイします。kubectl apply -f secret_provider_class.yamlPodコマンドを使用して、kubectl applyマニフェスト ファイルをデプロイします。コマンドでは、AKS クラスターの既定の名前空間に
sc-demo-keyvault-csiという名前のポッドが作成されます。kubectl apply -f pod.yaml
接続を確認する
kubectl getコマンドを使用して、ポッドが正常に作成されたことを確認します。kubectl get pod/sc-demo-keyvault-csiポッドが起動すると、デプロイ YAML で指定されたボリューム パスにマウントされたコンテンツが使用できるようになります。
kubectl execコマンドを使用して、シークレット ストア内に保持されているシークレットを表示します。kubectl exec sc-demo-keyvault-csi -- ls /mnt/secrets-store/kubectl execコマンドを使用してシークレットを表示します。このコマンド例は
ExampleSecretという名前のテスト シークレットを表示します。kubectl exec sc-demo-keyvault-csi -- cat /mnt/secrets-store/ExampleSecret
ワークロード ID を持つ CSI Driver の前提条件
- 開始する前に、必ず「Azure Kubernetes Service (AKS) クラスターで Secrets Store CSI Driver 用 Azure Key Vault プロバイダーを使う」 の手順を完了して、AKS クラスターで Azure Key Vault Secrets Store CSI Driver を有効にしてください。
- Microsoft Entra ワークロード ID は、Windows と Linux クラスターの両方をサポートします。
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 を構成する
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_IDaz 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)"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-
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ワークロードの 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} EOFaz 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}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 にシークレット、キー、または証明書を設定します。-
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 にマウントされたコンテンツを使用できます。 次のコマンドを使って、シークレットを検証し、テスト シークレットを表示します。
次のコマンドを使用して、シークレット ストアに保持されているシークレットを表示します。
kubectl exec --namespace $SERVICE_ACCOUNT_NAMESPACE busybox-secrets-store-inline-wi -- ls /mnt/secrets-store/次のコマンドを使用して、ストアにシークレットを表示します。 このコマンド例は、テスト シークレット
secret1を示しています。kubectl exec --namespace $SERVICE_ACCOUNT_NAMESPACE busybox-secrets-store-inline-wi -- cat /mnt/secrets-store/secret1
マネージド ID を持つ CSI ドライバーの前提条件
- 開始する前に、必ず「Azure Kubernetes Service (AKS) クラスターで Secrets Store CSI Driver 用 Azure Key Vault プロバイダーを使う」 の手順を完了して、AKS クラスターで Azure Key Vault Secrets Store CSI Driver を有効にしてください。
マネージド 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 を構成する
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_IDaz 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_IDexport 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-
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 にシークレット、キー、または証明書を設定します。-
SecretProviderClassコマンドを使用してkubectl applyをクラスターに適用します。kubectl apply -f secretproviderclass.yaml次のコマンドを使用して、
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" EOFkubectl applyコマンドを使用してポッドをクラスターに適用します。kubectl apply -f pod.yaml
マネージド ID を使用してKey Vaultシークレットを検証する
ポッドの起動後、 /mnt/secrets-store にマウントされたコンテンツを使用できます。 次のコマンドを使って、シークレットを検証し、テスト シークレットを表示します。
次のコマンドを使用して、シークレット ストアに保持されているシークレットを表示します。
kubectl exec busybox-secrets-store-inline-user-msi -- ls /mnt/secrets-store/次のコマンドを使用して、ストアにシークレットを表示します。 このコマンド例は、テスト シークレット
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 プロバイダーの構成オプションとトラブルシューティング リソースに関する記事を参照してください。