第3章 权限模型基础:RBAC模型、ABAC模型、混合模型适用场景
3.1 边界
本章聚焦于三类主流访问控制模型的架构边界:角色基访问控制(RBAC)、属性基访问控制(ABAC)以及二者组合的混合模型。模型边界界定在“策略定义层”与“策略执行点(PEP)”之间,不涉及身份源同步、会话管理或凭证分发等外部系统。适用场景覆盖从静态部门划分到动态项目隔离的需求。
- RBAC:权限与角色绑定,用户仅通过角色获得权限,适合职责明确的组织层级。
- ABAC:权限基于用户、资源、环境多属性计算得出,适合高动态、细粒度控制。
- 混合模型:在RBAC角色骨架之上叠加ABAC属性规则,兼顾效率与灵活性。
3.2 分层与组件职责
| 组件层 | RBAC | ABAC | 混合模型 |
|---|---|---|---|
| 策略定义点(PDP) | 角色权限矩阵 | 属性规则引擎 | 策略优先级解析器 |
| 策略执行点(PEP) | 角色-权限映射表 | 属性上下文计算器 | 角色约束 + 属性过滤器 |
| 策略信息点(PIP) | 角色库 | 用户/资源/环境属性源 | 角色库 + 属性源 |
| 策略管理点(PAP) | 角色分配界面 | 属性规则编辑器 | 可组合策略编辑器 |
架构抉择提示:混合模型中PDP同时解析角色继承和属性条件,必须定义规则冲突解决策略(如“角色优先”或“属性覆盖”)。
3.3 数据流 / 控制流 / 信任链路
下图展示了三种模型在授权请求生命周期中的核心数据流与控制流分歧点。用户请求经PEP截获后,PDP根据模型类型选择不同的决策路径;信任链路从PEP经PDP到PIP,最终返回许可/拒绝。
3.4 选型权衡
| 维度 | RBAC | ABAC | 混合模型 |
|---|---|---|---|
| 管理复杂度 | 低(角色数量可控) | 高(属性规则爆炸) | 中(角色框架约束属性范围) |
| 粒度 | 粗~中(按角色聚合) | 极细(可到单资源属性) | 中~细(角色限定域,属性微调) |
| 变更响应速度 | 快(角色分配变更) | 快(规则热加载) | 中(需同时维护角色和规则) |
| 动态上下文支持 | 弱 | 强(时间、位置、风险等级) | 中(可通过属性规则引入上下文) |
| 适用典型场景 | 部门级权限,组织架构固定 | 云计算、物联网、多租户SaaS | 企业混合云、项目隔离加行级约束 |
决策公式:若角色数 < 50 且权限变更频率 < 5次/月 → 纯RBAC;若属性条件超过3维(如地域+时间+数据分类)→ 混合模型优于纯ABAC(可借助角色缩小策略空间)。
3.5 风险点
- RBAC角色爆炸:当组织层级复杂或项目交叉时,角色数量激增,管理成本失控。
- ABAC性能风险:属性上下文查询可能引入高延迟(尤其是跨服务PIP调用),影响关键路径。
- 混合模型策略冲突:角色权限与属性规则同时生效时,若未定义优先级逻辑,可能导致权限意外放大或缩小。
- 审计盲区:ABAC属性规则不可视化时,难以追溯特定请求的决策依据;混合模型需记录角色+属性双重证据。
3.6 落地步骤
- 域分析:识别组织中稳定角色集(如“项目经理”、“数据分析师”)和动态属性维度(如项目阶段、数据敏感度)。
- 搭建PDP决策引擎:选择支持策略组合的引擎(如OPA + RBAC模块)。
- 定义策略优先级:约定“角色拒绝优先于属性允许”或“属性条件覆盖角色权限”,写入策略元模型。
- PIP适配器开发:对接LDAP(角色)、CMDB(资源标签)、IAM(用户属性)等。
- PEP埋点:在网关或服务框架中注入鉴权拦截器,携带请求上下文。
- 渐进切换:先对非核心API启用混合模型,通过影子模式收集策略误判数据。
# 混合模型策略片段示例(OPA Rego)
default allow = false
# 角色基础规则
allow if user.role == "admin"
allow if user.role == "editor" and input.action == "read"
# 属性约束:项目隔离
allow if {
user.role == "developer"
input.action == "write"
input.resource.project == user.assigned_project
time.now_hour >= 8
time.now_hour < 20
}
常见陷阱:不要在混合模型中同时允许“角色”和“属性”两条通路独立决策,否则可能绕过约束;应设置为角色决定许可域,属性决定域内过滤。
3.7 验收标准
| 检查项 | 验收指标 | 验证方法 |
|---|---|---|
| 功能正确性 | 100%的权限测试用例通过(含角色+属性组合场景) | 自动化权限测试套件 |
| 性能 | PDP决策延迟 < 5ms(P99)、PIP查询 < 20ms(P99) | 压测脚本模拟1000并发请求 |
| 可审计性 | 每次授权决策记录含角色ID、触发属性名、规则版本 | 审计日志抽样检查 |
| 冲突可预测 | 预定义冲突优先级矩阵,任意策略组合输出唯一结果 | 马尔可夫链覆盖穷举测试(策略组合数 ≤ 2^10) |
| 变更影响范围 | 新增属性规则不影响已有角色权限 | 回归测试 & 差分比对 |
验收参考脚本:可用以下Curl命令模拟混合模型PDP决策:
curl -X POST http://pdp:8181/v1/data/access -H 'Content-Type: application/json' -d '{"input": {"user": {"role":"developer","assigned_project":"proj-x"}, "action":"write", "resource":{"project":"proj-x"}, "time":"2025-03-25T14:00:00Z"}}'