5.2. サポートされている RBAC REST API エンドポイント
RBAC REST API は、Developer Hub でロール、権限、条件付きポリシーを管理し、ロールとポリシーに関する情報を取得するためのエンドポイントを提供します。
5.2.1. ロール
RBAC REST API は、Red Hat Developer Hub でロールを管理するために、次のエンドポイントをサポートします。
- [GET] /api/permission/roles
Developer Hub のすべてのロールを返します。
応答例 (JSON)
[ { "memberReferences": ["user:default/username"], "name": "role:default/guests" }, { "memberReferences": [ "group:default/groupname", "user:default/username" ], "name": "role:default/rbac_admin" } ]
- [GET] /api/permission/roles/{kind}/{namespace}/{name}
Developer Hub の 1 つのロールに関する情報を返します。
応答例 (JSON)
[ { "memberReferences": [ "group:default/groupname", "user:default/username" ], "name": "role:default/rbac_admin" } ]
- [POST] /api/permission/roles/{kind}/{namespace}/{name}
Developer Hub でロールを作成します。
表5.1 要求パラメーター 名前 説明 型 存在 body
作成される新しいロールの
memberReferences
、group
、namespace
、name
。リクエストの本文
必須
要求の 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 の例 (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.2 要求パラメーター 名前 説明 型 存在 kind
エンティティーの種類
String
必須
namespace
エンティティーの namespace
String
必須
name
エンティティーの名前
String
必須
memberReferences
関連するグループの情報
String
必須
応答の例
204
- [DELETE] /api/permission/roles/{kind}/{namespace}/{name}
Developer Hub から、指定されたロールを削除します。
表5.3 要求パラメーター 名前 説明 型 存在 kind
エンティティーの種類
String
必須
namespace
エンティティーの namespace
String
必須
name
エンティティーの名前
String
必須
応答の例
204
5.2.2. 権限ポリシー
RBAC REST API は、Red Hat Developer Hub で権限ポリシーを管理するために、次のエンドポイントをサポートします。
- [GET] /api/permission/policies
すべてのユーザーの権限ポリシーリストを返します。
応答例 (JSON)
[ { "entityReference": "role:default/test", "permission": "catalog-entity", "policy": "read", "effect": "allow", "metadata": { "source": "csv-file" } }, { "entityReference": "role:default/test", "permission": "catalog.entity.create", "policy": "use", "effect": "allow", "metadata": { "source": "csv-file" } }, ]
- [GET] /api/permission/policies/{kind}/{namespace}/{name}
指定されたエンティティー参照に関連する権限ポリシーを返します。
表5.4 要求パラメーター 名前 説明 型 存在 kind
エンティティーの種類
String
必須
namespace
エンティティーの namespace
String
必須
name
エンティティーに関連する名前
String
必須
応答例 (JSON)
[ { "entityReference": "role:default/test", "permission": "catalog-entity", "policy": "read", "effect": "allow", "metadata": { "source": "csv-file" } }, { "entityReference": "role:default/test", "permission": "catalog.entity.create", "policy": "use", "effect": "allow", "metadata": { "source": "csv-file" } } ]
- [POST] /api/permission/policies
指定されたエンティティーの権限ポリシーを作成します。
表5.5 要求パラメーター 名前 説明 型 存在 entityReference
kind
、namespace
、name
を含むエンティティーの参照値String
必須
permission
特定のプラグイン、リソースタイプ、または名前からの権限
String
必須
policy
権限のポリシーアクション (
create
、read
、update
、delete
、use
など)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
権限のポリシーアクション (
create
、read
、update
、delete
、use
など)String
必須
effect
ポリシーを許可するかどうか
String
必須
要求の body の例 (JSON)
{ "oldPolicy": [ { "permission": "catalog-entity", "policy": "read", "effect": "allow" }, { "permission": "catalog.entity.create", "policy": "create", "effect": "allow" } ], "newPolicy": [ { "permission": "catalog-entity", "policy": "read", "effect": "deny" }, { "permission": "policy-entity", "policy": "read", "effect": "allow" } ] }
応答の例
200
- [DELETE] /api/permission/policies/{kind}/{namespace}/{name}?permission={value1}&policy={value2}&effect={value3}
指定されたエンティティーに追加された権限ポリシーを削除します。
表5.6 要求パラメーター 名前 説明 型 存在 kind
エンティティーの種類
String
必須
namespace
エンティティーの namespace
String
必須
name
エンティティーに関連する名前
String
必須
permission
特定のプラグイン、リソースタイプ、または名前からの権限
String
必須
policy
権限のポリシーアクション (
create
、read
、update
、delete
、use
など)String
必須
effect
ポリシーを許可するかどうか
String
必須
応答の例
204 No Content
- [DELETE] /api/permission/policies/{kind}/{namespace}/{name}
指定されたエンティティーに追加されているすべての権限ポリシーを削除します。
表5.7 要求パラメーター 名前 説明 型 存在 kind
エンティティーの種類
String
必須
namespace
エンティティーの namespace
String
必須
name
エンティティーに関連する名前
String
必須
応答の例
204 No Content
- [GET] /api/permission/plugins/policies
すべての静的プラグインの権限ポリシーを返します。
応答例 (JSON)
[ { "pluginId": "catalog", "policies": [ { "isResourced": true, "permission": "catalog-entity", "policy": "read" }, { "isResourced": false, "permission": "catalog.entity.create", "policy": "create" }, { "isResourced": true, "permission": "catalog-entity", "policy": "delete" }, { "isResourced": true, "permission": "catalog-entity", "policy": "update" }, { "isResourced": false, "permission": "catalog.location.read", "policy": "read" }, { "isResourced": false, "permission": "catalog.location.create", "policy": "create" }, { "isResourced": false, "permission": "catalog.location.delete", "policy": "delete" } ] }, ... ]
5.2.3. 条件付きポリシー
RBAC REST API は、Red Hat Developer Hub で条件付きポリシーを管理するための次のエンドポイントをサポートしています。
- [GET] /api/permission/plugins/condition-rules
Developer Hub で有効になっている利用可能なプラグインの利用可能な条件ルールパラメータースキーマを返します。
応答例 (JSON)
[ { "pluginId": "catalog", "rules": [ { "name": "HAS_ANNOTATION", "description": "Allow entities with the specified annotation", "resourceType": "catalog-entity", "paramsSchema": { "type": "object", "properties": { "annotation": { "type": "string", "description": "Name of the annotation to match on" }, "value": { "type": "string", "description": "Value of the annotation to match on" } }, "required": [ "annotation" ], "additionalProperties": false, "$schema": "http://json-schema.org/draft-07/schema#" } }, { "name": "HAS_LABEL", "description": "Allow entities with the specified label", "resourceType": "catalog-entity", "paramsSchema": { "type": "object", "properties": { "label": { "type": "string", "description": "Name of the label to match on" } }, "required": [ "label" ], "additionalProperties": false, "$schema": "http://json-schema.org/draft-07/schema#" } }, { "name": "HAS_METADATA", "description": "Allow entities with the specified metadata subfield", "resourceType": "catalog-entity", "paramsSchema": { "type": "object", "properties": { "key": { "type": "string", "description": "Property within the entities metadata to match on" }, "value": { "type": "string", "description": "Value of the given property to match on" } }, "required": [ "key" ], "additionalProperties": false, "$schema": "http://json-schema.org/draft-07/schema#" } }, { "name": "HAS_SPEC", "description": "Allow entities with the specified spec subfield", "resourceType": "catalog-entity", "paramsSchema": { "type": "object", "properties": { "key": { "type": "string", "description": "Property within the entities spec to match on" }, "value": { "type": "string", "description": "Value of the given property to match on" } }, "required": [ "key" ], "additionalProperties": false, "$schema": "http://json-schema.org/draft-07/schema#" } }, { "name": "IS_ENTITY_KIND", "description": "Allow entities matching a specified kind", "resourceType": "catalog-entity", "paramsSchema": { "type": "object", "properties": { "kinds": { "type": "array", "items": { "type": "string" }, "description": "List of kinds to match at least one of" } }, "required": [ "kinds" ], "additionalProperties": false, "$schema": "http://json-schema.org/draft-07/schema#" } }, { "name": "IS_ENTITY_OWNER", "description": "Allow entities owned by a specified claim", "resourceType": "catalog-entity", "paramsSchema": { "type": "object", "properties": { "claims": { "type": "array", "items": { "type": "string" }, "description": "List of claims to match at least one on within ownedBy" } }, "required": [ "claims" ], "additionalProperties": false, "$schema": "http://json-schema.org/draft-07/schema#" } } ] } ... <another plugin condition parameter schemas> ]
- [GET] /api/permission/roles/conditions/:id
指定された ID の条件を返します。
応答例 (JSON)
{ "id": 1, "result": "CONDITIONAL", "roleEntityRef": "role:default/test", "pluginId": "catalog", "resourceType": "catalog-entity", "permissionMapping": ["read"], "conditions": { "anyOf": [ { "rule": "IS_ENTITY_OWNER", "resourceType": "catalog-entity", "params": { "claims": ["group:default/team-a"] } }, { "rule": "IS_ENTITY_KIND", "resourceType": "catalog-entity", "params": { "kinds": ["Group"] } } ] } }
- [GET] /api/permission/roles/conditions
全ロールの全条件のリストを返します。
応答例 (JSON)
[ { "id": 1, "result": "CONDITIONAL", "roleEntityRef": "role:default/test", "pluginId": "catalog", "resourceType": "catalog-entity", "permissionMapping": ["read"], "conditions": { "anyOf": [ { "rule": "IS_ENTITY_OWNER", "resourceType": "catalog-entity", "params": { "claims": ["group:default/team-a"] } }, { "rule": "IS_ENTITY_KIND", "resourceType": "catalog-entity", "params": { "kinds": ["Group"] } } ] } } ]
- [POST] /api/permission/roles/conditions
指定されたロールの条件付きポリシーを作成します。
表5.8 要求パラメーター 名前 説明 型 存在 result
常に
CONDITIONAL
の値を持つString
必須
roleEntityRef
RBAC ロールへの文字列エンティティー参照 (
role:default/dev
など)String
必須
pluginId
対応するプラグイン ID (
catalog
など)String
必須
permissionMapping
権限アクションの配列 (
['read', 'update', 'delete']
など)String array
必須
resourceType
プラグインによって提供されるリソースタイプ (
catalog-entity
など)String
必須
conditions
条件によって結合されたパラメーターまたは配列パラメーターを含む条件 JSON
JSON
必須
name
ロールの名前
String
必須
metadata.description
ロールの説明
String
任意
要求の body の例 (JSON)
{ "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/team-a"] } } }
応答例 (JSON)
{ "id": 1 }
- [PUT] /permission/roles/conditions/:id
指定された ID の条件ポリシーを更新します。
表5.9 要求パラメーター 名前 説明 型 存在 result
常に
CONDITIONAL
の値を持つString
必須
roleEntityRef
RBAC ロールへの文字列エンティティー参照 (
role:default/dev
など)String
必須
pluginId
対応するプラグイン ID (
catalog
など)String
必須
permissionMapping
権限アクションの配列 (
['read', 'update', 'delete']
など)String array
必須
resourceType
プラグインによって提供されるリソースタイプ (
catalog-entity
など)String
必須
conditions
条件によって結合されたパラメーターまたは配列パラメーターを含む条件 JSON
JSON
必須
name
ロールの名前
String
必須
metadata.description
ロールの説明
String
任意
要求の body の例 (JSON)
{ "result": "CONDITIONAL", "roleEntityRef": "role:default/test", "pluginId": "catalog", "resourceType": "catalog-entity", "permissionMapping": ["read"], "conditions": { "anyOf": [ { "rule": "IS_ENTITY_OWNER", "resourceType": "catalog-entity", "params": { "claims": ["group:default/team-a"] } }, { "rule": "IS_ENTITY_KIND", "resourceType": "catalog-entity", "params": { "kinds": ["Group"] } } ] } }
応答の例
200
- [DELETE] /api/permission/roles/conditions/:id
指定された ID の条件付きポリシーを削除します。
応答の例
204