第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.ioCR を作成する。 -
SharedSecretCR 用のClusterRoleオブジェクトを作成する。 -
Shared Resource CSI Driver の
RoleおよびRoleBindingオブジェクトを作成する。 - ユーザーを制御するために、クラスター内の namespace 全体のロールとロールバインディングを管理する。
-
Pod によって指定されたサービスアカウントが、
SharedSecretCR を使用して、Secretオブジェクトを参照する CSI ボリュームをマウントできるように、ロールとロールバインディングを管理する。 -
共有する
Secretオブジェクトが含まれている namespace にアクセスする。
-
クラスタースコープレベルで
手順
次の設定例を使用して、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 は、RoleBindingCR の名前を定義します。 -
roleRef.name は、ロールCR の名前を定義します。 -
subjects.name は、ServiceAccountCR の名前を定義します。
-
次の設定例を使用して、
SharedSecretCR を作成します。apiVersion: sharedresource.openshift.io/v1alpha1 kind: SharedSecret metadata: name: shared-test-secret spec: secretRef: name: test-secret namespace: openshift-config-managed-
spec.secretRef.namespace は、SharedSecretCR の名前を定義します。
-
次の設定例を使用して、参照される共有リソースを使用するための 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 はClusterRoleCR の名前を定義します。
-
検証
必要な
ロールが作成されていることを確認するには、次のコマンドを実行してください。$ oc get role share-etc-pki-entitlement -n openshift-config-managed出力例
NAME CREATED AT share-etc-pki-entitlement 2025-11-19T12:05:32Z必要な
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必要な
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オブジェクト用のSharedSecretCR インスタンスを作成したクラスター管理者。 -
対象となる名前空間にアクセスし、共有する
シークレット用のカスタムリソースであるSharedSecret を作成または管理する権限を持つユーザー。
-
次の操作を実行するための権限がある。
-
oc adm policy who-can use <sharedsecret_identifier>コマンドを実行して、サービスアカウントがSharedSecretCR を使用できるかどうか、およびサービスアカウントが namespace にリストされるかどうかを確認する。 -
Pod のサービスアカウントが
csiボリュームを使用できることを確認する。ユーザーとして Pod を作成した場合は、ユーザーがcsiボリュームを使用できることを確認する。
-
最後の 2 つの前提条件を満たせない場合は、クラスター管理者に必要な RBAC 権限を設定してもらうことで、サービスアカウントに SharedSecret CR の使用を許可できるようになります。
手順
ロールに関連付けられた
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-
RoleBindingCR の名前を定義します。 < サービスアカウント名 >- アプリケーションのサービスアカウント名を指定します。
共有リソース
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属性の値を定義します。この値は、SharedSecretCR の名前と同じである必要があります。
重要Pod が起動に失敗するケースは以下のとおりです。
-
sharedSecret属性の値がSharedSecretインスタンスの名前と一致しません。 -
ボリュームは定義されているがマウントされていないため、Pod は
ContainerCreating状態のままになり、最終的に失敗します。
検証
以下のコマンドを実行して、サービスアカウントに付与されている権限を確認してください。
$ 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