コンテンツにスキップ

リソース定義@SecretsストアCSIドライバー

はじめに

本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。


01. セットアップ

インストール

▼ チャートとして

チャートリポジトリからチャートをインストールし、Kubernetesリソースを作成する。

$ helm repo add <チャートリポジトリ名> https://kubernetes-sigs.github.io/secrets-store-csi-driver/charts

$ helm repo update

$ helm install <Helmリリース名> <チャートリポジトリ名>/secrets-store-csi-driver -n kube-system --version <バージョンタグ>

▼ AWS EKS専用のチャートとして

AWS EKSでSecretsストアCSIドライバーを簡単にセットアップするために、それ専用のチャートを使用する。

$ helm repo add <チャートリポジトリ名> https://kubernetes-sigs.github.io/secrets-store-csi-driver/charts

$ helm repo update

$ helm install <Helmリリース名> <チャートリポジトリ名>/secrets-store-csi-driver -n kube-system --version <バージョンタグ>

また、AWS EKSのために必要なマニフェストをインストールする。

$ kubectl apply -f https://raw.githubusercontent.com/aws/secrets-store-csi-driver-provider-aws/main/deployment/aws-provider-installer.yaml


02. Pod@Kubernetesでの設定

SecretsストアCSIドライバーによって、PodではSecretを介さずに、プロバイダーから変数を直接的にマウントする。

別途、Podに紐づくServiceAccountに、プロバイダーのSecretへの認可スコープを付与する必要がある。

apiVersion: v1
kind: Pod
metadata:
  name: foo-pod
  namespace: foo-namespace
spec:
  containers:
    - name: app
      image: app:1.0.0
      ports:
        - containerPort: 8080
      # Secretは使用せずにPod内コンテナにファイルとしてマウントする。
      volumeMounts:
        - name: foo-secrets-store-csi-volume
          mountPath: /etc/secrets
          readOnly: "true"
  volumes:
    # CSIボリュームを設定する。
    - name: foo-secrets-store-csi-volume
      csi:
        driver: secrets-store.csi.k8s.io
        readOnly: "true"
        volumeAttributes:
          # SecretProviderClassを指定する。
          secretProviderClass: foo-aws-secret-provider-class


03. SecretProviderClass

.metadata

▼ namespace

Namespaceを設定する。

Secretのマウント対象となるPodと同じNamespaceにする必要がある。

apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
  namespace: foo-namespace # Podと同じNamespace


.spec.provider

▼ providerとは

Secretのプロバイダーを設定する。

apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
  name: foo-aws-secret-provider-class
spec:
  provider: aws


.spec.parameters

▼ parametersとは

プロバイダーに応じて、参照するSecretのデータを設定する。

▼ objects (AWSプロバイダーの場合)

AWSプロバイダー上のSecret (AWS Secrets Manager、AWS Systems Manager) を識別する情報を設定する。

apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
  name: foo-aws-secret-provider-class
spec:
  provider: aws
  parameters:
    # AWS Secrets Managerから取得する。
    # objectNameキーに、ARN (arn:aws:secretsmanager:ap-northeast-1:<AWSアカウントID>:secret:<Secretストア名>) を指定しても良い。
    # その場合、objectTypeキーは不要になる。
    objects: |
      - objectName: "<Secret名>"
      - objectType: "secretsmanager"
apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
  name: foo-aws-secret-provider-class
spec:
  provider: aws
  parameters:
    # AWS Systems Managerから取得する。
    objects: |
      - objectName: "/foo/USERNAME"
        objectType: "ssmparameter"
      - objectName: "/foo/PASSWORD"
        objectType: "ssmparameter"

▼ objects (Google Cloudプロバイダーの場合)

Google Cloudプロバイダー上のSecret (Google Cloud Secret Manager) を識別する情報を設定する。

apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
  name: foo-gcp-secret-provider-class
spec:
  provider: gcp
  parameters:
    # Google Cloud Secret Managerから取得する。
    objects: |
      - resourceName: "projects/<プロジェクトID>/secrets/<Secret名>"