4. 零信任策略引擎选型与部署

零信任架构落地时,最容易被混淆的两个概念是策略决策点(PDP,Policy Decision Point)与策略执行点(PEP,Policy Enforcement Point)。PDP 负责“判断该不该放行”,PEP 负责“真正执行放行或阻断”。在多云环境中,二者往往不在同一朵云、不在同一网络域,甚至不属于同一供应商,因此选型与部署的核心问题不是“选哪个产品”,而是“决策与执行如何分工、如何连接、如何保证一致”。

一、PDP 与 PEP 的职责边界

PDP 是策略计算中心,输入包括身份上下文(用户、设备、服务账号)、环境上下文(源 IP、地理位置、时间、TLS 指纹)、资源上下文(云账号、VPC、K8s 命名空间、标签)以及风险信号(威胁情报、异常行为评分)。它输出的是一个决策结果,通常为 Allow / Deny / Allow-with-conditions,并附带会话有效期、所需认证强度等约束。PEP 则是数据面组件,部署在流量必经路径上,负责拦截请求、向 PDP 发起授权查询、缓存决策并执行。PEP 本身不做复杂策略推理,它只忠实执行 PDP 的判定。

在多云场景下,PDP 通常集中部署或采用“中心 PDP + 区域 PDP”两级结构,而 PEP 必须分布式部署在每朵云的入口、每个集群的 sidecar、每个网关或每个工作负载旁。这种“中心决策、边缘执行”的分离,是零信任区别于传统边界防火墙的关键。

多云零信任 PDP / PEP 架构与最小可行部署 策略决策层(PDP)· 集中部署于管理云 全局 PDP 策略仓库 / 决策引擎 身份·设备·风险上下文 区域 PDP-A 云 A 本地决策缓存 低延迟授权 区域 PDP-B 云 B 本地决策缓存 低延迟授权 策略下发 策略下发 授权查询 授权查询 授权查询 策略执行层(PEP)· 分布式部署于各云数据面 云 A · 入口网关 PEP API Gateway / NLB mTLS 终止 JWT 校验 决策缓存 TTL=30s 云 A · 工作负载 PEP Sidecar / eBPF 服务身份 SPIFFE L7 策略执行 本地决策缓存 云 B · 入口网关 PEP Ingress / WAF OIDC 联合认证 策略执行 审计日志上报 放行 / 阻断 放行 / 阻断 放行 / 阻断

二、三种典型 PDP/PEP 架构对比

多云环境下常见的架构有三种。第一种是集中式 PDP + 分布式 PEP:PDP 部署在管理云或独立安全 VPC,所有 PEP 通过 gRPC 或 HTTPS 向 PDP 请求授权。优点是策略统一、审计集中;缺点是跨云调用引入延迟,且 PDP 成为可用性瓶颈。第二种是分层 PDP:全局 PDP 负责策略定义与分发,区域 PDP 部署在每朵云内,PEP 就近向区域 PDP 查询。这样既保留统一策略源,又把决策延迟压到毫秒级。第三种是嵌入式 PDP:PEP 内置轻量决策逻辑,仅定期从中心同步策略包,适合边缘节点或断网场景,但策略一致性风险较高。

架构 决策延迟 策略一致性 可用性风险 适用场景
集中式 PDP 跨云 20–80ms 强 PDP 单点 云数量少、合规要求高
分层 PDP 本地 2–10ms 较强(最终一致) 区域 PDP 可降级 多云多区域、延迟敏感
嵌入式 PDP <1ms 弱(策略包延迟) 策略漂移 边缘、离线、IoT

三、最小可行部署(MVP)设计

最小可行部署的目标不是覆盖全部场景,而是用最少组件跑通“身份认证 → 策略决策 → 策略执行 → 审计”闭环。建议选择两朵云(云 A 为主、云 B 为辅),部署一套分层 PDP 和两类 PEP。以下为示例参数,实际部署时需按环境调整。

# 示例:区域 PDP 配置(云 A)
pdp:
  mode: regional
  listen: 0.0.0.0:8443
  tls:
    cert: /etc/pdp/tls.crt
    key:  /etc/pdp/tls.key
    clientCA: /etc/pdp/ca.crt      # 校验 PEP 客户端证书
  upstream:
    globalPDP: https://pdp.global.example.com:8443
    syncInterval: 30s              # 策略包同步周期
  cache:
    decisionTTL: 30s               # 决策缓存有效期
    maxEntries: 100000
  policy:
    bundle: /var/lib/pdp/policy.bundle
    signatureVerify: true          # 策略包签名校验

# 示例:入口网关 PEP 配置(云 A)
pep:
  type: gateway
  pdpEndpoint: https://pdp-a.internal:8443
  identity:
    mtls: true
    jwtIssuer: https://idp.example.com
    jwtAudience: api.internal
  enforcement:
    defaultAction: deny            # 默认拒绝
    failMode: closed               # PDP 不可达时拒绝
    cacheTTL: 30s
  audit:
    sink: https://audit.example.com/ingest
    sampleRate: 1.0

部署顺序建议为:先部署全局 PDP 并导入基础策略,再部署区域 PDP 并验证与全局 PDP 的策略同步,然后在云 A 入口网关接入 PEP 并开启 fail-closed,最后在云 B 复制同类 PEP。每完成一步,用一条测试请求验证决策链路是否贯通。

四、验证与判断依据

验证时重点观察四个指标:一是授权查询延迟,区域 PDP 本地决策应稳定在 10ms 以内;二是决策缓存命中率,稳态下应高于 90%,否则说明 TTL 过短或策略粒度过细;三是 fail-closed 行为,主动停掉 PDP 后,PEP 应在缓存过期后拒绝新请求,而不是放行;四是审计日志完整性,每次 Allow/Deny 都应携带请求 ID、身份主体、资源标识和决策依据。若发现 PEP 在 PDP 不可达时仍持续放行,说明 failMode 配置错误或缓存 TTL 过长,这是零信任部署中最危险的配置偏差。

最小可行部署不追求策略数量,而追求链路可观测。建议先只定义 3–5 条核心策略(如“生产环境仅允许已认证服务账号访问”“跨云调用必须 mTLS + JWT 双因子”),跑通后再逐步扩展。
PDP 与 PEP 之间的通信必须双向 TLS 认证,且 PEP 应校验 PDP 返回决策的签名。否则攻击者可能伪造 PDP 响应,直接绕过策略决策。策略包同步同样需要签名校验,防止策略被篡改。