メインコンテンツまでスキップ

AWS Secrets and Configuration Provider (ASCP)

前のステップで実行したprepare-environmentスクリプトは、このラボに必要なKubernetes Secrets Store CSIドライバー用のAWS Secrets and Configuration Provider (ASCP)をすでにインストールしています。

アドオンが正しくデプロイされたことを確認しましょう。

まず、Secret Store CSIドライバーのDaemonSetとそのPodsを確認します:

~$kubectl -n kube-system get pods,daemonsets -l app=secrets-store-csi-driver
NAME                                                        DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR            AGE
daemonset.apps/csi-secrets-store-secrets-store-csi-driver   3         3         3       3            3           kubernetes.io/os=linux   3m57s
 
NAME                                                   READY   STATUS    RESTARTS   AGE
pod/csi-secrets-store-secrets-store-csi-driver-bzddm   3/3     Running   0          3m57s
pod/csi-secrets-store-secrets-store-csi-driver-k7m6c   3/3     Running   0          3m57s
pod/csi-secrets-store-secrets-store-csi-driver-x2rs4   3/3     Running   0          3m57s

次に、AWS用のCSI Secrets StoreプロバイダードライバーのDaemonSetとそのPodsを確認します:

~$kubectl -n kube-system get pods,daemonset -l "app=secrets-store-csi-driver-provider-aws"
NAME                                                   DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR            AGE
daemonset.apps/secrets-store-csi-driver-provider-aws   3         3         3       3            3           kubernetes.io/os=linux   2m3s
 
NAME                                              READY   STATUS    RESTARTS   AGE
pod/secrets-store-csi-driver-provider-aws-4jf8f   1/1     Running   0          2m2s
pod/secrets-store-csi-driver-provider-aws-djtf5   1/1     Running   0          2m2s
pod/secrets-store-csi-driver-provider-aws-dzg9r   1/1     Running   0          2m2s

CSIドライバーを介してAWS Secrets Managerに保存されているシークレットへのアクセスを提供するには、SecretProviderClassが必要です - これはAWS Secrets Managerの情報と一致するドライバー設定とパラメータを提供する名前空間付きのカスタムリソースです。

~/environment/eks-workshop/modules/security/secrets-manager/secret-provider-class.yaml
apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
name: catalog-spc
namespace: catalog
spec:
provider: aws
parameters:
objects: |
- objectName: "$SECRET_NAME"
objectType: "secretsmanager"
jmesPath:
- path: username
objectAlias: username
- path: password
objectAlias: password
secretObjects:
- secretName: catalog-secret
type: Opaque
data:
- objectName: username
key: username
- objectName: password
key: password
A

provider: awsはAWS Secrets Store CSIドライバーを指定します

B

parameters.objectsはAWS secretsmanagerソースシークレット名$SECRET_NAMEを定義し、jmesPathを使用して特定のusernamepasswordフィールドをKubernetesで消費するための名前付きエイリアスとして抽出します

C

secretObjectsは抽出されたusernamepasswordフィールドをシークレットキーにマッピングする標準のOpaque Kubernetesシークレット名catalog-secretを作成します

このリソースを作成しましょう:

~$cat ~/environment/eks-workshop/modules/security/secrets-manager/secret-provider-class.yaml \
| envsubst | kubectl apply -f -

Secret Store CSIドライバーはKubernetesとAWS Secrets Managerなどの外部シークレットプロバイダー間の仲介者として機能します。SecretProviderClassで構成すると、Podボリュームのファイルとしてシークレットをマウントし、同期されたKubernetes Secretオブジェクトを作成でき、アプリケーションがこれらのシークレットを消費する方法に柔軟性を提供します。