第2章 Red Hat Developer Hub の権限ポリシー
Red Hat Developer Hub の権限ポリシーは、リソースまたは機能へのアクセスを管理する一連のルールです。これらのポリシーは、ユーザーのロールに基づいてユーザーに付与される認可レベルを示します。権限ポリシーは、特定の環境内でセキュリティーと機密性を維持するために実装されます。
Developer Hub では、次の種類の権限を定義できます。
- リソースタイプ
- 基本
2 種類の権限の違いは、定義されたリソースタイプが権限に含まれているかどうかによって決まります。
リソースタイプ権限は、次の例に示すように、関連するリソースタイプまたは権限名のいずれかを使用して定義できます。
リソースタイプ権限の定義の例
p, role:default/myrole, catalog.entity.read, read, allow g, user:default/myuser, role:default/myrole p, role:default/another-role, catalog-entity, read, allow g, user:default/another-user, role:default/another-role
基本的な権限は、次の例に示すように、権限名を使用して Developer Hub で定義できます。
基本的な権限の定義の例
p, role:default/myrole, catalog.entity.create, create, allow g, user:default/myuser, role:default/myrole
Developer Hub では、次の権限ポリシーがサポートされます。
- Catalog 権限
名前 | リソースタイプ | ポリシー | 説明 |
---|---|---|---|
|
| read | ユーザーまたはロールがカタログから読み取ることを許可します。 |
| create | ユーザーまたはロールによるカタログエンティティーの作成 (既存のコンポーネントをカタログに登録することを含む) を許可します。 | |
|
| update | ユーザーまたはロールがカタログから単一または複数のエンティティーを更新することを許可します。 |
|
| delete | ユーザーまたはロールがカタログから単一または複数のエンティティーを削除することを許可します。 |
| read | ユーザーまたはロールがカタログから単一または複数の場所を読み取ることを許可します。 | |
| create | ユーザーまたはロールがカタログ内に場所を作成することを許可します。 | |
| delete | ユーザーまたはロールがカタログから場所を削除することを許可します。 |
- Scaffolder 権限
名前 | リソースタイプ | ポリシー | 説明 |
---|---|---|---|
|
| テンプレートからのアクションの実行を許可します。 | |
|
| read | ユーザーまたはロールがテンプレートから単一または複数のパラメーターを読み取ることを許可します。 |
|
| read | ユーザーまたはロールがテンプレートから単一または複数のステップを読み取ることを許可します。 |
| create | ユーザーまたはロールが新しい scaffolder タスクを作成するソフトウェアテンプレートをトリガーすることを許可します。 | |
| ユーザーまたはロールが現在実行中の scaffolder タスクをキャンセルすることを許可します。 | ||
| read | ユーザーまたはロールがすべての scaffolder タスクとそれに関連するイベントおよびログを読み取ることを許可します。 |
- RBAC 権限
名前 | リソースタイプ | ポリシー | 説明 |
---|---|---|---|
|
| read | ユーザーまたはロールに権限ポリシーとロールの読み取りを許可します。 |
|
| create | ユーザーまたはロールが単一または複数の権限ポリシーとロールを作成することを許可します。 |
|
| update | ユーザーまたはロールが単一または複数の権限ポリシーとロールを更新することを許可します。 |
|
| delete | ユーザーまたはロールが単一または複数の権限ポリシーとロールを削除することを許可します。 |
- Kubernetes 権限
名前 | リソースタイプ | ポリシー | 説明 |
---|---|---|---|
| ユーザーまたはロールがプロキシーエンドポイントにアクセスすることを許可します。 |
- OCM 権限
名前 | リソースタイプ | ポリシー | 説明 |
---|---|---|---|
| read | ユーザーまたはロールが OCM プラグインから読み取ることを許可します。 | |
| read | ユーザーまたはロールが OCM プラグイン内のクラスター情報を読み取ることを許可します。 |
- トポロジー権限
名前 | リソースタイプ | ポリシー | 説明 |
---|---|---|---|
| read | ユーザーまたはロールがトポロジープラグインを表示することを許可します。 | |
| ユーザーまたはロールがプロキシーエンドポイントにアクセスし、RHDH 内の Pod ログとイベントを読み取ることを許可します。 |
2.1. 権限ポリシーの設定
Red Hat Developer Hub では、2 つの方法で権限ポリシーを設定できます。
- 権限ポリシー管理者の設定
- 外部ファイルで定義された権限ポリシーの設定
2.1.1. 権限ポリシー管理者の設定
Developer Hub のユーザーとグループの権限ポリシーは、権限ポリシー管理者が管理します。ロールベースアクセス制御 REST API には、権限ポリシー管理者のみアクセスできます。
ポリシー管理者を設定する目的は、特定の制限された数の認証済みユーザーが RBAC REST API にアクセスできるようにすることです。権限ポリシーは、app-config-rhdh
ConfigMap で参照される policy.csv
ファイルで定義されます。OpenShift プラットフォーム管理者またはクラスター管理者は、Red Hat Developer Hub がデプロイされている namespace にアクセスしてこのタスクを実行できます。
以下のように app-config.yaml
ファイルを設定して、パーミッションポリシー管理者を有効にすることができます。
permission: enabled: true rbac: admin: users: - name: user:default/joeuser
権限ポリシーロール (role:default/rbac_admin
) は、Developer Hub のデフォルトのロールです。権限ポリシー/ロールの作成、読み取り、更新、削除、カタログからの読み取りなどの権限を作成時に追加します。
デフォルトの権限が要件に適していない場合は、適切な権限ポリシーを使用して、要件に合わせて新しい管理者ロールを定義できます。または、オプションの superUsers
設定値を使用して、Developer Hub 全体に無制限の権限を付与することもできます。
superUsers
は、app-config.yaml
ファイルで次のように設定できます。
# ... permission: enabled: true rbac: admin: superUsers: - name: user:default/joeuser # ...
2.1.2. 外部ファイルで定義された権限ポリシーの設定
Red Hat Developer Hub を起動する前に、権限ポリシーを設定できます。権限ポリシーが外部ファイルで定義されている場合は、同じファイルを Developer Hub にインポートできます。次の Casbin ルール形式を使用して、権限ポリシーを定義する必要があります。
--- `p, <ROLE>, <PERMISSION_NAME or PERMISSION_RESOURCE_TYPE>, <PERMISSION_POLICY_ACTION>, <ALLOW or DENY>` ---
次の Casbin ルール形式を使用してロールを定義できます。
--- `g, <USER or GROUP>, <ROLE>` ---
Casbin ルールの形式の詳細は、Casbin ルールの基本 を参照してください。
以下は、権限ポリシーの設定例です。
--- `p, role:default/guests, catalog-entity, read, allow`
p, role:default/guests, catalog.entity.create, create, allow
g, user:default/<USER_TO_ROLE>, role:default/guests
g, group:default/<GROUP_TO_ROLE>, role:default/guests
---
定義された権限に関連付けられたアクションが含まれていない場合は、ポリシーとして use
を追加します。以下の例を参照してください。
--- `p, role:default/guests, kubernetes.proxy, use, allow` ---
app-config.yaml
ファイルで、policy.csv
ファイルのパスを定義できます。
permission: enabled: true rbac: policies-csv-file: /some/path/rbac-policy.csv
オプションの設定値を使用すると、Developer Hub インスタンスを再起動せずに CSV ファイルを再読み込みできるようになります。
app-config.yaml
ファイルで policyFileReload
オプションの値を設定します。
# ... permission: enabled: true rbac: policies-csv-file: /some/path/rbac-policy.csv policyFileReload: true # ...
2.1.2.1. policy.csv
ファイルを Developer Hub Helm チャートにマウントする
Red Hat Developer Hub が Helm チャートを使用してデプロイされている場合は、policy.csv
ファイルを Developer Hub Helm チャートにマウントすることで、このファイルを定義する必要があります。
configMap
を作成してマウントすることで、policy.csv
ファイルを Developer Hub Helm チャートに追加できます。
前提条件
- OpenShift Container Platform Web コンソールを使用して OpenShift Container Platform アカウントにログインしている。
- Red Hat Developer Hub が、Helm チャートを使用してインストールおよびデプロイされている。
手順
OpenShift Container Platform で、次の例に示すように、ポリシーを保持する ConfigMap を作成します。
ConfigMap
の例kind: ConfigMap apiVersion: v1 metadata: name: rbac-policy namespace: rhdh data: rbac-policy.csv: | p, role:default/guests, catalog-entity, read, allow p, role:default/guests, catalog.entity.create, create, allow g, user:default/<YOUR_USER>, role:default/guests
-
Developer Hub Helm チャートで、Root Schema
Backstage chart schema Backstage parameters Backstage container additional volume mounts に移動します。 Add Backstage container additional volume mounts を選択し、次の値を追加します。
-
mountPath:
opt/app-root/src/rbac
-
Name:
rbac-policy
-
mountPath:
RBAC ポリシーを、Developer Hub Helm チャートの Backstage container additional volumes に追加します。
-
name:
rbac-policy
configMap
-
defaultMode:
420
-
name:
rbac-policy
-
defaultMode:
-
name:
app-config.yaml
ファイル内のポリシーパスを、次のように更新します。app-config.yaml
ファイルの例permission: enabled: true rbac: policies-csv-file: ./rbac/rbac-policy.csv