如何创建自定义平台角色
目录
1. 概述2. 核心概念3. 技术变更4. 支持的配置方式5. 配置5.1 RoleTemplate YAMLFunctionResource 方式(支持至 v4.5)ClusterRole 聚合方式(v4.2+)customRules 方式5.2 获取 RoleTemplate 生成的 ClusterRoles6. 复制与裁剪(示例)6.1 裁剪系统 RoleTemplate YAML6.2 将 namespace-developer-system 裁剪为审计员角色1. 概述
本文档介绍自定义角色的核心概念及如何配置 RoleTemplate。
2. 核心概念
- RoleTemplate:自定义角色模板,定义角色语义和权限集合,由控制器转换为 ClusterRoles。
- FunctionResource:产品功能使用的 K8s 资源抽象;在 RoleTemplate 中通过
functionResourceRef引用。 - ClusterRole:RBAC 规则集;可通过标签聚合到系统角色中。
- UserBinding:用户与角色/作用域的绑定;控制器根据 UserBinding 生成 RoleBinding/ClusterRoleBinding 以实现最终授权。
NOTE
functionResourceRef的值来自 FunctionResource 的metadata.name。- 显示名称通常存放在
metadata.annotations中,可用于映射 UI 模块。
3. 技术变更
从 ACP v4.3 开始,功能权限逐步从 FunctionResource 迁移到原生 K8s ClusterRole 管理。RoleTemplate 模块权限将通过 ClusterRole 标签聚合到系统角色中。基于 FunctionResource 的管理将在 v4.5 版本废弃。
4. 支持的配置方式
- FunctionResource 方式:按产品模块选择权限,细粒度控制动词。
- ClusterRole 聚合方式(aggregationRules):通过 ClusterRole 标签集中聚合,推荐 v4.2+ 使用。
- customRules:使用原生 K8s RBAC 语法配置权限,规则格式与 ClusterRole
rules相同。
5. 配置
5.1 RoleTemplate YAML
FunctionResource 方式(支持至 v4.5)
FunctionResource 示例:
ClusterRole 聚合方式(v4.2+)
带聚合标签的 ClusterRole 示例:
customRules 方式
RoleTemplate 字段参考(含取值范围):
NOTE
spec.rules 与 spec.aggregationRules 互斥。
系统匹配标签
系统角色聚合标签:
rbac.cpaas.io/aggregate-to-platform-admin: "true"rbac.cpaas.io/aggregate-to-platform-auditor: "true"rbac.cpaas.io/aggregate-to-cluster-admin: "true"rbac.cpaas.io/aggregate-to-project-admin: "true"rbac.cpaas.io/aggregate-to-namespace-admin: "true"rbac.cpaas.io/aggregate-to-namespace-developer: "true"rbac.cpaas.io/aggregate-to-basic-user: "true"
作用域聚合标签:
rbac.cpaas.io/aggregate-to-scope-cluster: "true"rbac.cpaas.io/aggregate-to-scope-project-ns: "true"rbac.cpaas.io/aggregate-to-scope-business-ns: "true"rbac.cpaas.io/aggregate-to-scope-system-ns: "true"rbac.cpaas.io/aggregate-to-scope-kube-public: "true"
NOTE
也支持自定义标签进行聚合。
FunctionResource 字段参考:
NOTE
自定义角色中不允许使用 acp-namespace-resource-manage。
5.2 获取 RoleTemplate 生成的 ClusterRoles
通过标签查询 RoleTemplate 生成的 ClusterRoles:
6. 复制与裁剪(示例)
自定义角色建议复制内置系统模板并裁剪,避免遗漏模块权限。
6.1 裁剪系统 RoleTemplate YAML
步骤:
- 保留必要的 FunctionResources。
- 将动词减少为只读(get/list/watch)。
- 删除未使用模块。
角色示例:无 Secret 权限的开发人员审计员
NOTE
- 自定义角色中不配置命名空间资源管理(FunctionResource:
acp-namespace-resource-manage)。 - 删除用户 Secret 字典(FunctionResource:
acp-user-secret)。 - 所有动词设置为 get/list/watch。
示例 YAML:
6.2 将 namespace-developer-system 裁剪为审计员角色
思路:
- 保持作用域结构(cluster / project-ns / business-ns / system-ns / kube-public)。
- 用审计员标签替换聚合标签(需对应 ClusterRoles 已打标签)。
示例(节选):
NOTE
aggregate-to-namespace-auditor 必须匹配已有 ClusterRoles 的标签,否则请先创建只读 ClusterRole 并添加该标签。