4. 权限模型设计:角色分层与最小权限
在 RBAC 与 SLO 预算复核体系中,权限模型是安全与效率的基石。本章聚焦于角色分层设计、最小权限原则的落地,以及权限继承与冲突的解决策略。一个设计良好的权限模型,能够确保只有合适的人、在合适的时间、对合适的资源执行合适的操作。
4.1 角色分层设计:管理员、编辑、只读
角色分层是 RBAC 的核心实践。我们将系统用户抽象为三个标准层级,每个层级拥有明确的职责边界和权限范围。这种分层结构不仅简化了权限管理,也符合 SRE 中“变更风险控制”与“可观测性”的分离原则。
| 角色层级 | 核心职责 | 典型操作 | SLO 预算操作 |
|---|---|---|---|
| 管理员 (Admin) | 系统配置、策略定义、审计追溯 | 创建/删除用户、修改全局配置、执行预算审批 | 创建/修改/删除 SLO 预算、调整预算窗口、配置告警规则 |
| 编辑 (Editor) | 日常运维、数据录入、预算调整 | 查看指标、提交预算变更申请、执行预定义操作 | 查看 SLO 预算详情、提交预算复核请求、调整非关键参数 |
| 只读 (Viewer) | 数据查看、报告查阅、合规审计 | 浏览仪表盘、导出报告、查看审计日志 | 查看 SLO 预算状态、查看复核历史、导出预算报告 |
设计建议: 在 SLO 预算复核场景中,建议将“编辑”角色的权限进一步细分为“预算编辑”和“复核编辑”,以隔离“执行”与“审批”职责,避免权限滥用。
4.2 最小权限原则
最小权限原则要求每个角色只拥有完成其任务所必需的最小权限集合。在 SLO 预算复核中,这意味着:
- 按需授权: 只读角色不应拥有修改预算阈值的权限;编辑角色不应拥有删除预算的权限。
- 时间窗口: 临时提升权限(如紧急复核)应设置有效期,到期自动回收。
- 资源隔离: 不同服务或团队的 SLO 预算应通过资源标签或命名空间隔离,避免跨域操作。
实践检查清单:
- 是否每个角色都只拥有其职责对应的操作权限?
- 是否存在“万能角色”或“超级管理员”的滥用?
- 权限变更是否经过审批流程?
- 是否定期审计权限分配,清理僵尸账号?
4.3 权限继承与冲突解决
在复杂的组织架构中,角色之间往往存在继承关系(如“编辑”继承“只读”的查看权限)。然而,继承也可能引入权限冲突,需要明确的解决策略。
4.3.1 权限继承模型
我们采用“白名单”继承机制:子角色自动继承父角色的所有权限,但可以在此基础上增加新权限,不能减少父角色的权限。这种模型保证了权限的向上兼容性。
# 权限继承示例(伪代码)
role Viewer:
permissions: [slo.view, report.view, audit.log.view]
role Editor extends Viewer:
permissions: [slo.edit, budget.submit]
role Admin extends Editor:
permissions: [slo.delete, user.manage, budget.approve]
4.3.2 冲突解决策略
当用户同时拥有多个角色(如“编辑”和“只读”),或角色继承链中出现矛盾时,需要明确的冲突解决规则:
| 冲突类型 | 场景描述 | 解决策略 |
|---|---|---|
| 权限叠加 | 用户同时拥有“编辑”和“只读”角色 | 取权限并集,即用户拥有两个角色中所有权限的合集 |
| 权限拒绝 | 父角色允许某操作,子角色显式拒绝 | 采用“拒绝优先”原则,显式拒绝的权限优先级高于继承的允许权限 |
| 资源范围冲突 | 角色 A 允许编辑“服务 X”的预算,角色 B 禁止编辑“服务 X”的预算 | 采用“最具体范围优先”原则,更具体的资源范围规则覆盖通用规则 |
注意: 在 SLO 预算复核中,应避免使用“拒绝”权限,因为它容易导致权限黑洞和审计困难。推荐使用“白名单”模式,即默认拒绝所有操作,仅显式授予允许的权限。
4.4 权限模型架构图
下图展示了基于角色分层的权限模型架构,包括角色继承、权限分配和冲突解决机制。
4.5 权限冲突解决流程图
当用户发起操作请求时,系统按照以下流程进行权限校验和冲突解决:
关键要点:
- 角色分层设计应遵循“职责分离”原则,避免单一角色拥有过多权限。
- 最小权限原则是安全基线,应通过自动化工具定期审计权限分配。
- 权限冲突解决策略应提前定义并文档化,避免运行时出现歧义。
- 在 SLO 预算复核中,建议使用“白名单 + 继承”模型,减少拒绝权限的使用。