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 中单个角色的信息。

响应示例(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)

memberReferencesnamespace 并将新角色命名为要创建的新角色。

请求正文

必填

请求正文示例(JSON)

{
  "memberReferences": ["group:default/test"],
  "name": "role:default/test_admin"
}

响应示例

201 Created

[PUT] /api/permission/roles/{kind}/{namespace}/{name}

为 Developer Hub 中的角色更新 memberReferences、类型、namespacename

请求参数

请求正文包含 oldRolenewRole 对象:

Name描述类型存在

正文(body)

memberReferencesnamespace 并将新角色命名为要创建的新角色。

请求正文

必填

请求正文示例(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

实体的类型

字符串

必填

namespace

实体的命名空间

字符串

必填

name

实体的名称

字符串

必填

memberReferences

关联的组信息

字符串

必填

响应示例

204

[DELETE] /api/permission/roles/{kind}/{namespace}/{name}

从 Developer Hub 删除指定的角色。

表 5.3. 请求参数
名称描述类型存在

kind

实体的类型

字符串

必填

namespace

实体的命名空间

字符串

必填

name

实体的名称

字符串

必填

响应示例

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

实体的类型

字符串

必填

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"
    }
  }
]

[POST] /api/permission/policies

为指定实体创建权限策略。

表 5.5. 请求参数
名称描述类型存在

entityReference

实体的引用值,包括 类型namespacename

字符串

必填

权限

特定插件、资源类型或名称的权限

字符串

必填

policy

权限的策略操作,如创建、读取更新删除 或使用

字符串

必填

effect

表示允许或不允许策略

字符串

必填

请求正文示例(JSON)

[
  {
    "entityReference": "role:default/test",
    "permission": "catalog-entity",
    "policy": "read",
    "effect": "allow"
  }
]

响应示例

201 Created

[PUT] /api/permission/policies/{kind}/{namespace}/{name}

更新指定实体的权限策略。

请求参数

请求正文包含 oldPolicynewPolicy 对象:

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"
    }
  ]
}

响应示例

200

[DELETE] /api/permission/policies/{kind}/{namespace}/{name}?permission={value1}&policy={value2}&effect={value3}

删除添加到指定实体的权限策略。

表 5.6. 请求参数
名称描述类型存在

kind

实体的类型

字符串

必填

namespace

实体的命名空间

字符串

必填

name

与实体相关的名称

字符串

必填

权限

特定插件、资源类型或名称的权限

字符串

必填

policy

权限的策略操作,如创建、读取更新删除 或使用

字符串

必填

effect

表示允许或不允许策略

字符串

必填

响应示例

204 No Content

[DELETE] /api/permission/policies/{kind}/{namespace}/{name}

删除添加到指定实体的所有权限策略。

表 5.7. 请求参数
名称描述类型存在

kind

实体的类型

字符串

必填

namespace

实体的命名空间

字符串

必填

name

与实体相关的名称

字符串

必填

响应示例

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

字符串

必填

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"]
    }
  }
}

响应示例(JSON)

{
  "id": 1
}

[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"]
        }
      }
    ]
  }
}

响应示例

200

[DELETE] /api/permission/roles/conditions/:id

删除指定 ID 的条件策略。

响应示例

204

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.