第 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 ])用于指定 kindnamespacename,是附加到基本 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/policiesPOST 请求 URL 和 JSON 请求正文数据示例:

{
    "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 未授权:请求的资源缺少有效的身份验证
  • 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。

流程

  1. 识别您要向发送请求的相关 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

  2. 执行请求并检查响应。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.