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 の既知の制限事項に関するページを参照してください。
前提条件
- Azure サブスクリプションをお持ちでない場合は、開始する前に 無料アカウント を作成してください。
- Azure CLI のバージョンが 2.30.0 以降であることを確認します。 以前のバージョンの場合は、最新バージョンをインストールします。
- イングレスをクラスターに制限している場合、ポート 9808 と 8095 が開いていることを確認します。
- 推奨される Kubernetes の最小バージョンは、ローリング Kubernetes バージョン サポート ウィンドウに基づいています。 バージョン N-2 以降を実行している必要があります。
Secrets Store CSI Driver 用 Azure Key Vault プロバイダーをサポートする AKS クラスターを作成する
az group create
コマンドを使用して、Azure リソース グループを作成します。az group create --name myResourceGroup --location eastus2
az aks create
コマンドと--enable-addons azure-keyvault-secrets-provider
パラメーターを使って、シークレット ストア CSI ドライバー機能用に 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 --generate-ssh-keys
az aks create \ --name myAKSCluster \ --resource-group myResourceGroup \ --enable-addons azure-keyvault-secrets-provider \ --generate-ssh-keys
前のコマンドは、Azure リソースにアクセスするために、ユーザー割り当てマネージド ID
azureKeyvaultSecretsProvider
を作成します。 この例では、この ID を使って、シークレットを格納するキー コンテナーに接続しますが、他の ID アクセス方法も使用できます。 出力内の ID のclientId
をメモします。..., "addonProfiles": { "azureKeyvaultSecretsProvider": { ..., "identity": { "clientId": "<client-id>", ... } }
Note
この機能を有効にすると、AKS でノード リソース グループに azurekeyvaultsecretsprovider-xxx
という名前のマネージド ID が作成され、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 でノード リソース グループに azurekeyvaultsecretsprovider-xxx
という名前のマネージド ID が作成され、Virtual Machine Scale Sets (VMSS) に自動的に割り当てられます。 このマネージド ID または独自のマネージド ID を使用して、キー コンテナーにアクセスできます。 ID を作成できないようにすることはサポートされていません。
Secrets Store CSI Driver 用 Azure Key Vault プロバイダーのインストールを確認する
[
az aks get-credentials
][az-aks-get-credentials] コマンドを使用して、AKS クラスターの資格情報を取得します。az aks get-credentials --name myAKSCluster --resource-group myResourceGroup
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
クラスターのノード プール内の各ノードに、Secrets Store CSI Driver ポッドと Secrets Store Provider Azure ポッドが実行されていることを確認します。
Azure Key Vault を作成するか既存のものを使用する
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
キー コンテナーには、キー、シークレット、証明書を格納できます。 この例では、
az keyvault secret set
コマンドを使って、ExampleSecret
というプレーンテキストのシークレットを設定します。az keyvault secret set --vault-name <keyvault-name> --name ExampleSecret --value MyAKSExampleSecret
今後使うために、次のプロパティを書き留めておきます。
- キー コンテナー内のシークレット オブジェクトの名前
- オブジェクトの種類 (シークレット、キー、または証明書)
- キー コンテナー リソースの名前
- サブスクリプションの Azure テナント ID
次のステップ
この記事では、AKS クラスターで Secrets Store CSI Driver 用 Azure Key Vault プロバイダーを使う方法について説明しました。 Azure キー コンテナーにアクセスする ID を指定する必要があります。 その方法については、次の記事に進んでください。
Azure Kubernetes Service