第1章 Shared Resource CSI Driver


Secret オブジェクトConfigMap オブジェクトを名前空間間で安全に共有するには、csi ボリュームタイプを指定した共有リソース Container Storage Interface (CSI) ドライバーを使用します。このドライバーはインラインの一時ボリュームをプロビジョニングし、Pod とビルドがこれらの共有設定リソースを利用できるようにします。

1.1. namespace 間での Secret オブジェクトの共有

SharedSecret カスタムリソース (CR) を使用すると、パスワード、OAuth トークン、SSH キーなどの機密情報を含む Secret オブジェクトを、クラスター内の名前空間間で安全に共有できます。これにより、手作業による重複作業が排除され、機密データを一元管理し、アクセスを制御できるようになります。

1.1.1. SharedSecret カスタムリソースの作成

複数の名前空間間で Secret オブジェクトを共有するための SharedSecret カスタムリソース (CR) を作成します。SharedSecret カスタムリソース (CR) を作成することで、Secret オブジェクトを名前空間間で共有し、機密性の高い設定データがクラスター全体で一貫してアクセス可能であることを保証できます。

前提条件

  • OpenShift Container Platform クラスターに Builds for Red Hat OpenShift Operator がインストールされている。
  • 管理者として OpenShift Container Platform クラスターにログインしている。
  • 他の namespace で共有する Secret オブジェクトを作成した。Secret オブジェクトを作成するには、「Secret の作成」を参照してください。
  • クラスターにサブスクライブし、Insights Operator を通じてエンタイトルメントキーを同期した。
  • 次の操作を実行するための権限がある。

    • クラスタースコープレベルで sharedsecrets.sharedresource.openshift.io CR を作成する。
    • SharedSecret CR 用の ClusterRole オブジェクトを作成する。
    • Shared Resource CSI Driver の Role および RoleBinding オブジェクトを作成する。
    • ユーザーを制御するために、クラスター内の namespace 全体のロールとロールバインディングを管理する。
    • Pod によって指定されたサービスアカウントが、SharedSecret CR を使用して、Secret オブジェクトを参照する CSI ボリュームをマウントできるように、ロールとロールバインディングを管理する。
    • 共有する Secret オブジェクトが含まれている namespace にアクセスする。

手順

  1. 次の設定例を使用して、Shared Resource CSI Driver に SharedSecret オブジェクトへのアクセス権を付与する Role オブジェクトと RoleBinding オブジェクトを作成します。

    Role オブジェクトの例

    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      name: share-etc-pki-entitlement
      namespace: openshift-config-managed
    rules:
      - apiGroups:
          - ""
        resources:
          - secrets
        resourceNames:
          - etc-pki-entitlement
        verbs:
          - get
          - list
          - watch

    • metadata.name はロール CR の名前を定義します。

    RoleBinding オブジェクトの例

    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: share-etc-pki-entitlement
      namespace: openshift-config-managed
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: Role
      name: share-etc-pki-entitlement
    subjects:
      - kind: ServiceAccount
        name: csi-driver-shared-resource
        namespace: openshift-builds

    • metadata.name はRoleBinding CR の名前を定義します。
    • roleRef.name はロール CR の名前を定義します。
    • subjects.name はServiceAccount CR の名前を定義します。
  2. 次の設定例を使用して、SharedSecret CR を作成します。

    apiVersion: sharedresource.openshift.io/v1alpha1
    kind: SharedSecret
    metadata:
      name: shared-test-secret
    spec:
      secretRef:
        name: test-secret
        namespace: openshift-config-managed
    • spec.secretRef.namespace はSharedSecret CR の名前を定義します。
  3. 次の設定例を使用して、参照される共有リソースを使用するための RBAC 権限を付与する ClusterRole オブジェクトを作成します。

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: use-shared-test-secret
    rules:
      - apiGroups:
          - sharedresource.openshift.io
        resources:
          - sharedsecrets
        resourceNames:
          - shared-test-secret
        verbs:
          - use
    • metadata.name はClusterRole CR の名前を定義します。

