3、信任边界模型:零信任架构在供应链中的应用、信任边界定义、策略执行点(PEP)与策略决策点(PDP)

3.1 零信任架构在镜像供应链中的核心原则

传统安全模型依赖网络边界防御,一旦攻击者突破外围防火墙,内部系统便暴露在风险中。镜像供应链涉及镜像构建、仓库存储、分发部署、运行时监控等多个环节,攻击面广泛且链路复杂。零信任架构(Zero Trust Architecture, ZTA)在供应链中的应用,彻底摒弃“内网可信”的假设,对每一个访问请求、每一次镜像拉取、每一行配置变更都进行显式验证。

零信任在镜像供应链中的三大核心原则:

  • 始终验证(Never Trust, Always Verify): 无论请求来自内部CI/CD管道还是外部开发者,每次镜像拉取、签名验证、策略查询都必须经过身份认证和授权检查。
  • 最小权限(Least Privilege): 每个组件(构建节点、仓库客户端、部署代理)仅获得完成其任务所需的最小权限集,禁止默认开放或过度授权。
  • 假设受损(Assume Breach): 默认认为网络、端点、管道可能已被入侵,所有通信必须加密,所有操作必须审计,所有信任关系必须动态评估。
关键认知: 零信任不是一种产品,而是一种安全设计范式。在镜像供应链中,它要求我们将信任从“网络位置”转移到“身份 + 上下文 + 策略”的组合上。

3.2 信任边界定义:从物理网络到逻辑策略域

在零信任模型中,信任边界不再是路由器或防火墙围起来的物理网段,而是由策略决策点(PDP)和策略执行点(PEP)共同定义的逻辑策略域。每个策略域对应一组明确的访问规则、加密要求、审计级别和风险阈值。

镜像供应链中的典型信任边界划分:

信任边界域 包含组件 信任等级 典型策略要求
构建域 CI/CD 管道、构建节点、Dockerfile 仓库 高 仅允许签名的基础镜像、强制 SBOM 生成、构建日志加密存储
仓库域 镜像仓库、签名服务、漏洞扫描器 高 镜像推送必须携带数字签名、拉取前验证签名、仓库访问基于 OIDC 令牌
部署域 Kubernetes 集群、容器运行时、策略代理 中 运行时镜像必须通过策略校验、禁止特权容器、强制只读根文件系统
开发域 开发者工作站、本地镜像构建环境 低 仅允许拉取已签名的公共镜像、本地构建必须上传 SBOM、禁止直接推送生产仓库

信任边界不是静态的。当镜像从构建域流转到仓库域时,其信任等级可能因扫描结果、签名状态、来源标签而动态调整。零信任模型要求信任边界随工件生命周期实时变化。

镜像供应链信任边界域与工件流转 镜像供应链信任边界域与工件流转 开发域 信任等级:低 工作站 / 本地构建 构建域 信任等级:高 CI/CD 管道 / 构建节点 仓库域 信任等级:高 镜像仓库 / 签名服务 部署域 信任等级:中 K8s 集群 推送 推送+签名 拉取+验证 策略执行点(PEP) 每个域边界部署 PEP,拦截所有跨域请求并转发至 PDP 进行决策 信任边界动态调整规则: 1. 镜像从开发域推送至构建域时,必须携带 SBOM 和来源标签。 2. 镜像从构建域推送至仓库域时,必须经过签名和漏洞扫描。 3. 镜像从仓库域拉取至部署域时,必须验证签名并匹配运行时策略。 4. 任何跨域请求若验证失败,PEP 直接拒绝并记录审计事件。

3.3 策略执行点(PEP)与策略决策点(PDP)

零信任架构的核心控制平面由两个关键组件构成:策略决策点(Policy Decision Point, PDP) 和 策略执行点(Policy Enforcement Point, PEP)。PDP 负责根据身份、上下文、工件元数据做出授权决策;PEP 负责在数据平面拦截请求并强制执行 PDP 的决策。

3.3.1 策略决策点(PDP)

PDP 是零信任架构的“大脑”,它不直接处理数据流量,而是接收来自 PEP 的决策请求,结合策略引擎、身份提供商(IdP)、工件元数据(签名、SBOM、漏洞评分)等信息,返回 Permit(允许)、Deny(拒绝)或 Evaluate(需要额外评估)的决策结果。

镜像供应链中 PDP 的典型决策流程:

  1. 接收请求: PEP 将请求上下文(请求者身份、目标镜像、操作类型、环境标签)封装为 XACML 或自定义格式发送至 PDP。
  2. 身份验证: PDP 调用 IdP(如 OIDC/OAuth2 提供商)验证请求者身份是否有效、令牌是否过期。
  3. 上下文评估: 检查请求来源 IP、设备指纹、时间窗口、历史行为风险评分。
  4. 工件验证: 查询镜像签名状态、SBOM 完整性、漏洞扫描结果(CVSS 评分阈值)。
  5. 策略匹配: 将上述信息与预定义策略集(如 Rego/OPA 策略、Kyverno 策略)进行匹配。
  6. 返回决策: 返回 Permit(允许)、Deny(拒绝并记录原因)或 Evaluate(触发人工审批或 MFA)。
