跳转到主要内容

RBAC

本文约需 2 分钟阅读

RBAC (Role-Based Access Control,基于角色的访问控制) 是一种通过「角色」来管理权限,而非直接向用户授予权限的访问控制模型。它由 David Ferraiolo 和 Richard Kuhn 于 1992 年在 NIST 提出,并于 2004 年标准化为 ANSI/INCITS 359。它将权限归集到「销售经理」「开发者」「审计员」等角色中,用户只需被分配角色即可,从而极大地简化了大型组织中的权限管理。它是 IAM 的核心概念,也是访问控制最广泛采用的实现方式。

NIST RBAC 模型的 3 个层级

NIST 将 RBAC 定义为可逐级扩展的 3 个层级。可根据组织的规模和需求,选择实现到哪个层级。

Core RBAC

基础模型。由用户、角色、权限、会话 4 个要素构成。将角色分配给用户,将权限关联到角色。对大多数系统而言,这一层级已经足够。

Hierarchical RBAC

在角色之间引入父子关系 (继承)。「部长」角色会自动继承「科长」角色的权限。可将组织层级原样映射为角色层级,从而消除权限的重复定义。

Constrained RBAC

增加职责分离 (SoD: Separation of Duties) 约束。通过定义诸如不能将「会计」与「审批者」分配给同一用户的互斥约束,从结构上防止舞弊和误操作。

RBAC、ABAC、PBAC 的比较

访问控制模型不止 RBAC 一种。重要的是将其与基于属性 (ABAC) 和基于策略 (PBAC) 的模型进行比较,选择符合需求的模型。

观点RBACABACPBAC
判断标准角色用户、资源、环境的属性策略 (规则引擎)
粒度粗 (以角色为单位)细 (属性的组合)最灵活 (任意条件)
引入的难易度容易中等复杂
管理成本与角色数量成正比维护属性定义维护策略的一致性
适用场景组织结构明确的企业需要动态条件判断的情况复杂的业务规则
代表性实现AWS IAM 角色、Kubernetes RBACAWS IAM 策略条件、Azure ABACOPA (Open Policy Agent)

在实际系统中,结合 RBAC 与 ABAC 的混合方式正在增多。 AWS IAM 就是典型的混合实现:在基于角色的基本结构之上,可通过 Condition 要素添加基于属性的条件。

与最小权限原则的关系

最小权限原则是「只授予完成业务所需的最低限度权限」这一安全基本原则。可以说,RBAC 是在组织层面实现这一原则的机制。若角色设计得当,就能从结构上消除向个别用户授予过多权限的风险。但若角色设计过粗,便会产生诸如「开发者角色包含了生产环境的删除权限」这类过度权限。角色的粒度设计决定了最小权限的实际效果。

角色爆炸 (Role Explosion) 问题

RBAC 最大的难题是「角色爆炸」:随着组织日趋复杂,角色数量呈爆炸式增长。若按部门 × 职位 × 项目 × 环境的组合来创建角色,就会产生数百乃至数千个角色,导致管理崩溃。

角色爆炸的示例:
5 部门 × 4 职位 × 10 项目 × 3 环境 = 600 个角色
→ 若用 ABAC 的属性条件动态判定部门与环境,便可将角色数量控制在 20 个左右

要防止角色爆炸,行之有效的混合方式是:将角色粒度限定为「职务功能」,而部门和项目的区分则交由 ABAC 的属性条件处理。定期的角色盘点 (审计角色的使用情况,整合或废除不需要的角色) 也必不可少。

主流平台上的 RBAC 实现

AWS IAM

将策略 (JSON) 附加到 IAM 角色上,让用户或服务承担该角色 (AssumeRole)。跨账户访问也使用角色。

Kubernetes RBAC

用 Role / ClusterRole 定义对资源的操作权限,再用 RoleBinding / ClusterRoleBinding 关联到用户或服务账户。可实现命名空间级别的隔离。

Azure AD (Entra ID)

将目录角色 (Global Admin、User Admin 等) 与应用程序专属的自定义角色相结合。通过 PIM (Privileged Identity Management) 可实现特权角色的即时 (Just-In-Time) 授予。

RBAC 也是零信任架构的基础,是合规审计中必查的项目。也请一并参阅企业的密码策略初创企业的安全检查清单零信任安全访问控制相关书籍 (Amazon)推荐用来深入学习设计模式。

相关术语

这篇文章对您有帮助吗?

XHatena