5.3. ロールベースアクセス制御 (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 ページに移動し、entity-facets を持つネットワーク呼び出しを選択してベアラートークンを取得することもできます。
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 など) です。
エンドポイント
指定された kind、namespace、ユーザー名の RBAC REST API エンドポイント (例: /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 ステータスコードをサポートしています。
-
200OK: 要求は成功しました。 -
201Created: 要求により、新しいリソースが正常に作成されました。 -
204No Content: 要求は成功しましたが、応答ペイロードで送信する追加コンテンツはありません。 -
400Bad Request: 要求に入力エラーがありました。 -
401Unauthorized: 要求されたリソースに対する有効な認証がありません。 -
403Forbidden: 要求の承認が拒否されました。 -
404Not Found: 要求されたリソースは見つかりません。 -
409Conflict: 要求が、現在の状態およびターゲットリソースと競合しています。
5.3.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 Chart を使用した 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/policies" -d '{"entityReference":"role:default/test", "permission": "catalog-entity", "policy": "read", "effect":"allow"}' -H "Content-Type: application/json" -H "Authorization: Bearer $token" -v- 要求を実行し、応答を確認します。
5.3.2. サポートされている RBAC REST API エンドポイント リンクのコピーリンクがクリップボードにコピーされました!
RBAC REST API は、Developer Hub で権限ポリシーとロールを管理し、そのポリシーとロールに関する情報を取得するための以下のエンドポイントを提供します。
5.3.2.1. 権限ポリシー リンクのコピーリンクがクリップボードにコピーされました!
RBAC REST API は、Red Hat Developer Hub で権限ポリシーを管理するために、次のエンドポイントをサポートします。
- [GET] /api/permission/policies
すべてのユーザーの権限ポリシーリストを返します。
応答例 (JSON)
[ { "entityReference": "role:default/test", "permission": "catalog-entity", "policy": "read", "effect": "allow" }, { "entityReference": "role:default/test", "permission": "catalog.entity.create", "policy": "use", "effect": "allow" }, ]- [GET] /api/permission/policies/{kind}/{namespace}/{name}
指定されたエンティティー参照に関連する権限ポリシーを返します。
Expand 表5.1 要求パラメーター 名前 説明 タイプ 要件 kindエンティティーの種類
String
必須
namespaceエンティティーの名前空間
String
必須
nameエンティティーに関連するユーザー名
String
必須
応答例 (JSON)
[ { "entityReference": "role:default/test", "permission": "catalog-entity", "policy": "read", "effect": "allow" }, { "entityReference": "role:default/test", "permission": "catalog.entity.create", "policy": "use", "effect": "allow" } ]- [POST] /api/permission/policies
指定されたエンティティーの権限ポリシーを作成します。
Expand 表5.2 要求パラメーター 名前 説明 タイプ 要件 entityReference名前空間と名前を含むエンティティーの参照値
String
必須
permission権限の種類
String
必須
policy権限の読み取りまたは書き込みポリシー
String
必須
effectポリシーを許可するかどうか
String
必須
要求 の body の例 (JSON)
{ "entityReference": "role:default/test", "permission": "catalog-entity", "policy": "read", "effect": "allow" }応答の例
201 Created- [PUT] /api/permission/policies/{kind}/{namespace}/{name}
指定されたエンティティーの権限ポリシーを更新します。
要求パラメーター
要求の body には、
oldPolicyオブジェクトとnewPolicyオブジェクトが含まれています。Expand 名前 説明 タイプ 要件 permission権限の種類
String
必須
policy権限の読み取りまたは書き込みポリシー
String
必須
effectポリシーを許可するかどうか
String
必須
要求 の body の例 (JSON)
{ "oldPolicy": { "permission": "catalog-entity", "policy": "read", "effect": "deny" }, "newPolicy": { "permission": "policy-entity", "policy": "read", "effect": "allow" } }応答の例
200- [DELETE] /api/permission/policies/{kind}/{namespace}/{name}?permission={value1}&policy={value2}&effect={value3}
指定されたエンティティーに追加された権限ポリシーを削除します。
Expand 表5.3 要求パラメーター 名前 説明 タイプ 要件 kindエンティティーの種類
String
必須
namespaceエンティティーの名前空間
String
必須
nameエンティティーに関連するユーザー名
String
必須
permission権限の種類
String
必須
policy権限の読み取りまたは書き込みポリシー
String
必須
effectポリシーを許可するかどうか
String
必須
応答の例
204 No Content- [GET] /api/permission/plugins/policies
すべての静的プラグインの権限ポリシーを返します。
応答例 (JSON)
[ { "pluginId": "catalog", "policies": [ { "permission": "catalog-entity", "policy": "read" }, { "permission": "catalog.entity.create", "policy": "create" }, { "permission": "catalog-entity", "policy": "delete" }, { "permission": "catalog-entity", "policy": "update" }, { "permission": "catalog.location.read", "policy": "read" }, { "permission": "catalog.location.create", "policy": "create" }, { "permission": "catalog.location.delete", "policy": "delete" } ] }, ... ]
5.3.2.2. ロール リンクのコピーリンクがクリップボードにコピーされました!
RBAC REST API は、Red Hat Developer Hub でロールを管理するために、次のエンドポイントをサポートします。
- [GET] /api/permission/roles
Developer Hub のすべてのロールを返します。
応答例 (JSON)
[ { "memberReferences": ["user:default/pataknight"], "name": "role:default/guests" }, { "memberReferences": [ "group:default/janus-authors", "user:default/matt" ], "name": "role:default/rbac_admin" } ]- [GET] /api/permission/roles/{kind}/{namespace}/{name}
Developer Hub でロールを作成します。
Expand 表5.4 要求パラメーター 名前 説明 タイプ 要件 body作成される新しいロールの
memberReferences、group、namespace、name。要求の body
必須
要求 の body の例 (JSON)
{ "memberReferences": ["group:default/test"], "name": "role:default/test_admin" }応答の例
201 Created- [PUT] /api/permission/roles/{kind}/{namespace}/{name}
Developer Hub のロールの
memberReferences、kind、namespace、またはnameを更新します。要求パラメーター
要求の body には、
oldRoleオブジェクトとnewRoleオブジェクトが含まれています。Expand 名前 説明 タイプ 要件 body作成される新しいロールの
memberReferences、group、namespace、name。要求の body
必須
要求 の body の例 (JSON)
{ "oldRole": { "memberReferences": ["group:default/test"], "name": "role:default/test_admin" }, "newRole": { "memberReferences": ["group:default/test", "user:default/test2"], "name": "role:default/test_admin" } }応答の例
200 OK- [DELETE] /api/permission/roles/{kind}/{namespace}/{name}?memberReferences=<VALUE>
Developer Hub のロールから、指定されたユーザーまたはグループを削除します。
Expand 表5.5 要求パラメーター 名前 説明 タイプ 要件 kindエンティティーの種類
String
必須
namespaceエンティティーの名前空間
String
必須
nameエンティティーに関連するユーザー名
String
必須
memberReferences関連するグループの情報
String
必須
応答の例
204- [DELETE] /api/permission/roles/{kind}/{namespace}/{name}
Developer Hub から、指定されたロールを削除します。
Expand 表5.6 要求パラメーター 名前 説明 タイプ 要件 kindエンティティーの種類
String
必須
namespaceエンティティーの名前空間
String
必須
nameエンティティーに関連するユーザー名
String
必須
応答の例
204