第1章 权限模型全景图:RBAC与ABAC核心概念及差异
权限模型是授权系统的理论基石。RBAC(基于角色的访问控制)与ABAC(基于属性的访问控制)分别代表了粗粒度静态授权与细粒度动态授权两种范式。本章从模块边界、组件职责、数据流与控制流、信任链路出发,建立清晰的权限模型全景图,为后续冲突处理案例提供统一的认知框架。
1.1 RBAC核心概念
RBAC 将权限抽象为“角色”这一中间层,用户通过角色获得权限,实现用户与权限的逻辑分离。其核心要素包括:
| 核心组件 | 职责说明 | 边界定义 |
|---|---|---|
| 用户(User) | 访问系统的主体,可以是人或服务账户 | 仅持有角色引用,不直接关联权限 |
| 角色(Role) | 权限的集合,支持层级继承(Role Hierarchy) | 角色是授权的最小单元,粒度固定 |
| 权限(Permission) | 对资源的操作许可(如读、写、执行) | 权限必须挂载到角色,不可独立存在 |
| 会话(Session) | 用户激活角色的运行时上下文 | 控制角色激活范围,支持最小权限原则 |
| 角色层级 | 角色之间的继承关系(上级继承下级权限) | 层级深度受管理复杂度约束 |
- 控制流:用户 → 身份认证 → 角色分配 → 权限查询 → 资源鉴权
- 信任链路:角色分配由管理员或角色管理服务负责,权限变更需通过角色更新传播
- 典型风险:角色爆炸(Role Explosion),当业务维度增多时角色数量急剧膨胀
1.2 ABAC核心概念
ABAC 不再依赖中间角色,而是通过主体、资源、动作、环境的属性组合进行动态策略评估。其核心要素包括:
| 核心组件 | 职责说明 | 边界定义 |
|---|---|---|
| 主体属性 | 用户或其身份标签(部门、职级、区域) | 属性来源:身份系统、LDAP、自建目录 |
| 资源属性 | 资源自身的元数据(分类、密级、所有者) | 属性由资源管理系统维护 |
| 动作属性 | 操作的类型与上下文(读、写、批量导出) | 动作属性可携带参数和环境信息 |
| 环境属性 | 访问时的外部条件(时间、IP、设备指纹) | 环境属性动态变化,不可伪造 |
| 策略规则 | 基于属性组合的布尔逻辑判定规则 | 策略引擎(PDP)负责解释执行 |
以下为一个典型的 ABAC 策略规则示例(JSON 格式):
{
"policyId": "pol-finance-001",
"effect": "Allow",
"subjects": {
"department": "Finance",
"level": { "gte": 3 }
},
"actions": ["read", "export"],
"resources": {
"type": "report",
"classification": "confidential"
},
"conditions": {
"environment": { "ipRange": "10.0.0.0/8", "timeWindow": "09:00-18:00" }
}
}
- 控制流:主体请求 → 属性收集 → PDP 策略匹配 → 决策返回 → 资源执行
- 信任链路:属性源的准确性决定授权安全,策略变更实时生效,无需角色重建
- 典型风险:策略冲突(Policy Conflict)与属性值篡改,需引入策略评估优先级和属性签名机制
1.3 两种模型的主要差异
下表从模块边界、数据流、信任链路、粒度与运维成本五个维度给出对比:
| 对比维度 | RBAC | ABAC |
|---|---|---|
| 授权粒度 | 粗粒度(角色级) | 细粒度(属性级组合) |
| 数据流 | 用户 → 角色 → 权限 → 资源(线性静态映射) | 用户 + 属性 → 策略引擎 → 资源(动态属性组合) |
| 信任链路 | 角色分配是信任锚点,管理员可控 | 属性源是信任锚点,需防属性伪造 |
| 管理复杂度 | 低,角色体系稳定后运维简单 | 高,策略规则需持续维护与验证 |
| 灵活性与扩展性 | 低,新增维度需创建新角色 | 高,新增维度仅需扩展属性与策略 |
| 适用场景 | 组织架构稳定、角色清晰的企业系统 | 多维度、高安全、环境敏感的数据平台 |
架构决策提示:两种模型并非互斥,现代系统常采用 RBAC + ABAC 混合方案——用 RBAC 管理基础角色,用 ABAC 处理边界条件与动态环境策略。混合方案能够兼顾管理效率与授权灵活性,但需要额外处理策略冲突与评估优先级。
下图从架构组件与数据流视角对比两种模型的整体结构: