Azure Kubernetes Service (AKS) のシークレット ストア CSI ドライバー用の Azure Key Vault プロバイダーに関する構成とトラブルシューティングのオプション
「AKS クラスターでシークレット ストア CSI ドライバーのために Azure Key Vault プロバイダーを使用する」と AKS のシークレット ストア CSI ドライバー用の Azure Key Vault プロバイダーへのアクセス ID の提供に関する記事にある手順に従います。 これらの手順を完了したら、追加の構成を適用するか、トラブルシューティングを実行できます。
構成オプション
自動ローテーションを有効または無効にする
Note
シークレット ストア CSI ドライバーの Azure Key Vault プロバイダーが有効になっていると、SecretProviderClass
の secretObjects
フィールドで定義されているポッド マウントと Kubernetes シークレットが更新されます。 これは、定義したローテーション ポーリング間隔に基づいて、定期的に変更をポーリングすることで行います。 既定のローテーション ポーリング間隔は 2 分です。
Note
ポッドの初期デプロイ後に外部シークレット ストアでシークレットが更新されると、アプリケーションがシークレット データを消費する状況に応じて、Kubernetes シークレットとポッド マウントが定期的に更新されます。
Kubernetes シークレットをボリュームとしてマウントする: シークレット ストア CSI ドライバーの自動ローテーションと K8s シークレットの同期機能を使用します。 アプリケーションは、マウントされた Kubernetes Secret ボリュームからの変更を監視する必要があります。 CSI ドライバーが Kubernetes シークレットを更新すると、対応するボリュームの内容も自動的に更新されます。
アプリケーションが、コンテナーのファイルシステムからデータを読み取る: シークレット ストア CSI ドライバーのローテーション機能を使用します。 アプリケーションは、CSI ドライバーによってマウントされたボリュームからのファイル変更を監視する必要があります。
環境変数に Kubernetes シークレット を使用する: ポッドを再起動して、環境変数として最新のシークレットを取得します。 Reloader などのツールを使用して、同期された Kubernetes シークレットの変更を監視し、ポッドでローリング アップグレードを実行します。
新しい AKS クラスターで自動ローテーションを有効にする
az aks create
コマンドを使用して新しいクラスターでシークレットの自動ローテーションを有効にし、enable-secret-rotation
アドオンを有効にします。az aks create \ --name myAKSCluster2 \ --resource-group myResourceGroup \ --enable-addons azure-keyvault-secrets-provider \ --enable-secret-rotation \ --generate-ssh-keys
既存の AKS クラスターで自動ローテーションを有効にする
az aks addon update
コマンドとenable-secret-rotation
パラメーターを使って、既存のクラスターを更新し、シークレットの自動ローテーションを有効にします。az aks addon update --resource-group myResourceGroup --name myAKSCluster2 --addon azure-keyvault-secrets-provider --enable-secret-rotation
カスタム ローテーション間隔の指定
rotation-poll-interval
パラメータを指定したaz aks addon update
コマンドを使用して、カスタム ローテーション間隔を指定します。az aks addon update --resource-group myResourceGroup --name myAKSCluster2 --addon azure-keyvault-secrets-provider --enable-secret-rotation --rotation-poll-interval 5m
自動ローテーションを無効にする
自動ローテーションを無効にするには、まずアドオンを無効にする必要があります。 その後、enable-secret-rotation
パラメータを指定せずにアドオンを再度有効にすることができます。
az aks addon disable
コマンドを使用してシークレット プロバイダー アドオンを無効にします。az aks addon disable --resource-group myResourceGroup --name myAKSCluster2 --addon azure-keyvault-secrets-provider
az aks addon enable
コマンドを使用して、enable-secret-rotation
パラメータを指定せずにシークレット プロバイダー アドオンを再度有効にします。az aks addon enable --resource-group myResourceGroup --name myAKSCluster2 --addon azure-keyvault-secrets-provider
SecretProviderClass
を既に使用している場合は、enable-secret-rotation
パラメーターを指定せずに az aks addon enable
を使用して、最初にアドオンを無効にせずにアドオンを更新できます。
マウントされたコンテンツを Kubernetes シークレットと同期する
Note
このセクションの YAML の例は不完全です。 キー コンテナー ID への選択したアクセス方法をサポートするために、それらを変更する必要があります。 詳細については、「シークレット ストア CSI ドライバーの Azure Key Vault プロバイダーにアクセスする ID を指定する」を参照してください。
マウントしたシークレットのコンテンツをミラー化するために、Kubernetes のシークレットを作成する必要がある場合があります。 シークレットは、ポッドを起動してマウントした後に同期されます。 シークレットを消費するポッドを削除すると、Kubernetes シークレットも削除されます。
次の YAML の例に示すように、
SecretProviderClass
を作成するときにsecretObjects
フィールドを使用してマウントされたコンテンツを Kubernetes シークレットと同期し、Kubernetes シークレットの目的の状態を定義します。apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: azure-sync spec: provider: azure secretObjects: # [OPTIONAL] SecretObjects defines the desired state of synced Kubernetes secret objects - data: - key: username # data field to populate objectName: foo1 # name of the mounted content to sync; this could be the object name or the object alias secretName: foosecret # name of the Kubernetes secret object type: Opaque # type of Kubernetes secret object (for example, Opaque, kubernetes.io/tls)
Note
secretObjects
フィールドのobjectName
が、マウントされたコンテンツのファイル名と一致することを確認します。objectAlias
を代わりに使用する場合は、オブジェクトの別名と一致する必要があります。
Kubernetes シークレットを参照する環境変数を設定する
Note
この例の YAML では、環境変数と volume/volumeMount を使ってシークレットにアクセスする方法を示します。 これは説明のためのものです。 一般的なアプリケーションでは、1 つの方法またはもう一方を使用します。 ただし、環境変数を介してシークレットを使用できるようにするには、まず少なくとも 1 つのポッドでマウントする必要があることに注意してください。
次の YAML の例に示すように、ポッドに環境変数を設定して、新しく作成した Kubernetes シークレットを参照します。
kind: Pod apiVersion: v1 metadata: name: busybox-secrets-store-inline spec: containers: - name: busybox image: registry.k8s.io/e2e-test-images/busybox:1.29-1 command: - "/bin/sleep" - "10000" volumeMounts: - name: secrets-store01-inline mountPath: "/mnt/secrets-store" readOnly: true env: - name: SECRET_USERNAME valueFrom: secretKeyRef: name: foosecret key: username volumes: - name: secrets-store01-inline csi: driver: secrets-store.csi.k8s.io readOnly: true volumeAttributes: secretProviderClass: "azure-sync"
メトリックにアクセスする
Azure Key Vault プロバイダー
メトリックはポート 8898 から Prometheus 経由で提供されますが、このポートは既定ではポッドの外部に公開されません。
kubectl port-forward
を使って localhost でメトリックにアクセスします。kubectl port-forward -n kube-system ds/aks-secrets-store-provider-azure 8898:8898 & curl localhost:8898/metrics
シークレット ストア CSI ドライバー用 Azure Key Vault プロバイダーが提供するメトリック
メトリック | 説明 | タグ |
---|---|---|
keyvault_request | キー コンテナーからの取得にかかった時間の分布。 | os_type=<runtime os> 、provider=azure 、object_name=<keyvault object name> 、object_type=<keyvault object type> 、error=<error if failed> |
grpc_request | gRPC 要求からの取得にかかった時間の分布。 | os_type=<runtime os> 、provider=azure 、grpc_method=<rpc full method> 、grpc_code=<grpc status code> 、grpc_message=<grpc status message> |
シークレット ストア CSI ドライバー
メトリックはポート 8095 で提供されますが、このポートは既定ではポッドの外部に公開されません。
kubectl port-forward
を使って localhost でメトリックにアクセスします。kubectl port-forward -n kube-system ds/aks-secrets-store-csi-driver 8095:8095 & curl localhost:8095/metrics
Secrets Store CSI Driver によって提供されるメトリック
メトリック | 説明 | タグ |
---|---|---|
total_node_publish | 成功したボリューム マウント要求の合計数。 | os_type=<runtime os> 、provider=<provider name> |
total_node_unpublish | 成功したボリューム マウント解除要求の合計数。 | os_type=<runtime os> |
total_node_publish_error | エラーがあったボリューム マウント要求の合計数。 | os_type=<runtime os> 、provider=<provider name> 、error_type=<error code> |
total_node_unpublish_error | エラーがあったボリューム マウント解除要求の合計数。 | os_type=<runtime os> |
total_sync_k8s_secret | 同期された Kubernetes シークレットの総数。 | os_type=<runtime os 、provider=<provider name> |
sync_k8s_secret_duration_sec | Kubernetes シークレットの同期にかかった時間の分布。 | os_type=<runtime os> |
total_rotation_reconcile | ローテーションの調整の合計数。 | os_type=<runtime os> 、rotated=<true or false> |
total_rotation_reconcile_error | エラーがあったローテーションの調整の合計数。 | os_type=<runtime os> 、rotated=<true or false> 、error_type=<error code> |
total_rotation_reconcile_error | ポッドのシークレット ストアのコンテンツをローテーションするためにかかった時間の分布。 | os_type=<runtime os> |
オープンソースから AKS マネージドのシークレット ストア CSI ドライバーに移行する
次の
helm delete
コマンドを使用して、オープンソースのシークレット ストア CSI ドライバーをアンインストールします。helm delete <release name>
Note
デプロイ YAML を使用してドライバーとプロバイダーをインストールした場合は、次の
kubectl delete
コマンドを使用してコンポーネントを削除できます。# Delete AKV provider pods from Linux nodes kubectl delete -f https://raw.githubusercontent.com/Azure/secrets-store-csi-driver-provider-azure/master/deployment/provider-azure-installer.yaml # Delete AKV provider pods from Windows nodes kubectl delete -f https://raw.githubusercontent.com/Azure/secrets-store-csi-driver-provider-azure/master/deployment/provider-azure-installer-windows.yaml
az aks enable-addons
コマンドを使用して、この機能で既存の AKS クラスターをアップグレードします。az aks enable-addons --addons azure-keyvault-secrets-provider --name myAKSCluster --resource-group myResourceGroup
トラブルシューティング
トラブルシューティングの手順については、「シークレット ストア CSI ドライバーの Azure Key Vault プロバイダーのトラブルシューティング」を参照してください。
次のステップ
シークレット ストア CSI ドライバー用 Azure Key Vault プロバイダーの詳細については、次のリソースを参照してください。
Azure Kubernetes Service