This documentation is for a release that is no longer maintained
See documentation for the latest supported version.授权
在 Red Hat Developer Hub 中使用基于角色的访问控制(RBAC)配置授权
摘要
第 1 章 Red Hat Developer Hub 中的基于角色的访问控制(RBAC)
基于角色的访问控制是一种安全范式,限制对授权用户的访问。此功能包括定义具有特定权限的角色,然后将这些角色分配给用户。
Red Hat Developer Hub 使用 RBAC 来提高平台中的权限系统。Developer Hub 中的 RBAC 功能引入了管理员角色,并通过促进有效的访问控制来利用机构结构,包括团队、组和用户。
第 2 章 Red Hat Developer Hub 中的权限策略
Red Hat Developer Hub 中的权限策略是一组规则,用于管理对资源或功能的访问。这些策略基于其角色来说明授予用户的授权级别。实施权限策略,以维护给定环境中的安全性和保密性。
您可以在 Developer Hub 中定义以下类型的权限:
- 资源类型
- 基本的
两种权限类型之间的区别取决于权限是否包含定义的资源类型。
您可以使用关联的资源类型或权限名称来定义资源类型权限,如下例所示:
资源类型权限定义示例
p, role:default/myrole, catalog.entity.read, read, allow g, user:default/myuser, role:default/myrole p, role:default/another-role, catalog-entity, read, allow g, user:default/another-user, role:default/another-role
p, role:default/myrole, catalog.entity.read, read, allow
g, user:default/myuser, role:default/myrole
p, role:default/another-role, catalog-entity, read, allow
g, user:default/another-user, role:default/another-role
您可以使用权限名称在 Developer Hub 中定义基本权限,如下例所示:
基本权限定义示例
p, role:default/myrole, catalog.entity.create, create, allow g, user:default/myuser, role:default/myrole
p, role:default/myrole, catalog.entity.create, create, allow
g, user:default/myuser, role:default/myrole
Developer Hub 支持以下权限策略:
- 目录权限
Name | 资源类型 | policy | 描述 |
---|---|---|---|
|
| 读取 | 允许从目录中读取用户或角色 |
| create | 允许用户或角色创建目录实体,包括在目录中注册现有组件 | |
|
| update | 允许用户或角色从目录中刷新单个或多个实体 |
|
| delete | 允许用户或角色从目录中删除单个或多个实体 |
| 读取 | 允许用户或角色从目录中读取单个或多个位置 | |
| create | 允许用户或角色在目录中创建位置 | |
| delete | 允许用户或角色从目录中删除位置 |
- Scaffolder 权限
Name | 资源类型 | policy | 描述 |
---|---|---|---|
|
| 允许从模板执行操作 | |
|
| 读取 | 允许用户或角色从模板中读取单个或多个参数 |
|
| 读取 | 允许用户或角色从模板读取单个或多个步骤 |
| create | 允许用户或角色触发软件模板,以创建新的构建程序任务 | |
| 允许用户或角色取消当前运行的构建程序任务 | ||
| 读取 | 允许用户或角色读取所有构建器任务及其关联的事件和日志 |
- RBAC 权限
Name | 资源类型 | policy | 描述 |
---|---|---|---|
|
| 读取 | 允许用户或角色读权限策略和角色 |
|
| create | 允许用户或角色创建单个或多个权限策略和角色 |
|
| update | 允许用户或角色更新单个或多个权限策略和角色 |
|
| delete | 允许用户或角色删除一个或多个权限策略和角色 |
- Kubernetes 权限
Name | 资源类型 | policy | 描述 |
---|---|---|---|
| 允许用户或角色访问代理端点 |
- OCM 权限
Name | 资源类型 | policy | 描述 |
---|---|---|---|
| 读取 | 允许从 OCM 插件读取用户或角色 | |
| 读取 | 允许用户或角色读取 OCM 插件中的集群信息 |
- 拓扑权限
Name | 资源类型 | policy | 描述 |
---|---|---|---|
| 读取 | 允许用户或角色查看拓扑插件 | |
| 允许用户或角色访问代理端点,允许他们读取 RHDH 中的 pod 日志和事件 |
2.1. 权限策略配置
在 Red Hat Developer Hub 中配置权限策略的方法有两种,包括:
- 配置权限策略管理员
- 配置外部文件中定义的权限策略
2.1.1. 配置权限策略管理员
Developer Hub 中用户和组的权限策略由权限策略管理员管理。只有权限策略管理员才能访问基于角色的访问控制 REST API。
配置策略管理员的目的是启用特定、有限的经过身份验证的用户来访问 RBAC REST API。权限策略在 policy.csv
文件中定义,该文件在 app-config-rhdh
ConfigMap 中被引用。OpenShift 平台管理员或集群管理员可以执行此任务,并可访问部署 Red Hat Developer Hub 的命名空间。
您可以通过配置 app-config.yaml
文件来启用权限策略管理员,如下所示:
permission: enabled: true rbac: admin: users: - name: user:default/joeuser
permission:
enabled: true
rbac:
admin:
users:
- name: user:default/joeuser
权限策略角色(role:default/rbac_admin
)在 Developer Hub 中是一个默认角色,在创建时包括一些权限,如创建、读取、更新和删除权限策略/角色,以及从目录中读取。
如果默认权限不适合您的要求,您可以使用相关权限策略根据您的要求定义新的管理员角色。另外,您可以使用可选的 superUsers
配置值,该值在 Developer Hub 间授予不受限制的权限。
您可以在 app-config.yaml
文件中设置 superUsers
,如下所示:
# ... permission: enabled: true rbac: admin: superUsers: - name: user:default/joeuser # ...
# ...
permission:
enabled: true
rbac:
admin:
superUsers:
- name: user:default/joeuser
# ...
2.1.2. 配置外部文件中定义的权限策略
您可以在启动 Red Hat Developer Hub 前配置权限策略。如果在外部文件中定义了权限策略,您可以在 Developer Hub 中导入同一文件。您必须使用以下 Casbin 规则格式定义权限策略:
--- `p, <ROLE>, <PERMISSION_NAME or PERMISSION_RESOURCE_TYPE>, <PERMISSION_POLICY_ACTION>, <ALLOW or DENY>` ---
---
`p, <ROLE>, <PERMISSION_NAME or PERMISSION_RESOURCE_TYPE>, <PERMISSION_POLICY_ACTION>, <ALLOW or DENY>`
---
您可以使用以下 Casbin 规则格式定义角色:
--- `g, <USER or GROUP>, <ROLE>` ---
---
`g, <USER or GROUP>, <ROLE>`
---
有关 Casbin 规则格式的详情,请参考 Casbin 规则的基本。
以下是权限策略配置示例:
--- `p, role:default/guests, catalog-entity, read, allow`
---
`p, role:default/guests, catalog-entity, read, allow`
p, role:default/guests, catalog.entity.create, create, allow
g, user:default/<USER_TO_ROLE>, role:default/guests
g, group:default/<GROUP_TO_ROLE>, role:default/guests
--
如果定义的权限不包含与其关联的操作,请添加 use
作为策略。请参见以下示例:
--- `p, role:default/guests, kubernetes.proxy, use, allow` ---
---
`p, role:default/guests, kubernetes.proxy, use, allow`
---
您可以在 app-config.yaml
文件中定义 policy.csv
文件路径:
permission: enabled: true rbac: policies-csv-file: /some/path/rbac-policy.csv
permission:
enabled: true
rbac:
policies-csv-file: /some/path/rbac-policy.csv
您可以使用可选配置值来启用重新载入 CSV 文件,而无需重启 Developer Hub 实例。
在 app-config.yaml
文件中设置 policyFileReload
选项的值:
# ... permission: enabled: true rbac: policies-csv-file: /some/path/rbac-policy.csv policyFileReload: true # ...
# ...
permission:
enabled: true
rbac:
policies-csv-file: /some/path/rbac-policy.csv
policyFileReload: true
# ...
2.1.2.1. 将 policy.csv
文件挂载到 Developer Hub Helm Chart 中
当使用 Helm Chart 部署 Red Hat Developer Hub 时,您必须通过将 policy.csv
文件挂载到 Developer Hub Helm Chart 来定义 policy.csv 文件。
您可以通过创建 configMap
并挂载它,将 policy.csv
文件添加到 Developer Hub Helm Chart 中。
先决条件
- 使用 OpenShift Container Platform Web 控制台登录到 OpenShift Container Platform 帐户。
- Red Hat Developer Hub 使用 Helm Chart 安装并进行部署。
流程
在 OpenShift Container Platform 中,创建一个 ConfigMap 来保存策略,如下例所示:
ConfigMap
示例kind: ConfigMap apiVersion: v1 metadata: name: rbac-policy namespace: rhdh data: rbac-policy.csv: | p, role:default/guests, catalog-entity, read, allow p, role:default/guests, catalog.entity.create, create, allow g, user:default/<YOUR_USER>, role:default/guests
kind: ConfigMap apiVersion: v1 metadata: name: rbac-policy namespace: rhdh data: rbac-policy.csv: | p, role:default/guests, catalog-entity, read, allow p, role:default/guests, catalog.entity.create, create, allow g, user:default/<YOUR_USER>, role:default/guests
Copy to Clipboard Copied! - 在 Developer Hub Helm Chart 中,进入 Root Schema → Backstage chart schema → Backstage parameters → Backstage container additional volume mount。
选择 Add Backstage 容器附加卷挂载 并添加以下值:
-
mountPath:
opt/app-root/src/rbac
-
名称 :
rbac-policy
-
mountPath:
将 RBAC 策略添加到 Developer Hub Helm Chart 中的 Backstage 容器 附加卷:
-
名称 :
rbac-policy
configMap
-
defaultMode:
420
-
名称 :
rbac-policy
-
defaultMode:
-
名称 :
更新
app-config.yaml
文件中的策略路径,如下所示:app-config.yaml
文件示例permission: enabled: true rbac: policies-csv-file: ./rbac/rbac-policy.csv
permission: enabled: true rbac: policies-csv-file: ./rbac/rbac-policy.csv
Copy to Clipboard Copied!
第 3 章 Red Hat Developer Hub 中的条件策略
Red Hat Developer Hub 中的权限框架提供了由 RBAC 后端插件支持的条件(backstage-plugin-rbac-backend
)。条件作为 RBAC 后端插件提供的 Developer Hub 资源的内容过滤器。
RBAC 后端 API 存储分配给数据库中的角色的条件。当您请求访问 frontend 资源时,RBAC 后端 API 会搜索对应的条件,并使用其插件 ID 将它们委派给适当的插件。如果您分配到具有不同条件的多个角色,则 RBAC 后端将使用 anyOf
条件合并条件。
- 条件条件条件
Developer Hub 中的条件是带有规则和参数的简单条件。但是,条件也可以包含参数或按条件条件组合的参数数组。支持的条件条件包括:
-
allOf
: 确保阵列中的所有条件都必须为 true,才能满足组合条件。 -
anyOf
: 确保该阵列中至少需要满足组合条件的条件。 -
Not : 确保其中的条件不能满足组合条件。
-
- 条件对象
该插件指定条件支持的参数。您可以从 RBAC API 端点访问条件对象模式,以了解如何构建条件 JSON 对象,然后由 RBAC 后端插件 API 使用该对象。
条件对象包含以下参数:
表 3.1. 条件对象参数 参数 类型 描述 result
字符串
始终值为
CONDITIONAL
roleEntityRef
字符串
对 RBAC 角色的字符串实体引用,如
role:default/dev
pluginId
字符串
对应的插件 ID,如
目录
permissionMapping
字符串数组
数组权限操作,如
['read', 'update', 'delete']
resourceType
字符串
插件提供的资源类型,如
catalog-entity
conditions
JSON
带有参数或数组参数的条件 JSON,按条件加入
3.1. 条件策略定义
您可以访问 Red Hat Developer Hub 中条件策略的 API 端点。例如,要检索可用的条件规则,这有助于定义这些策略,您可以访问 GET [api/plugins/condition-rules]
端点。
api/plugins/condition-rules
返回条件参数 schemas,例如:
[ { "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> ]
[
{
"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>
]
RBAC 后端 API 根据前面的条件模式构造一个条件 JSON 对象。
3.1.1. 条件策略示例
在 Red Hat Developer Hub 中,您可以使用或没有条件定义条件策略。您可以使用以下示例根据您的用例定义条件:
- 没有条件的条件
只有用户是所有者组的成员时,请考虑没有条件显示目录的条件。要添加此条件,您可以使用目录插件模式
IS_ENTITY_OWNER
,如下所示:没有条件的示例
{ "rule": "IS_ENTITY_OWNER", "resourceType": "catalog-entity", "params": { "claims": ["group:default/team-a"] } }
{ "rule": "IS_ENTITY_OWNER", "resourceType": "catalog-entity", "params": { "claims": ["group:default/team-a"] } }
Copy to Clipboard Copied! 在上例中,唯一使用的条件参数是
claims
,其中包含用户或组实体引用的列表。您可以通过添加额外的参数将前面的示例条件应用到 RBAC REST API,如下所示:
{ "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"] } } }
{ "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"] } } }
Copy to Clipboard Copied! - 具有条件的条件
考虑条件条件,它只有在用户是所有者组成员或显示所有目录用户组的列表时才会显示目录。
要添加条件,您可以在条件中添加另一个规则作为
IS_ENTITY_KIND
,如下所示:带有条件的条件示例
{ "anyOf": [ { "rule": "IS_ENTITY_OWNER", "resourceType": "catalog-entity", "params": { "claims": ["group:default/team-a"] } }, { "rule": "IS_ENTITY_KIND", "resourceType": "catalog-entity", "params": { "kinds": ["Group"] } } ] }
{ "anyOf": [ { "rule": "IS_ENTITY_OWNER", "resourceType": "catalog-entity", "params": { "claims": ["group:default/team-a"] } }, { "rule": "IS_ENTITY_KIND", "resourceType": "catalog-entity", "params": { "kinds": ["Group"] } } ] }
Copy to Clipboard Copied! 注意不支持在创建过程中运行并行条件。因此,请考虑根据可用的标准定义嵌套条件策略。
嵌套条件示例
{ "anyOf": [ { "rule": "IS_ENTITY_OWNER", "resourceType": "catalog-entity", "params": { "claims": ["group:default/team-a"] } }, { "rule": "IS_ENTITY_KIND", "resourceType": "catalog-entity", "params": { "kinds": ["Group"] } } ], "not": { "rule": "IS_ENTITY_KIND", "resourceType": "catalog-entity", "params": { "kinds": ["Api"] } } }
{ "anyOf": [ { "rule": "IS_ENTITY_OWNER", "resourceType": "catalog-entity", "params": { "claims": ["group:default/team-a"] } }, { "rule": "IS_ENTITY_KIND", "resourceType": "catalog-entity", "params": { "kinds": ["Group"] } } ], "not": { "rule": "IS_ENTITY_KIND", "resourceType": "catalog-entity", "params": { "kinds": ["Api"] } } }
Copy to Clipboard Copied! 您可以通过添加额外的参数将前面的示例条件应用到 RBAC REST API,如下所示:
{ "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"] } } ] } }
{ "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"] } } ] } }
Copy to Clipboard Copied!
以下示例可用于 Developer Hub 插件。这些示例可帮助您确定如何定义条件策略:
为 Keycloak 插件定义的条件策略
{ "result": "CONDITIONAL", "roleEntityRef": "role:default/developer", "pluginId": "catalog", "resourceType": "catalog-entity", "permissionMapping": ["update", "delete"], "conditions": { "not": { "rule": "HAS_ANNOTATION", "resourceType": "catalog-entity", "params": { "annotation": "keycloak.org/realm", "value": "<YOUR_REALM>" } } } }
{
"result": "CONDITIONAL",
"roleEntityRef": "role:default/developer",
"pluginId": "catalog",
"resourceType": "catalog-entity",
"permissionMapping": ["update", "delete"],
"conditions": {
"not": {
"rule": "HAS_ANNOTATION",
"resourceType": "catalog-entity",
"params": { "annotation": "keycloak.org/realm", "value": "<YOUR_REALM>" }
}
}
}
前面的 Keycloak 插件示例可防止 role:default/developer
中的用户更新或删除在 Keycloak 插件中放入目录的用户。
在上例中,注解 keycloak.org/realm
需要 < YOUR_REALM
> 的值。
为 Quay 插件定义的条件策略
{ "result": "CONDITIONAL", "roleEntityRef": "role:default/developer", "pluginId": "scaffolder", "resourceType": "scaffolder-action", "permissionMapping": ["use"], "conditions": { "not": { "rule": "HAS_ACTION_ID", "resourceType": "scaffolder-action", "params": { "actionId": "quay:create-repository" } } } }
{
"result": "CONDITIONAL",
"roleEntityRef": "role:default/developer",
"pluginId": "scaffolder",
"resourceType": "scaffolder-action",
"permissionMapping": ["use"],
"conditions": {
"not": {
"rule": "HAS_ACTION_ID",
"resourceType": "scaffolder-action",
"params": { "actionId": "quay:create-repository" }
}
}
}
前面的 Quay 插件示例可防止角色 role:default/developer
使用 Quay builder 操作。请注意,permissionMapping
包含使用 ,表示
scaffolder-action
资源类型权限没有权限策略。
有关 Red Hat Developer Hub 中权限的更多信息,请参阅 第 2 章 Red Hat Developer Hub 中的权限策略。
第 4 章 使用 Red Hat Developer Hub Web UI 管理基于角色的访问控制(RBAC)
管理员可以使用 Developer Hub Web 界面(Web UI)为单独的用户或组分配特定的角色和权限。分配角色可确保在 Developer Hub 中控制资源和功能的访问。
使用 Developer Hub 中的管理员角色,您可以为用户和组分配权限,允许用户或组使用 Developer Hub Web UI 查看、创建、修改和删除角色。
要访问 Web UI 中的 RBAC 功能,您必须安装并配置 @janus-idp/backstage-plugin-rbac
插件。有关安装动态插件的更多信息,请参阅在 Red Hat Developer Hub 中配置插件。
安装 @janus-idp/backstage-plugin-rbac
插件后,Administration 选项会出现在侧边栏的底部。当点 Administration 时,RBAC 选项卡默认会出现,显示 Developer Hub 中创建的所有现有角色。在 RBAC 选项卡中,您还可以查看用户、组以及与角色关联的权限策略总数。您还可以使用 Actions 列编辑或删除角色。
4.1. 在 Red Hat Developer Hub Web UI 中创建角色
您可以使用 Web UI 在 Red Hat Developer Hub 中创建角色。
先决条件
- 在 Developer Hub 中具有管理员角色。
-
您已在 Developer Hub 中安装了
@janus-idp/backstage-plugin-rbac
插件。如需更多信息,请参阅在 Red Hat Developer Hub 中配置插件。 - 您已配置了所需的权限策略。如需更多信息,请参阅 第 2.1 节 “权限策略配置”。
流程
进入 Developer Hub 中边栏底部的 管理。
此时会出现 RBAC 选项卡,在 Developer Hub 中显示所有创建的角色。
- (可选)点击任何角色查看 OVERVIEW 页面上的角色信息。
- 单击 CREATE 以创建角色。
- 在给定字段中输入角色的名称和描述,然后单击 NEXT。
- 使用搜索字段添加用户和组,然后单击 NEXT。
- 从 Add permission policies 部分中的下拉列表中,选择 Plugin 和 Permission。
- 选择或清除您要在 Add permissions policies 部分中设置的 Policy,然后单击 NEXT。
- 查看 Review and create 部分中的添加的信息。
- 点 CREATE。
验证
创建的角色会出现在 RBAC 选项卡中可用的列表中。
4.2. 在 Red Hat Developer Hub Web UI 中编辑角色
您可以使用 Web UI 在 Red Hat Developer Hub 中编辑角色。
从 policy.csv
或 ConfigMap 文件生成的策略无法使用 Developer Hub Web UI 编辑或删除。
先决条件
- 在 Developer Hub 中具有管理员角色。
-
您已在 Developer Hub 中安装了
@janus-idp/backstage-plugin-rbac
插件。如需更多信息,请参阅在 Red Hat Developer Hub 中配置插件。 - 您已配置了所需的权限策略。如需更多信息,请参阅 第 2.1 节 “权限策略配置”。
- 您要编辑的角色在 Developer Hub 中创建。
流程
进入 Developer Hub 中边栏底部的 管理。
此时会出现 RBAC 选项卡,在 Developer Hub 中显示所有创建的角色。
- (可选)点击任何角色查看 OVERVIEW 页面上的角色信息。
- 选择您要编辑的角色的编辑图标。
- 编辑角色的详细信息,如名称、描述、用户和组以及权限策略,然后单击 NEXT。
- 检查角色的编辑详细信息,然后单击 SAVE。
编辑角色后,您可以查看角色的 OVERVIEW 页面上 角色的 编辑详情。您还可以使用 OVERVIEW 页面中的编辑图标来编辑角色的用户和组或权限。
4.3. 删除 Red Hat Developer Hub Web UI 中的角色
您可以使用 Web UI 删除 Red Hat Developer Hub 中的角色。
从 policy.csv
或 ConfigMap 文件生成的策略无法使用 Developer Hub Web UI 编辑或删除。
先决条件
- 在 Developer Hub 中具有管理员角色。
-
您已在 Developer Hub 中安装了
@janus-idp/backstage-plugin-rbac
插件。如需更多信息,请参阅在 Red Hat Developer Hub 中配置插件。 - 您已配置了所需的权限策略。如需更多信息,请参阅 第 2.1 节 “权限策略配置”。
- 要删除的角色在 Developer Hub 中创建。
流程
进入 Developer Hub 中边栏底部的 管理。
此时会出现 RBAC 选项卡,在 Developer Hub 中显示所有创建的角色。
- (可选)点击任何角色查看 OVERVIEW 页面上的角色信息。
从您要删除的角色的 Actions 列中选择 delete 图标。
删除此角色? 弹出会出现在屏幕上。
- 点 DELETE。
第 5 章 基于角色的访问控制(RBAC) REST API
Red Hat Developer Hub 提供 RBAC REST API,可用于管理 Developer Hub 中的权限和角色。此 API 支持您促进和自动维护 Developer Hub 权限策略和角色。
使用 RBAC REST API,您可以执行以下操作:
- 检索有关所有权限策略或特定权限策略或角色的信息
- 创建、更新或删除权限策略或角色
- 检索有关静态插件的权限策略信息
RBAC REST API 需要以下组件:
- 授权
RBAC REST API 需要允许用户角色的 Bearer 令牌授权。出于开发目的,您可以在浏览器中访问 Web 控制台。当您在网络请求列表中刷新令牌请求时,您可以在响应 JSON 中找到令牌。
Authorization: Bearer $token
例如,在 Developer Hub Homepage 中,导航到 Network 选项卡并搜索
query?term=
网络调用。或者,您也可以前往 Catalog 页面,再选择任何 Catalog API 网络调用来获取 Bearer 令牌。- 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 端点(如
/api/permission/policies/[kind]/[namespace]/[name
])用于指定kind
、namespace
和name
,是附加到基本 URL 的 URI,以访问对应的资源。/api/permission/policies/[kind]/[namespace]/[name]
端点的请求 URL 示例:http://localhost:7007/api/permission/policies/user/default/johndoe
注意如果至少为一个权限分配给
user:default/johndoe
,则前面提到的示例请求 URL 如果以有效授权令牌在GET
响应中发送,则前面提到的示例请求 URL 会返回结果。但是,如果权限仅分配给角色,则示例请求 URL 不会返回输出。- 请求数据
RBAC REST API 中的 HTTP
POST
请求可能需要带有与请求相关的数据的 JSON 请求正文。http://localhost:7007/api/permission/policies
的POST
请求 URL 和 JSON 请求正文数据示例:{ "entityReference": "role:default/test", "permission": "catalog-entity", "policy": "delete", "effect": "allow" }
{ "entityReference": "role:default/test", "permission": "catalog-entity", "policy": "delete", "effect": "allow" }
Copy to Clipboard Copied! - HTTP 状态代码
RBAC REST API 支持以下 HTTP 状态代码来返回作为响应:
-
200
OK :请求成功。 -
201
created :请求会导致成功创建新资源。 -
204
no Content: 请求成功,但没有要在响应有效负载中发送的额外内容。 -
400
bad Request: 输入错误以及请求 -
401
未授权:请求的资源缺少有效的身份验证 -
403
forbidden: 禁止授权请求 -
404
not Found: could not find requested resource -
409
冲突:请求与当前状态和目标资源冲突
-
- Source
使用 RBAC 插件创建的每个权限策略和角色都与源关联,以维护插件中的数据一致性。您可以根据以下指定源信息操作权限策略和角色:
- CSV 文件
- 配置文件
- REST API
- Legacy
管理源自 CSV 文件和 REST API 的角色和权限策略涉及根据其初始源信息直接修改。
配置文件与 RBAC 插件提供的默认
role:default/rbac_admin
角色相关。默认角色具有创建、读取、更新和删除权限策略或角色以及读取目录实体的权限。注意如果您的管理要求默认权限不足,您可以创建具有所需权限策略的自定义 admin 角色。
传统源适用于在 RBAC 后端插件版本
2.1.3
之前定义的策略和角色,并且是源位置选项中最严格的限制。您必须更新旧源中的权限和角色,以使用 REST API 或 CSV 文件源。您可以使用
GET
请求来查询角色和策略,并根据需要确定源信息。
5.1. 使用 REST 客户端或 curl 工具使用 RBAC REST API 发送请求
RBAC REST API 可让您与 Developer Hub 中的权限策略和角色交互,而无需使用用户界面。您可以使用任何 REST 客户端或 curl 实用程序发送 RBAC REST API 请求。
先决条件
- 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 方法:设置为
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 正文
请求示例 :
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": {"rule": "IS_ENTITY_OWNER", "resourceType": "catalog-entity", "params": {"claims": ["group:default/janus-authors"]}}}' -H "Content-Type: application/json" -H "Authorization: Bearer $token" -v
- 执行请求并检查响应。
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" } ]
[ { "memberReferences": ["user:default/username"], "name": "role:default/guests" }, { "memberReferences": [ "group:default/groupname", "user:default/username" ], "name": "role:default/rbac_admin" } ]
Copy to Clipboard Copied! - [GET] /api/permission/roles/{kind}/{namespace}/{name}
返回 Developer Hub 中单个角色的信息。
响应示例(JSON)
[ { "memberReferences": [ "group:default/groupname", "user:default/username" ], "name": "role:default/rbac_admin" } ]
[ { "memberReferences": [ "group:default/groupname", "user:default/username" ], "name": "role:default/rbac_admin" } ]
Copy to Clipboard Copied! - [POST] /api/permission/roles/{kind}/{namespace}/{name}
在 Developer Hub 中创建角色。
表 5.1. 请求参数 名称 描述 类型 存在 正文(body)
memberReferences
、组
、namespace
并将新角色命名为要创建的新角色。请求正文
必填
请求正文示例(JSON)
{ "memberReferences": ["group:default/test"], "name": "role:default/test_admin" }
{ "memberReferences": ["group:default/test"], "name": "role:default/test_admin" }
Copy to Clipboard Copied! 响应示例
201 Created
201 Created
Copy to Clipboard Copied! - [PUT] /api/permission/roles/{kind}/{namespace}/{name}
为 Developer Hub 中的角色更新
memberReferences
、类型、namespace
或name
。请求参数
请求正文包含
oldRole
和newRole
对象:Name 描述 类型 存在 正文(body)
memberReferences
、组
、namespace
并将新角色命名为要创建的新角色。请求正文
必填
请求正文示例(JSON)
{ "oldRole": { "memberReferences": ["group:default/test"], "name": "role:default/test_admin" }, "newRole": { "memberReferences": ["group:default/test", "user:default/test2"], "name": "role:default/test_admin" } }
{ "oldRole": { "memberReferences": ["group:default/test"], "name": "role:default/test_admin" }, "newRole": { "memberReferences": ["group:default/test", "user:default/test2"], "name": "role:default/test_admin" } }
Copy to Clipboard Copied! 响应示例
200 OK
200 OK
Copy to Clipboard Copied! - [DELETE] /api/permission/roles/{kind}/{namespace}/{name}?memberReferences=<VALUE>
从 Developer Hub 中的角色中删除指定的用户或组。
表 5.2. 请求参数 名称 描述 类型 存在 kind
实体的类型
字符串
必填
namespace
实体的命名空间
字符串
必填
name
实体的名称
字符串
必填
memberReferences
关联的组信息
字符串
必填
响应示例
204
204
Copy to Clipboard Copied! - [DELETE] /api/permission/roles/{kind}/{namespace}/{name}
从 Developer Hub 删除指定的角色。
表 5.3. 请求参数 名称 描述 类型 存在 kind
实体的类型
字符串
必填
namespace
实体的命名空间
字符串
必填
name
实体的名称
字符串
必填
响应示例
204
204
Copy to Clipboard Copied!
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" } }, ]
[ { "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" } }, ]
Copy to Clipboard Copied! - [GET] /api/permission/policies/{kind}/{namespace}/{name}
返回与指定实体引用相关的权限策略。
表 5.4. 请求参数 名称 描述 类型 存在 kind
实体的类型
字符串
必填
namespace
实体的命名空间
字符串
必填
name
与实体相关的名称
字符串
必填
响应示例(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" } } ]
[ { "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" } } ]
Copy to Clipboard Copied! - [POST] /api/permission/policies
为指定实体创建权限策略。
表 5.5. 请求参数 名称 描述 类型 存在 entityReference
实体的引用值,包括
类型
、namespace
和name
字符串
必填
权限
特定插件、资源类型或名称的权限
字符串
必填
policy
权限的策略操作,如创建、
读取
、更新
、删除
或使用
字符串
必填
effect
表示允许或不允许策略
字符串
必填
请求正文示例(JSON)
[ { "entityReference": "role:default/test", "permission": "catalog-entity", "policy": "read", "effect": "allow" } ]
[ { "entityReference": "role:default/test", "permission": "catalog-entity", "policy": "read", "effect": "allow" } ]
Copy to Clipboard Copied! 响应示例
201 Created
201 Created
Copy to Clipboard Copied! - [PUT] /api/permission/policies/{kind}/{namespace}/{name}
更新指定实体的权限策略。
请求参数
请求正文包含
oldPolicy
和newPolicy
对象:Name 描述 类型 存在 权限
特定插件、资源类型或名称的权限
字符串
必填
policy
权限的策略操作,如创建、
读取
、更新
、删除
或使用
字符串
必填
effect
表示允许或不允许策略
字符串
必填
请求正文示例(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" } ] }
{ "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" } ] }
Copy to Clipboard Copied! 响应示例
200
200
Copy to Clipboard Copied! - [DELETE] /api/permission/policies/{kind}/{namespace}/{name}?permission={value1}&policy={value2}&effect={value3}
删除添加到指定实体的权限策略。
表 5.6. 请求参数 名称 描述 类型 存在 kind
实体的类型
字符串
必填
namespace
实体的命名空间
字符串
必填
name
与实体相关的名称
字符串
必填
权限
特定插件、资源类型或名称的权限
字符串
必填
policy
权限的策略操作,如创建、
读取
、更新
、删除
或使用
字符串
必填
effect
表示允许或不允许策略
字符串
必填
响应示例
204 No Content
204 No Content
Copy to Clipboard Copied! - [DELETE] /api/permission/policies/{kind}/{namespace}/{name}
删除添加到指定实体的所有权限策略。
表 5.7. 请求参数 名称 描述 类型 存在 kind
实体的类型
字符串
必填
namespace
实体的命名空间
字符串
必填
name
与实体相关的名称
字符串
必填
响应示例
204 No Content
204 No Content
Copy to Clipboard Copied! - [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" } ] }, ... ]
[ { "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" } ] }, ... ]
Copy to Clipboard Copied!
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> ]
[ { "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> ]
Copy to Clipboard Copied! - [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"] } } ] } }
{ "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"] } } ] } }
Copy to Clipboard Copied! - [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"] } } ] } } ]
[ { "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"] } } ] } } ]
Copy to Clipboard Copied! - [POST] /api/permission/roles/conditions
为指定角色创建条件策略。
表 5.8. 请求参数 名称 描述 类型 存在 result
始终值为
CONDITIONAL
字符串
必填
roleEntityRef
对 RBAC 角色的字符串实体引用,如
role:default/dev
字符串
必填
pluginId
对应的插件 ID,如
目录
字符串
必填
permissionMapping
数组权限操作,如
['read', 'update', 'delete']
字符串数组
必填
resourceType
插件提供的资源类型,如
catalog-entity
字符串
必填
conditions
带有参数或数组参数的条件 JSON,按条件加入
JSON
必填
name
角色的名称
字符串
必填
metadata.description
角色的描述
字符串
选填
请求正文示例(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"] } } }
{ "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"] } } }
Copy to Clipboard Copied! 响应示例(JSON)
{ "id": 1 }
{ "id": 1 }
Copy to Clipboard Copied! - [PUT] /permission/roles/conditions/:id
更新指定 ID 的条件策略。
表 5.9. 请求参数 名称 描述 类型 存在 result
始终值为
CONDITIONAL
字符串
必填
roleEntityRef
对 RBAC 角色的字符串实体引用,如
role:default/dev
字符串
必填
pluginId
对应的插件 ID,如
目录
字符串
必填
permissionMapping
数组权限操作,如
['read', 'update', 'delete']
字符串数组
必填
resourceType
插件提供的资源类型,如
catalog-entity
字符串
必填
conditions
带有参数或数组参数的条件 JSON,按条件加入
JSON
必填
name
角色的名称
字符串
必填
metadata.description
角色的描述
字符串
选填
请求正文示例(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"] } } ] } }
{ "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"] } } ] } }
Copy to Clipboard Copied! 响应示例
200
200
Copy to Clipboard Copied! - [DELETE] /api/permission/roles/conditions/:id
删除指定 ID 的条件策略。
响应示例
204
204
Copy to Clipboard Copied!