第5章 ロールベースアクセス制御 (RBAC) REST API
Red Hat Developer Hub は、Developer Hub で権限とロールを管理するために使用できる RBAC REST API を提供します。この API は、Developer Hub の権限ポリシーとロールのメンテナンスを容易にし、自動化します。
RBAC REST API を使用すると、次のアクションを実行できます。
- すべて、または特定の権限ポリシー、もしくはロールに関する情報を取得します。
- 権限ポリシーまたはロールを作成、更新、削除します。
- 静的プラグインに関する権限ポリシーの情報を取得します。
RBAC REST API には、次のコンポーネントが必要です。
- 認可
RBAC REST API には、許可されたユーザーロールに対するベアラートークンの認可が必要です。開発目的の場合、ブラウザーで Web コンソールにアクセスできます。ネットワーク要求リストでトークン要求を更新すると、応答 JSON 内でトークンが見つかります。
Authorization: Bearer $token
たとえば、Developer Hub の Homepage で、Network タブに移動し、
query?term=
ネットワーク呼び出しを検索します。または、Catalog ページに移動し、任意のカタログ API ネットワーク呼び出しを選択して、ベアラートークンを取得することもできます。- HTTP メソッド
RBAC REST API は、API 要求で次の HTTP メソッドをサポートします。
-
GET
: 指定したリソースのエンドポイントから指定した情報を取得する -
POST
: リソースを作成または更新する -
PUT
: リソースを更新する -
DELETE
: リソースを削除する
-
- ベース URL
-
RBAC REST API 要求のベース URL は、
http://SERVER:PORT/api/permission/policies
(http://localhost:7007/api/permission/policies
など) です。 - エンドポイント
RBAC REST API エンドポイント (特定の
kind
、namespace
、name
の/api/permission/policies/[kind]/[namespace]/[name]
など) は、対応するリソースにアクセスするためにベース URL に追加する URI です。以下は、
/api/permission/policies/[kind]/[namespace]/[name]
エンドポイントの要求 URL の例です。http://localhost:7007/api/permission/policies/user/default/johndoe
注記少なくとも 1 つの権限が
user:default/johndoe
に割り当てられている場合、前述した要求 URL の例は、有効な認可トークンを含むGET
応答で送信されると結果を返します。ただし、権限がロールにのみ割り当てられている場合、例として挙げた要求 URL は出力を返しません。- 要求データ
RBAC REST API の HTTP
POST
要求では、データに JSON 要求の body が必要になる場合があります。http://localhost:7007/api/permission/policies
のPOST
要求 URL と JSON 要求の body データの例:{ "entityReference": "role:default/test", "permission": "catalog-entity", "policy": "delete", "effect": "allow" }
- HTTP ステータスコード
RBAC REST API は、応答として返される次の HTTP ステータスコードをサポートしています。
-
200
OK: 要求は成功しました。 -
201
Created: 要求により、新しいリソースが正常に作成されました。 -
204
No Content: 要求は成功しましたが、応答ペイロードで送信する追加コンテンツはありません。 -
400
Bad Request: 要求に入力エラーがありました。 -
401
Unauthorized: 要求されたリソースに対する有効な認証がありません。 -
403
Forbidden: 要求の承認が拒否されました。 -
404
Not Found: 要求されたリソースは見つかりません。 -
409
Conflict: 要求が、現在の状態およびターゲットリソースと競合しています。
-
- ソース
RBAC プラグインを使用して作成された各権限ポリシーとロールは、プラグイン内でデータの一貫性を維持するために、ソースに関連付けられます。次の指定のソース情報に基づいて、権限ポリシーとロールを操作できます。
- CSV ファイル
- 設定ファイル
- REST API
- レガシー
CSV ファイルと REST API から生成されたロールと権限ポリシーを管理する場合、元のソース情報に基づく簡単な変更が必要になります。
設定ファイルは、RBAC プラグインによって提供されるデフォルトの
role:default/rbac_admin
ロールに関係します。デフォルトのロールには、権限ポリシーまたはロールの作成、読み取り、更新、削除、およびカタログエンティティーの読み取りを行うための制限された権限があります。注記デフォルトの権限が管理要件に適していない場合は、必要な権限ポリシーを使用してカスタム管理者ロールを作成できます。
レガシーソースは、RBAC バックエンドプラグインバージョン
2.1.3
より前に定義されたポリシーとロールに適用されます。上記の選択肢の中で、最も制限が少ないソースの場所です。REST API ソースまたは CSV ファイルソースを使用するには、レガシーソースの権限とロールを更新する必要があります。必要に応じて、
GET
リクエストを使用してロールとポリシーをクエリーし、ソース情報を確認できます。
5.1. REST クライアントまたは curl ユーティリティーを使用して RBAC REST API で要求を送信する
RBAC REST API を使用すると、ユーザーインターフェイスを使用せずに、Developer Hub の権限ポリシーおよびロールと対話できます。RBAC REST API 要求は、任意の REST クライアントまたは curl ユーティリティーを使用して送信できます。
前提条件
- Red Hat Developer Hub がインストールされ、実行されている。
Red Hat Developer Hub のインストールの詳細は、Helm チャートを使用した OpenShift Container Platform への Red Hat Developer Hub のインストール を参照してください。
- Developer Hub にアクセスできる。
手順
要求の送信先となる API エンドポイント (例:
POST/api/permission/policies
) を特定します。ユースケースに合わせて、要求の詳細を調整します。REST クライアントの場合:
- Authorization: Web コンソールから生成されたトークンを入力します。
-
HTTP method:
POST
に設定します。 -
URL: RBAC REST API のベース URL とエンドポイント (例:
http://localhost:7007/api/permission/policies
) を入力します。
curl ユーティリティーの場合:
-
-X
:POST
に設定します。 -H
: 以下のヘッダーを設定します。Content-type: application/json
Authorization: Bearer $token
$token
は、ブラウザーの Web コンソールから要求されたトークンです。-
URL: 次の RBAC REST API ベースの URL エンドポイント (例:
http://localhost:7007/api/permission/policies
) を入力します。 -
-d
: 要求の JSON body を追加します。
要求例:
curl -X POST "http://localhost:7007/api/permission/roles" -d '{"memberReferences": ["group:default/example"], "name": "role:default/test", "metadata": { "description": "This is a test role" } }' -H "Content-Type: application/json" -H "Authorization: Bearer $token" -v
curl -X POST "http://localhost:7007/api/permission/policies" -d '[{"entityReference":"role:default/test", "permission": "catalog-entity", "policy": "read", "effect":"allow"}]' -H "Content-Type: application/json" -H "Authorization: Bearer $token" -v
curl -X POST "http://localhost:7007/api/permission/roles/conditions" -d '{"result": "CONDITIONAL", "roleEntityRef": "role:default/test", "pluginId": "catalog", "resourceType": "catalog-entity", "permissionMapping": ["read"], "conditions": {"rule": "IS_ENTITY_OWNER", "resourceType": "catalog-entity", "params": {"claims": ["group:default/janus-authors"]}}}' -H "Content-Type: application/json" -H "Authorization: Bearer $token" -v
- 要求を実行し、応答を確認します。