2.8.3.2. AWS Systems Manager Parameter Store からのシークレットのマウント


Secrets Store CSI Driver Operator を使用して、AWS Systems Manager Parameter Store の外部シークレットストアから OpenShift Container Platform の Container Storage Interface (CSI) ボリュームにシークレットをマウントできます。

前提条件

  • cluster-admin ロールを持つユーザーとしてクラスターにアクセスできる。
  • jq ツールをインストールした。
  • ccoctl ユーティリティーを抽出して準備した。
  • クラスターを Amazon Web Services (AWS) にインストールしており、そのクラスターは AWS Security Token Service (STS) を使用する。
  • Secrets Store CSI Driver Operator がインストールされている。詳細は、「Secrets Store CSI ドライバーのインストール」を参照してください。
  • 必要なシークレットを保存するように AWS Systems Manager パラメーターストアを設定している。

手順

  1. AWS Systems Manager Parameter Store プロバイダーをインストールします。

    1. 次の設定例を使用して YAML ファイルを作成します。

      重要

      Secrets Store CSI ドライバーの AWS Systems Manager Parameter Store プロバイダーは、アップストリームのプロバイダーです。

      この設定は、OpenShift Container Platform で適切に動作するように、アップストリームの AWS ドキュメント で提供されている設定から変更されています。この設定を変更すると、機能に影響が出る場合があります。

      aws-provider.yaml ファイルの例

      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: csi-secrets-store-provider-aws
        namespace: openshift-cluster-csi-drivers
      ---
      apiVersion: rbac.authorization.k8s.io/v1
      kind: ClusterRole
      metadata:
        name: csi-secrets-store-provider-aws-cluster-role
      rules:
      - apiGroups: [""]
        resources: ["serviceaccounts/token"]
        verbs: ["create"]
      - apiGroups: [""]
        resources: ["serviceaccounts"]
        verbs: ["get"]
      - apiGroups: [""]
        resources: ["pods"]
        verbs: ["get"]
      - apiGroups: [""]
        resources: ["nodes"]
        verbs: ["get"]
      ---
      apiVersion: rbac.authorization.k8s.io/v1
      kind: ClusterRoleBinding
      metadata:
        name: csi-secrets-store-provider-aws-cluster-rolebinding
      roleRef:
        apiGroup: rbac.authorization.k8s.io
        kind: ClusterRole
        name: csi-secrets-store-provider-aws-cluster-role
      subjects:
      - kind: ServiceAccount
        name: csi-secrets-store-provider-aws
        namespace: openshift-cluster-csi-drivers
      ---
      apiVersion: apps/v1
      kind: DaemonSet
      metadata:
        namespace: openshift-cluster-csi-drivers
        name: csi-secrets-store-provider-aws
        labels:
          app: csi-secrets-store-provider-aws
      spec:
        updateStrategy:
          type: RollingUpdate
        selector:
          matchLabels:
            app: csi-secrets-store-provider-aws
        template:
          metadata:
            labels:
              app: csi-secrets-store-provider-aws
          spec:
            serviceAccountName: csi-secrets-store-provider-aws
            hostNetwork: false
            containers:
              - name: provider-aws-installer
                image: public.ecr.aws/aws-secrets-manager/secrets-store-csi-driver-provider-aws:1.0.r2-50-g5b4aca1-2023.06.09.21.19
                imagePullPolicy: Always
                args:
                    - --provider-volume=/etc/kubernetes/secrets-store-csi-providers
                resources:
                  requests:
                    cpu: 50m
                    memory: 100Mi
                  limits:
                    cpu: 50m
                    memory: 100Mi
                securityContext:
                  privileged: true
                volumeMounts:
                  - mountPath: "/etc/kubernetes/secrets-store-csi-providers"
                    name: providervol
                  - name: mountpoint-dir
                    mountPath: /var/lib/kubelet/pods
                    mountPropagation: HostToContainer
            tolerations:
            - operator: Exists
            volumes:
              - name: providervol
                hostPath:
                  path: "/etc/kubernetes/secrets-store-csi-providers"
              - name: mountpoint-dir
                hostPath:
                  path: /var/lib/kubelet/pods
                  type: DirectoryOrCreate
            nodeSelector:
              kubernetes.io/os: linux

    2. 次のコマンドを実行して、csi-secrets-store-provider-aws サービスアカウントへの特権アクセスを付与します。

      $ oc adm policy add-scc-to-user privileged -z csi-secrets-store-provider-aws -n openshift-cluster-csi-drivers
    3. 次のコマンドを実行して、プロバイダーリソースを作成します。

      $ oc apply -f aws-provider.yaml
  2. AWS シークレットオブジェクトの読み取り権限をサービスアカウントに付与します。

    1. 次のコマンドを実行して、認証情報リクエストを含むディレクトリーを作成します。

      $ mkdir <aws_creds_directory_name>
    2. CredentialsRequest リソース設定を定義する YAML ファイルを作成します。次の設定例を参照してください。

      apiVersion: cloudcredential.openshift.io/v1
      kind: CredentialsRequest
      metadata:
        name: aws-creds-request
        namespace: openshift-cloud-credential-operator
      spec:
        providerSpec:
          apiVersion: cloudcredential.openshift.io/v1
          kind: AWSProviderSpec
          statementEntries:
          - action:
            - "ssm:GetParameter"
            - "ssm:GetParameters"
            effect: Allow
            resource: "arn:*:ssm:*:*:parameter/testParameter*"
        secretRef:
          name: aws-creds
          namespace: my-namespace
        serviceAccountNames:
        - <service_account_name>
    3. 次のコマンドを実行して、OpenID Connect (OIDC) プロバイダーを取得します。

      $ oc get --raw=/.well-known/openid-configuration | jq -r '.issuer'

      出力例

      https://<oidc_provider_name>

      次のステップで使用するために、出力から OIDC プロバイダー名 <oidc_provider_name> をコピーします。

    4. ccoctl ツールを使用して、次のコマンドを実行して認証情報リクエストを処理します。

      $ ccoctl aws create-iam-roles \
          --name my-role --region=<aws_region> \
          --credentials-requests-dir=<aws_creds_dir_name> \
          --identity-provider-arn arn:aws:iam::<aws_account_id>:oidc-provider/<oidc_provider_name> --output-dir=<output_dir_name>

      出力例

      2023/05/15 18:10:34 Role arn:aws:iam::<aws_account_id>:role/my-role-my-namespace-aws-creds created
      2023/05/15 18:10:34 Saved credentials configuration to: credrequests-ccoctl-output/manifests/my-namespace-aws-creds-credentials.yaml
      2023/05/15 18:10:35 Updated Role policy for Role my-role-my-namespace-aws-creds

      次のステップで使用するために、出力から <aws_role_arn> をコピーします。たとえば、arn:aws:iam::<aws_account_id>:role/my-role-my-namespace-aws-creds です

    5. 次のコマンドを実行して、ロール ARN を持つサービスアカウントをバインドします。

      $ oc annotate -n my-namespace sa/aws-provider eks.amazonaws.com/role-arn="<aws_role_arn>"
  3. シークレットプロバイダークラスを作成して、シークレットストアプロバイダーを定義します。

    1. SecretProviderClass オブジェクトを定義する YAML ファイルを作成します。

      secret-provider-class-aws.yaml の例

      apiVersion: secrets-store.csi.x-k8s.io/v1
      kind: SecretProviderClass
      metadata:
        name: my-aws-provider                   
      1
      
        namespace: my-namespace                 
      2
      
      spec:
        provider: aws                           
      3
      
        parameters:                             
      4
      
          objects: |
            - objectName: "testParameter"
              objectType: "ssmparameter"

      1
      シークレットプロバイダークラスの名前を指定します。
      2
      シークレットプロバイダークラスの namespace を指定します。
      3
      プロバイダーを aws として指定します。
      4
      プロバイダー固有の設定パラメーターを指定します。
    2. 次のコマンドを実行して SecretProviderClass オブジェクトを作成します。

      $ oc create -f secret-provider-class-aws.yaml
  4. このシークレットプロバイダークラスを使用するデプロイメントを作成します。

    1. Deployment オブジェクトを定義する YAML ファイルを作成します。

      deployment.yaml の例

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: my-aws-deployment                              
      1
      
        namespace: my-namespace                              
      2
      
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: my-storage
        template:
          metadata:
            labels:
              app: my-storage
          spec:
            serviceAccountName: aws-provider
            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: "my-aws-provider" 
      3

      1
      デプロイメントの名前を指定します。
      2
      デプロイメントの namespace を指定します。これは、シークレットプロバイダークラスと同じ namespace である必要があります。
      3
      シークレットプロバイダークラスの名前を指定します。
    2. 次のコマンドを実行して、Deployment オブジェクトを作成します。

      $ oc create -f deployment.yaml

検証

  • Pod ボリュームマウント内の AWS Systems Manager Parameter Store からのシークレットにアクセスできることを確認します。

    1. 次のコマンドを実行して、Pod マウント内のシークレットをリスト表示します。

      $ oc exec my-aws-deployment-<hash> -n my-namespace -- ls /mnt/secrets-store/

      出力例

      testParameter

    2. 次のコマンドを実行して、Pod マウント内のシークレットを表示します。

      $ oc exec my-aws-deployment-<hash> -n my-namespace -- cat /mnt/secrets-store/testSecret

      出力例

      <secret_value>

Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

Red Hat ドキュメントについて

Legal Notice

Theme

© 2026 Red Hat
トップに戻る