第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など) です。 - Endpoints
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 データの例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - HTTP ステータスコード
RBAC REST API は、応答として返される次の HTTP ステータスコードをサポートしています。
-
200OK: 要求は成功しました。 -
201Created: 要求により、新しいリソースが正常に作成されました。 -
204No Content: 要求は成功しましたが、応答ペイロードで送信する追加コンテンツはありません。 -
400Bad Request: 要求に入力エラーがありました。 -
401Unauthorized: 要求されたリソースに対する有効な認証がありません。 -
403Forbidden: 要求の承認が拒否されました。 -
404Not Found: 要求されたリソースは見つかりません。 -
409Conflict: 要求が、現在の状態およびターゲットリソースと競合しています。
-
- ソース
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/jsonAuthorization: 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" -vcurl -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" -vcurl -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- 要求を実行し、応答を確認します。