1. RBAC 基础概念

1.1 RBAC 模型定义

基于角色的访问控制(RBAC,Role-Based Access Control)是一种将权限授予角色、再将角色授予用户的访问控制模型。其核心思想是:权限不直接关联用户,而是通过“角色”作为中间层实现逻辑解耦。RBAC 在 1992 年由 David Ferraiolo 和 Richard Kuhn 正式提出,随后被 NIST 标准化为 INCITS 359-2012。

核心原则:用户 → 角色 → 权限,三者形成“用户-角色-权限”的间接映射关系。

1.2 核心要素

要素 定义 示例
用户(User) 访问系统的主体,可以是人、服务账号或自动化进程 zhangsan@company.com、ci-bot
角色(Role) 权限的逻辑集合,代表一类职责或岗位 devops-engineer、readonly-viewer
权限(Permission) 对某个资源执行特定操作的许可 ec2:DescribeInstances、s3:PutObject
会话(Session) 用户激活角色后的临时上下文 用户登录后激活 admin 角色
关键区别:在 RBAC 中,权限变更只需修改角色定义,所有被授予该角色的用户自动继承变更,无需逐个调整用户。

1.3 RBAC 与 ACL 的区别

ACL(访问控制列表)将权限直接绑定到用户或用户组,而 RBAC 通过角色层实现间接授权。下表从多个维度对比两者差异:

对比维度 RBAC ACL
授权粒度 粗粒度到中粒度(角色级) 细粒度(对象级)
管理复杂度 低(角色数量远少于用户数) 高(每个对象维护独立列表)
扩展性 优秀(新增用户只需分配角色) 较差(用户数增长时 ACL 条目爆炸)
典型场景 企业应用、云平台 IAM、Kubernetes RBAC 文件系统权限、网络设备 ACL
权限继承 支持(角色层级继承) 不支持(扁平结构)
审计难度 低(通过角色追溯权限来源) 高(需要遍历所有 ACL 条目)
常见误区:ACL 中的“用户组”并非角色。用户组只是用户的集合,不携带权限语义;而角色是权限的集合,具有明确的业务含义。

1.4 RBAC 模型结构图

下图展示了 RBAC 的核心关系:用户通过角色获得权限,权限由操作和资源组合定义。

RBAC 核心模型结构 用户 (User) 角色 (Role) 权限 (Permission) 分配 授予 操作 (Action) 资源 (Resource) 会话 (Session) 激活 临时关联 说明: 用户通过会话激活角色,角色包含一组权限;每个权限由“操作 + 资源”二元组定义。 RBAC 的核心优势在于权限变更只需修改角色定义,所有关联用户自动生效。

1.5 RBAC 与 ACL 的架构对比图

下图从系统架构角度对比 RBAC 和 ACL 的授权路径差异:

RBAC vs ACL 授权路径对比 RBAC 授权路径 用户 角色 权限 分配角色 授予权限 访问资源 ACL 授权路径 用户 ACL 条目 资源对象 直接授权 匹配条目 访问资源 RBAC 通过角色层解耦用户与权限,ACL 则将权限直接绑定到用户或用户组,导致管理复杂度随用户数线性增长。

1.6 实际应用中的 RBAC 层级

NIST RBAC 标准定义了四个层级,从基础到高级逐步增强:

  • Flat RBAC(平坦 RBAC):用户-角色-权限的基本映射,无角色继承。
  • Hierarchical RBAC(层级 RBAC):支持角色继承,子角色自动获得父角色的权限。
  • Constrained RBAC(约束 RBAC):引入职责分离(SoD)约束,防止权限冲突。
  • Symmetric RBAC(对称 RBAC):支持角色间的双向关系,如角色互斥。
SRE 视角:在云原生环境中,Kubernetes RBAC 属于 Hierarchical RBAC 的变体,通过 ClusterRole 和 RoleBinding 实现跨命名空间的权限继承。审计时需重点关注 ClusterRole 的聚合规则,避免权限扩散。