3. ABAC 属性体系:用户、资源、环境、操作属性及其作用
ABAC(基于属性的访问控制)的核心决策单元是属性。与RBAC依赖静态角色不同,ABAC在每次访问请求时动态评估一组结构化属性,这些属性被划分为四个明确的逻辑域:用户属性(Subject Attributes)、资源属性(Resource Attributes)、环境属性(Environment Attributes)和操作属性(Operation Attributes)。理解这四个边界的定义、来源及其在策略引擎中的交互方式,是构建可扩展ABAC体系的基础。
3.1 模块边界与分层视图
四类属性在权限系统中处于不同的数据层,其采集、存储与消费路径是隔离的。
模块边界划分:
- 身份源层(用户属性):LDAP/AD、IAM用户库、OIDC Token。
- 资源元数据层(资源属性):CMDB、资产管理平台、对象存储元数据。
- 运行时上下文层(环境属性):请求时间戳、客户端IP、网络分区、设备信任等级。
- 操作语义层(操作属性):API方法(GET/POST/DELETE)、操作对象类型、批处理/实时标识。
- 身份源层(用户属性):LDAP/AD、IAM用户库、OIDC Token。
- 资源元数据层(资源属性):CMDB、资产管理平台、对象存储元数据。
- 运行时上下文层(环境属性):请求时间戳、客户端IP、网络分区、设备信任等级。
- 操作语义层(操作属性):API方法(GET/POST/DELETE)、操作对象类型、批处理/实时标识。
3.2 组件职责与属性详细定义
| 属性类型 | 来源示例 | 典型键值示例 | 核心作用 |
|---|---|---|---|
| 用户属性 | IAM、SSO令牌、自建用户表 | subject.department, subject.security_clearance_level, subject.org_unit_id |
标识访问发起者的身份、组织归属及拥有权限的上下文 |
| 资源属性 | CMDB、数据库元数据、文件标记 | resource.data_classification, resource.region, resource.owner |
描述被访问的客体敏感度、物理位置及管理归属 |
| 环境属性 | 请求头、终端检测/信任评估服务、GMT时间 | environment.time_of_day, environment.client_ip, environment.trust_score |
反映请求发生时的外部状态,不受用户或资源控制 |
| 操作属性 | API Schema定义、请求体解析层 | operation.method, operation.batch_size, operation.is_export |
定义对资源施行具体行为的性质和范围 |
3.3 数据流与控制流:属性驱动的决策链路
当一次访问请求到达策略决策点(PDP)时,四类属性按照明确的数据流被注入评估引擎。整个过程不依赖角色间的继承关系,而是基于属性与策略规则的直接匹配。
数据流路径:
PIP(策略信息点)→ 属性聚合 → 策略决策点(PDP)→ 策略执行点(PEP)。
控制流遵循“先静态后动态”原则:用户属性 + 操作属性先行过滤,然后加载资源属性,最后引入环境属性进行运行时裁定。
PIP(策略信息点)→ 属性聚合 → 策略决策点(PDP)→ 策略执行点(PEP)。
控制流遵循“先静态后动态”原则:用户属性 + 操作属性先行过滤,然后加载资源属性,最后引入环境属性进行运行时裁定。
3.4 属性交互的信任链路与风险点
信任链路:属性来源必须被可信的PIP签名或验证。用户属性来自身份提供者(IdP),资源属性来自授权的CMDB服务,环境属性来自受信的安全网关。任何未经签名的属性注入都会破坏信任链。
关键风险点:
- 属性爆炸:未做属性模型设计,导致PDP每次评估需要遍历数百个松散属性,性能急剧下降。
- 环境属性篡改:客户端可伪造IP或时间戳,若PEP未在网关层剥离不可信来源的环境属性,将产生授权绕过。
- 属性值不统一:同一字段在用户属性和资源属性中的编码规范不一致(例如“production” vs “prod”),导致策略匹配失败。
3.5 选型权衡:何时引入ABAC属性模型
| 维度 | RBAC纯角色模式 | ABAC四类属性模式 |
|---|---|---|
| 属性维度数量 | 1维(角色ID) | 4维以上(用户+资源+环境+操作) |
| 策略表达复杂度 | 低 | 高,支持多条件组合 |
| 运行时性能 | 高(O(1)缓存) | 中(需属性查找与表达式求值) |
| 适合场景 | 组织层级稳定、权限粒度粗 | 数据敏感度高、需实时判断(如金融风控触发) |
3.6 属性体系落地步骤与验收标准
落地步骤:
- 定义属性模型文档:明确四类属性的全量字段、枚举值及来源系统。
- 部署PIP服务:为每类属性建立独立的PIP,提供统一的返回格式(如JSON属性包)。
- 配置属性映射:在策略引擎中注册属性名称与PIP端点的绑定关系。
- 编写第一组控制策略:用“用户属性+资源属性”组合规则覆盖最高风险访问场景。
- 集成环境属性:接入安全网关传递的运行时上下文(如设备信任分、地理位置)。
- 压力测试与属性缓存:对高频属性(如部门ID)做本地LRU缓存,降低PIP调用延迟。
验收标准:
- 所有属性值的来源均可向上溯源至一个受信系统(IdP/CMDB/网关),存在清晰的信令链路。
- 在1000次/秒的并发请求下,PDP决策平均延迟小于5ms(不含网络开销)。
- 不存在任何包含通配符匹配且缺少属性边界限制的策略规则。
3.7 属性体系结构图
以下SVG展示了ABAC四类属性域的位置及其在权限决策流水线中的数据流向。用户属性与操作属性注入请求上下文,资源属性从元数据存储中获取,环境属性从运行时网关附加。所有属性被PDP聚合后交由策略评估引擎裁决。
架构风险提示:环境属性是ABAC体系中最容易被伪造的输入域。若未在网关层剥离客户端传入的
X-Forwarded-For或自定义时间戳,恶意请求可伪造环境上下文绕过策略。架构上应当在PEP上游部署强制属性清洗中间件,只保留由受信服务签注的环境属性。