最佳实践: PDP 应设计为无状态、高可用服务,支持水平扩展。决策结果应包含缓存有效期(TTL),避免对同一请求重复评估,同时 TTL 不宜过长以防止策略变更后决策滞后。

3.3.2 策略执行点(PEP)

PEP 是零信任架构的“手脚”,部署在数据路径的关键节点上,负责拦截请求、转发至 PDP 获取决策、并根据决策结果执行允许或阻断操作。PEP 本身不存储策略,也不做授权判断,仅做策略的强制实施。

镜像供应链中 PEP 的典型部署位置:

部署位置 PEP 实现示例 拦截的请求类型 执行动作
镜像仓库入口 仓库反向代理 / 仓库插件(如 Harbor 拦截器) 镜像推送、镜像拉取、标签修改 允许通过 / 返回 403 / 触发审计告警
CI/CD 管道 管道插件(如 Jenkins OPA 插件、GitLab CI 策略阶段) 构建触发、镜像推送、配置变更 允许继续 / 中止管道 / 标记为失败
Kubernetes 准入控制器 Kyverno、OPA Gatekeeper、KubeArmor Pod 创建、镜像拉取、特权容器申请 允许创建 / 拒绝创建 / 变更配置后允许
容器运行时 Falco、Tracee、KubeArmor 运行时策略 进程执行、文件访问、网络连接 允许执行 / 杀死进程 / 生成告警事件
PEP 与 PDP 交互架构 PEP 与 PDP 交互架构 请求来源 开发者 / CI 管道 K8s 准入 / 运行时 请求 PEP 策略执行点 拦截 / 转发 / 执行 决策请求 PDP 策略决策点 身份验证 上下文评估 策略匹配 决策结果 允许/拒绝 策略数据源 OPA 策略 Kyverno 策略 签名 / SBOM IdP 身份 查询 PEP 与 PDP 交互流程 1. 请求到达 PEP,PEP 提取请求上下文(身份、镜像、操作、环境)。 2. PEP 将上下文封装为决策请求,发送至 PDP。 3. PDP 查询策略数据源(OPA、Kyverno、签名服务、IdP),执行策略匹配。 4. PDP 返回 Permit / Deny / Evaluate 决策结果给 PEP。 5. PEP 根据决策结果执行:允许请求通过、拒绝请求并记录审计、触发额外验证。

3.4 PEP 与 PDP 的协同工作模式

在镜像供应链中,PEP 和 PDP 的协同不是一次性的请求-响应循环,而是贯穿工件生命周期的持续验证过程。以下是一个典型的端到端协同场景:

场景:开发者推送镜像至生产仓库
1. 开发者执行 docker push,请求到达仓库入口 PEP。
2. PEP 提取请求者 OIDC 令牌、镜像名称、标签、摘要,发送至 PDP。
3. PDP 验证令牌有效性,查询策略:仅允许来自已签名构建管道的镜像推送至生产仓库。
4. PDP 检查镜像签名状态:若镜像未签名或签名无效,返回 Deny。
5. PDP 检查镜像漏洞扫描结果:若存在 Critical 级别漏洞且无豁免,返回 Deny。
6. PDP 返回 Permit,PEP 允许推送完成,并记录审计日志。
7. 若推送成功,PDP 更新镜像元数据状态,触发后续策略评估(如部署准入)。

3.5 信任边界模型的实施要点

  • 策略即代码(Policy as Code): 所有信任边界策略应使用声明式语言(Rego、Kyverno YAML)编写,纳入版本控制,通过 CI/CD 管道自动测试和部署。
  • 决策缓存与失效: PDP 应缓存决策结果以减少延迟,但缓存 TTL 必须根据策略变更频率和风险等级动态调整。高风险操作(如生产环境镜像推送)建议禁用缓存。
  • 审计与可观测性: 所有 PEP 拦截事件和 PDP 决策结果必须输出到统一的审计日志系统,支持结构化查询和告警。推荐使用 OpenTelemetry 标准进行链路追踪。
  • 降级与熔断: 当 PDP 不可用时,PEP 应支持降级模式(如拒绝所有请求的“安全降级”或基于本地缓存的“宽松降级”),避免单点故障导致整个供应链阻塞。
常见陷阱: 不要将 PEP 和 PDP 部署在同一进程或同一故障域中。PDP 作为决策中心,必须与 PEP 物理或逻辑隔离,防止攻击者通过攻破 PEP 直接篡改策略决策。建议 PDP 部署在独立的 Kubernetes 命名空间,并启用网络策略限制仅允许 PEP 的 Service Account 访问。