第4章 规则引擎架构:策略决策点(PDP)、策略执行点(PEP)、策略信息点(PIP)的协作

核心观点:ABAC 的真正落地依赖规则引擎的三大核心组件 —— PDP、PEP、PIP 的职责分离与高效协作。任何一方的边界模糊都会导致权限判断失真、性能劣化或安全漏洞。

4.1 模块边界与分层

规则引擎在 ABAC 中承担“理解策略 → 收集上下文 → 做出判断 → 强制执行”的全链路职责。按 XACML 参考架构的标准划分,边界如下:

层次模块边界定义
接入层PEP与业务应用直接交互,拦截请求并强制决策结果;不参与策略推理
决策层PDP纯策略推理引擎,只做「属性 + 策略 → 决策」的逻辑演算
数据层PIP对接所有属性源(用户/资源/环境),提供标准化属性查询接口
架构原则:PDP 不得直接访问数据库或业务 API;PEP 不得缓存策略或自行推导权限。所有属性获取必须经过 PIP 统一代理。

4.2 组件职责

  • PEP(策略执行点):嵌入在业务网关、API 中间件或应用拦截器中。职责包括:① 拦截用户操作请求;② 构造属性上下文并转发给 PDP;③ 接收 PDP 决策结果并强制执行(允许/拒绝/降权);④ 记录审计日志。
  • PDP(策略决策点):规则引擎的“大脑”。职责包括:① 加载并解析策略集(XACML/ALFA/自定义 DSL);② 接收 PEP 发来的属性上下文;③ 执行策略评估(组合、消歧、优先级裁决);④ 返回决策结果(Permit / Deny / NotApplicable / Indeterminate)。
  • PIP(策略信息点):数据代理层。职责包括:① 对接用户身份系统(LDAP/IDP)、资源标签系统、环境上下文(时间/位置/设备);② 缓存高频属性以减少源系统压力;③ 统一属性格式并返回给 PDP。

4.3 数据流与控制流

一次完整的权限判断遵循 5 步协作模型,数据流与控制流在组件间交替传递:

  1. PEP 拦截 → 用户发起操作,PEP 提取请求主体、动作、资源三元组,封装为 RequestContext 发送至 PDP。
  2. PDP 属性请求 → PDP 根据策略中声明的属性需求(如“用户部门”“资源密级”),向 PIP 发起批量属性查询。
  3. PIP 数据回填 → PIP 从用户系统、CMDB、环境传感器等数据源拉取属性,聚合后返回给 PDP。
  4. PDP 策略评估 → PDP 将属性注入策略引擎,执行规则匹配与组合算法,生成最终决策与责任链。
  5. PEP 强制执 → PDP 将决策结果(含 Obligation / Advice)返回 PEP,PEP 执行允许/拒绝、附加审计或触发二次验证。
常见误区:部分团队将属性获取逻辑写在 PEP 或 PDP 内部,导致 PIP 形同虚设。这会破坏数据层的统一治理,每次新增属性源都需要修改决策逻辑,最终使规则引擎退化为硬编码条件判断。

4.4 信任链路

三个组件之间必须建立明确的信任边界,防止中间人篡改或属性注入:

  • PEP ↔ PDP:使用 mTLS 双向认证,请求与响应必须携带签名令牌(JWS),防止伪造请求或篡改决策结果。
  • PDP ↔ PIP:PIP 应提供 signed attribute assertions,PDP 只接受来自受信 PIP 的属性响应,拒绝未签名的属性值。
  • PIP → 数据源:PIP 自身需要凭证管理,以最小权限原则连接 LDAP、数据库或 API,避免属性泄露或被滥用。
信任链路检查清单:
□ 所有组件间通信使用 TLS 1.3 + 双向证书校验
□ 决策结果带有 PDP 的数字签名,PEP 必须验签
□ PIP 返回的属性包包含数据源指纹与时间戳,防止重放攻击

4.5 选型权衡

维度集中式 PDP分布式 PDP
性能单点瓶颈,适合低频复杂策略高吞吐,适合微服务高频调用
一致性强一致,全局策略统一最终一致,需策略同步机制
运维复杂度低,集中管理高,需协调多个 PDP 实例
推荐场景管理后台、低并发企业应用大规模 SaaS、高并发 API 网关

4.6 风险点

  • PDP 性能衰减:策略数量超过 10,000 条或属性维度超过 20 时,评估耗时指数增长。必须引入策略索引与评估超时熔断。
  • PIP 级联故障:数据源不可用导致属性获取失败,PDP 应设定属性缺失默认值(Deny 优先),而非抛出异常。
  • PEP 绕过风险:应用端直接调用资源接口而非通过 PEP,导致权限控制被绕过。需在基础设施层强制流量经过 PEP。

4.7 落地步骤

  1. 组件选型:确定 PDP(如 AuthZForce、OPA、自研引擎)、PEP SDK 语言版本、PIP 适配器列表。
  2. 属性源梳理:枚举所有用户属性、资源标签、环境上下文,完成 PIP 对接适配器开发。
  3. 策略迁移与分层:将现有 RBAC 权限转化为 ABAC 策略,按“全局策略→应用策略→资源策略”分层存放。
  4. 集成与联调:PEP 嵌入业务网关 → 连接 PDP 沙箱 → PIP 注册测试数据源 → 端到端验证 100 条典型场景。
  5. 灰度上线:先 10% 流量经新规则引擎,对比决策结果与旧 RBAC 系统,确认无误后全量切换。

4.8 验收标准

验收项通过标准
决策正确率与预期策略结果一致,覆盖 100% 已定义的权限场景
PDP 性能P99 评估耗时 < 50ms(策略数 ≤ 5,000 条时)
PIP 可用性任意属性源故障时 PDP 仍能在 500ms 内返回决策(使用默认值)
信任链路伪造请求/篡改结果可被 PEP 或 PDP 识别并拒决
审计完整性每次决策均记录:请求上下文、决策结果、PDP 签名、时间戳

4.9 协作架构总览

下图展示了 PDP、PEP、PIP 及周边策略存储、数据源之间的完整协作关系与数据流向:

PDP – PEP – PIP 协作架构与数据流 策略存储 Policy Store PDP 策略决策点 Policy Decision Point PEP 策略执行点 Policy Enforcement Point PIP 策略信息点 Policy Information Point 数据源 LDAP / CMDB / IDP ① 访问请求 ④ 决策结果 (Permit/Deny) ② 查询属性 ③ 返回属性 检索策略 返回策略 查询原始属性 返回原始属性 流程说明: ① PEP 拦截用户请求,构造属性上下文发送给 PDP ② PDP 根据策略需求,向 PIP 查询缺失的属性值 ③ PIP 聚合数据源返回的属性,签名后回传给 PDP ④ PDP 完成策略评估,将决策结果(含 Obligation)返回 PEP 强制执行
架构落地建议:初期可先实现「PEP + 轻量 PDP + 简单 PIP」的紧凑模式,待策略复杂度提升后再拆分为独立部署的 PDP 集群与分布式 PIP 适配器网格。每步拆分都必须回归验证信任链路与决策正确率。