適用対象: Windows Server 上の AKS
Kubernetes Secrets Store CSI ドライバーは、コンテナー ストレージ インターフェイス (CSI) ボリュームを使用してシークレット ストアを Kubernetes と統合します。 Windows Server 上の AKS と Secrets Store CSI ドライバーを統合する場合は、シークレット、キー、証明書をボリュームとしてマウントできます。 その後、データはコンテナーのファイル システムにマウントされます。
シークレット ストア CSI ドライバーを使用すると、キー コンテナーをサポートされているプロバイダー ( Azure Key Vault など) と統合することもできます。
開始する前に
開始する前に、以下の前提条件を確認してください。
- Azure アカウントとサブスクリプション。
- 既存のワークロード クラスターを使用した Windows Server での AKS の既存のデプロイ。 デプロイがない場合は、この AKS ホストとワークロード クラスターをデプロイするための前提条件に従ってください。
- Linux クラスターを実行している場合は、Linux 1.16.0 以降のバージョンである必要があります。
- Windows クラスターを実行している場合は、バージョンが Windows 1.18.0 以降である必要があります。
- 次のインストールが完了していることを確認します。
kubectl を使用してクラスターにアクセスする
kubectl
を使用してクラスターにアクセスするには、次のコマンドを実行します。 コマンドで、 -name
の値を既存のクラスター名に置き換えます。 クラスター名は、指定したクラスターのkubeconfig
ファイルを、kubeconfig
の既定のkubectl
ファイルとして使用します。
Get-AksHciCredential -name mycluster
シークレット ストア CSI ドライバーをインストールする
シークレット ストア CSI ドライバーをインストールするには、次の Helm コマンドを実行します。
helm repo add csi-secrets-store-provider-azure https://azure.github.io/secrets-store-csi-driver-provider-azure/charts
次のコマンドは、シークレット ストア CSI ドライバーと Azure Key Vault プロバイダーの両方をインストールします。
helm install csi csi-secrets-store-provider-azure/csi-secrets-store-provider-azure --namespace kube-system
注
シークレット ストア CSI ドライバーと Azure Key Vault プロバイダーは、 kube-system
名前空間にインストールする必要があります。 このガイドでは、すべてのインスタンスに対して kube-system
名前空間を使用します。
シークレット ストア CSI ドライバーと Azure Key Vault プロバイダーが正常にインストールされていることを確認する
次のコマンドを実行して、実行中のポッドを調べて、シークレット ストア CSI ドライバーと Azure Key Vault プロバイダーがインストールされていることを確認します。
シークレット ストア CSI ドライバーがインストールされていることを確認するには、次のコマンドを実行します。
kubectl get pods -l app=secrets-store-csi-driver -n kube-system
出力例:
NAME READY STATUS RESTARTS AGE secrets-store-csi-driver-spbfq 3/3 Running 0 3h52m
Azure Key Vault プロバイダーがインストールされていることを確認するには、次のコマンドを実行します。
kubectl get pods -l app=csi-secrets-store-provider-azure -n kube-system
出力例:
NAME READY STATUS RESTARTS AGE csi-csi-secrets-store-provider-azure-tpb4j 1/1 Running 0 3h52m
Azure キー コンテナーにシークレットを追加する
シークレット データを含む Azure Key Vault リソースが必要です。 既存の Azure Key Vault リソースを使用することも、新しいものを作成することもできます。
Azure Key Vault リソースを作成する必要がある場合は、次のコマンドを実行します。 Azure 資格情報を使用して az login
を実行して、ログインしていることを確認します。 次に、次の値を環境に変更します。
az keyvault create -n <keyvault-name> -g <resourcegroup-name> -l eastus
Azure Key Vault では、キー、シークレット、証明書を格納できます。 次の例では、 ExampleSecret
というプレーンテキスト シークレットが構成されています。
az keyvault secret set --vault-name <keyvault-name> -n ExampleSecret --value MyAKSHCIExampleSecret
Azure で ID を作成する
サービス プリンシパルを使用して、前の手順で作成した Azure Key Vault インスタンスにアクセスします。 次のコマンドを実行するときに、出力を記録する必要があります。 次の手順では、クライアント シークレットとクライアント ID の両方を使用します。
次のコマンドを実行して、クライアント シークレットを指定します。
az ad sp create-for-rbac --role Contributor --scopes /subscriptions/<subscription-id> --name http://secrets-store-test --query 'password' -otsv
次のコマンドを実行して、クライアント ID を指定します。
az ad sp show --id http://secrets-store-test --query 'appId' -otsv
Azure キー コンテナーにアクセスするための ID を指定する
次のコマンドに示すように、前の手順の値を使用してアクセス許可を設定します。
az keyvault set-policy -n <keyvault-name> --secret-permissions get --spn <client-id>
資格情報を使用して Kubernetes シークレットを作成する
サービス プリンシパルの資格情報を使用して Kubernetes シークレットを作成するには、次のコマンドを実行します。 次の値を、前の手順の適切なクライアント ID とクライアント シークレットに置き換えます。
kubectl create secret generic secrets-store-creds --from-literal clientid=<client-id> --from-literal clientsecret=<client-secret>
既定では、シークレット ストア プロバイダーはシークレットに対してウォッチをフィルター処理しました。 既定の構成でシークレットを検索するコマンドを許可するには、シークレットにラベル secrets-store.csi.k8s.io/used=true
を追加します。
kubectl label secret secrets-store-creds secrets-store.csi.k8s.io/used=true
独自の SecretProviderClass オブジェクトを作成して適用する
Kubernetes クラスターのシークレット ストア CSI ドライバーを使用して構成するには、 SecretProviderClass
カスタム リソースを作成します。
objects
配列が、Azure Key Vault インスタンスに格納したオブジェクトと一致していることを確認します。
apiVersion: secrets-store.csi.x-k8s.io/v1alpha1
kind: SecretProviderClass
metadata:
name: <keyvault-name> # The name of the Azure key vault
namespace: kube-system
spec:
provider: azure
parameters:
keyvaultName: "<keyvault-name>" # The name of the Azure key vault
useVMManagedIdentity: "false"
userAssignedIdentityID: "false"
cloudName: "" # [OPTIONAL for Azure] if not provided, the Azure environment defaults to AzurePublicCloud
objects: |
array:
- |
objectName: <secret-name> # In this example, 'ExampleSecret'
objectType: secret # Object types: secret, key or cert
objectVersion: "" # [OPTIONAL] object versions, default to latest if empty
tenantId: "<tenant-id>" # The tenant ID containing the Azure Key Vault instance
クラスターに SecretProviderClass を適用する
前の手順で作成した SecretProviderClass
をデプロイするには、次のコマンドを使用します。
kubectl apply -f ./new-secretproviderclass.yaml
クラスターのデプロイ YAML ファイルを更新して適用する
クラスターで新しいカスタム リソースが使用されるようにするには、デプロイ YAML ファイルを更新します。 次に例を示します。
kind: Pod
apiVersion: v1
metadata:
name: busybox-secrets-store-inline
spec:
containers:
- name: busybox
image: k8s.gcr.io/e2e-test-images/busybox:1.29
command:
- "/bin/sleep"
- "10000"
volumeMounts:
- name: secrets-store-inline
mountPath: "/mnt/secrets-store"
readOnly: true
volumes:
- name: secrets-store-inline
csi:
driver: secrets-store.csi.k8s.io
readOnly: true
volumeAttributes:
secretProviderClass: "<keyvault-name>"
nodePublishSecretRef: # Only required when using service principal mode
name: secrets-store-creds # Only required when using service principal mode
その後、更新されたデプロイ YAML ファイルをクラスターに適用します。
kubectl apply -f ./my-deployment.yaml
シークレット ストアのデプロイを検証する
secrets-store
に保持されているシークレットを表示するには、次のコマンドを実行します。
kubectl exec busybox-secrets-store-inline --namespace kube-system -- ls /mnt/secrets-store/
出力にはシークレットの名前が表示されます。 この例では、次の出力が表示されます。
ExampleSecret
secrets-store
に保持されているテスト シークレットを表示するには、次のコマンドを実行します。
kubectl exec busybox-secrets-store-inline --namespace kube-system -- cat /mnt/secrets-store/ExampleSecret
出力にはシークレットの値が表示されます。 この例では、次の出力が示されています。
MyAKSHCIExampleSecret