検証

  1. 必要な ロール が作成されていることを確認するには、次のコマンドを実行してください。

    $ oc get role share-etc-pki-entitlement -n openshift-config-managed

    出力例

    NAME                        CREATED AT
    share-etc-pki-entitlement   2025-11-19T12:05:32Z

  2. 必要な RoleBinding が作成されていることを確認するには、次のコマンドを実行してください。

    $ oc get rolebinding share-etc-pki-entitlement -n openshift-config-managed

    出力例

    NAME                        ROLE                             AGE
    share-etc-pki-entitlement   Role/share-etc-pki-entitlement   2m

  3. 必要な ClusterRole が作成されていることを確認するには、次のコマンドを実行してください。

    $ oc get clusterrole use-shared-test-secret

    出力例

    NAME                     CREATED AT
    use-shared-test-secret   2025-11-19T12:05:44Z

1.1.2. Pod での SharedSecret カスタムリソースの使用

Pod から SharedSecret カスタムリソース (CR) にアクセスするには、サービスアカウントにロールベースのアクセス制御 (RBAC) 権限を付与します。

前提条件

  • あなたは以下のいずれかのユーザーとして OpenShift Container Platform クラスターにログインしています。

    • Secret オブジェクト用の SharedSecret CR インスタンスを作成したクラスター管理者。
    • 対象となる名前空間にアクセスし、共有する シークレット 用のカスタムリソースである SharedSecret を 作成または管理する権限を持つユーザー。
  • 次の操作を実行するための権限がある。

    • oc adm policy who-can use <sharedsecret_identifier> コマンドを実行して、サービスアカウントが SharedSecret CR を使用できるかどうか、およびサービスアカウントが namespace にリストされるかどうかを確認する。
    • Pod のサービスアカウントが csi ボリュームを使用できることを確認する。ユーザーとして Pod を作成した場合は、ユーザーが csi ボリュームを使用できることを確認する。
注記

最後の 2 つの前提条件を満たせない場合は、クラスター管理者に必要な RBAC 権限を設定してもらうことで、サービスアカウントに SharedSecret CR の使用を許可できるようになります。

手順

  1. ロールに関連付けられた RoleBinding オブジェクトをクラスター内に作成し、共有リソースを使用する権限をサービスアカウントに付与します。次の設定例を参照してください。

    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: use-shared-secret
      namespace: app-namespace
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: use-shared-secret
    subjects:
      - kind: ServiceAccount
        name: <service_account_name>

    各項目の説明:

    metadata.name
    RoleBinding CR の名前を定義します。
    < サービスアカウント名 >
    アプリケーションのサービスアカウント名を指定します。
  2. 共有リソース csi ドライバーを、csi ボリュームを受け入れる Pod またはその他のリソースにマウントします。次の設定例を参照してください。

    apiVersion: v1
    kind: Pod
    metadata:
      name: example-shared-secret
      namespace: <app_namespace>
    spec:
      ...
      serviceAccountName: default
      volumes:
        - name: shared-secret
          csi:
            readOnly: true
            driver: csi.sharedresource.openshift.io
            volumeAttributes:
              sharedSecret: shared-test-secret

    各項目の説明:

    <app_namespace>
    アプリケーションの名前空間の名前を指定します。
    volumes.volumeAttributes.sharedSecret
    sharedSecret 属性の値を定義します。この値は、SharedSecret CR の名前と同じである必要があります。
    重要

    Pod が起動に失敗するケースは以下のとおりです。

    • sharedSecret 属性の値が SharedSecret インスタンスの名前と一致しません。
    • ボリュームは定義されているがマウントされていないため、Pod は ContainerCreating 状態のままになり、最終的に失敗します。

検証

  1. 以下のコマンドを実行して、サービスアカウントに付与されている権限を確認してください。

    $ oc describe rolebinding share-etc-pki-entitlement -n openshift-config-managed

    出力例:

    Name:         share-etc-pki-entitlement
    Labels:       <none>
    Annotations:  <none>
    Role:
      Kind:  Role
      Name:  share-etc-pki-entitlement
    Subjects:
      Kind            Name                        Namespace
      ----            ----                        ---------
      ServiceAccount  csi-driver-shared-resource  openshift-builds
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

会社概要

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

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

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

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

Legal Notice

Theme

© 2026 Red Hat
トップに戻る