2.3. GitOps リポジトリーへの AWS Secrets Manager リソースの保存


このガイドでは、Secrets Store Container Storage Interface (SSCSI) Driver Operator で GitOps ワークフローを使用して、AWS Secrets Manager から OpenShift Container Platform の CSI ボリュームにシークレットをマウントする方法を例とともに説明します。

重要

AWS Secrets Manager での SSCSI Driver Operator の使用は、ホストされたコントロールプレーンクラスターではサポートされていません。

前提条件

  • cluster-admin 権限でクラスターにアクセスできる。
  • OpenShift Container Platform Web コンソールにアクセスできる。
  • ccoctl バイナリーを抽出して準備している。
  • jq CLI ツールがインストールされている。
  • クラスターが AWS にインストールされ、AWS Security Token Service (STS) を使用している。
  • 必要なシークレットを保存するように AWS Secrets Manager を設定している。
  • SSCSI Driver Operator がクラスターにインストールされている
  • Red Hat OpenShift GitOps Operator がクラスターにインストールされている。
  • GitOps リポジトリーでシークレットを使用する準備ができている。
  • Argo CD 管理アカウントを使用して Argo CD インスタンスにログインしている。

手順

  1. AWS Secrets Manager プロバイダーをインストールし、リソースを追加します。

    1. GitOps リポジトリーでディレクトリーを作成し、aws-provider.yaml ファイルを次の設定に追加して、AWS Secrets Manager プロバイダーのリソースをデプロイします。

      重要

      SSCSI ドライバー用の AWS Secrets Manager プロバイダーは、アップストリームのプロバイダーです。

      この設定は、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. GitOps リポジトリーに secret-provider-app.yaml ファイルを追加して、アプリケーションを作成し、AWS Secrets Manager のリソースをデプロイします。

      secret-provider-app.yaml ファイルの例

      apiVersion: argoproj.io/v1alpha1
      kind: Application
      metadata:
        name: secret-provider-app
        namespace: openshift-gitops
      spec:
        destination:
          namespace: openshift-cluster-csi-drivers
          server: https://kubernetes.default.svc
        project: default
        source:
          path: path/to/aws-provider/resources
          repoURL: https://github.com/<my-domain>/<gitops>.git 1
        syncPolicy:
          automated:
          prune: true
          selfHeal: true

      1
      repoURL フィールドの値を更新して、GitOps リポジトリーを指すようにします。
  2. リソースをデフォルトの Argo CD インスタンスと同期して、それらをクラスターにデプロイします。

    1. アプリケーションがデプロイされている openshift-cluster-csi-drivers namespace にラベルを追加し、openshift-gitops namespace の Argo CD インスタンスが管理できるようにします。

      $ oc label namespace openshift-cluster-csi-drivers argocd.argoproj.io/managed-by=openshift-gitops
    2. プッシュした aws-provider.yaml ファイルを含む、GitOps リポジトリー内のリソースをクラスターに適用します。

      出力例

      application.argoproj.io/argo-app created
      application.argoproj.io/secret-provider-app created
      ...

Argo CD UI では、csi-secrets-store-provider-aws daemonset がリソースの同期を継続していることがわかります。この問題を解決するには、AWS Secrets Manager からシークレットをマウントするように SSCSI ドライバーを設定する必要があります。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

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

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

会社概要

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

© 2024 Red Hat, Inc.