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 ステータスコードをサポートしています。
-
200
OK: 要求は成功しました。 -
201
Created: 要求により、新しいリソースが正常に作成されました。 -
204
No Content: 要求は成功しましたが、応答ペイロードで送信する追加コンテンツはありません。 -
400
Bad Request: 要求に入力エラーがありました。 -
401
Unauthorized: 要求されたリソースに対する有効な認証がありません。 -
403
Forbidden: 要求の承認が拒否されました。 -
404
Not Found: 要求されたリソースは見つかりません。 -
409
Conflict: 要求が、現在の状態およびターゲットリソースと競合しています。
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/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/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}
指定されたエンティティー参照に関連する権限ポリシーを返します。
表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
指定されたエンティティーの権限ポリシーを作成します。
表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
オブジェクトが含まれています。名前 説明 タイプ 要件 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}
指定されたエンティティーに追加された権限ポリシーを削除します。
表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 でロールを作成します。
表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
オブジェクトが含まれています。名前 説明 タイプ 要件 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 のロールから、指定されたユーザーまたはグループを削除します。
表5.5 要求パラメーター 名前 説明 タイプ 要件 kind
エンティティーの種類
String
必須
namespace
エンティティーの名前空間
String
必須
name
エンティティーに関連するユーザー名
String
必須
memberReferences
関連するグループの情報
String
必須
応答の例
204
- [DELETE] /api/permission/roles/{kind}/{namespace}/{name}
Developer Hub から、指定されたロールを削除します。
表5.6 要求パラメーター 名前 説明 タイプ 要件 kind
エンティティーの種類
String
必須
namespace
エンティティーの名前空間
String
必須
name
エンティティーに関連するユーザー名
String
必須
応答の例
204