3. 供应链策略概述:什么是镜像供应链策略、常见策略类型

在云原生环境中,镜像供应链策略是指从代码提交、镜像构建、制品存储到运行时部署的全链路安全控制规则集合。etcd 作为分布式键值存储系统,其镜像一旦被篡改或植入恶意组件,将直接威胁整个集群的控制面数据。因此,理解供应链策略的定义与常见类型,是复核误报、定位策略缺陷的前提。

3.1 什么是镜像供应链策略

镜像供应链策略是一组可编程的安全门禁,用于确保容器镜像在生命周期各阶段满足预定义的信任条件。策略通常以 准入控制(Admission Control) 或 持续验证(Continuous Verification) 的方式执行,覆盖以下关键环节:

  • 构建阶段:基础镜像来源校验、依赖包漏洞扫描、签名生成。
  • 存储阶段:镜像仓库访问控制、不可变标签策略、签名存储。
  • 部署阶段:运行时准入校验、签名验证、白名单匹配。
关键概念: 镜像供应链策略 ≠ 单一工具配置。它是组织级安全策略在容器镜像上的具体映射,需要与 CI/CD 流水线、密钥管理、监控告警系统联动。
镜像供应链策略生命周期 镜像供应链策略生命周期 构建阶段 基础镜像来源校验 依赖漏洞扫描 镜像签名生成 SBOM 生成 策略:来源白名单 + 签名 存储阶段 仓库访问控制 不可变标签策略 签名与元数据存储 镜像扫描结果持久化 策略:仓库白名单 + 标签规则 部署阶段 准入控制器校验 签名验证 白名单匹配 运行时策略执行 策略:准入规则 + 签名校验 策略在三个阶段持续生效,任一阶段失败则镜像不可用于生产环境

3.2 常见策略类型

根据 etcd 镜像供应链的实际运营经验,策略可归纳为三种核心类型。下表从校验对象、执行时机、误报倾向三个维度进行对比:

策略类型 校验对象 执行时机 典型误报原因 适用场景
签名校验 镜像数字签名(如 Cosign、Notation) 构建完成时 / 部署准入时 密钥轮换未同步、签名算法不兼容 防止镜像被篡改、确保发布者身份
来源白名单 镜像仓库地址、组织命名空间、标签模式 构建拉取时 / 部署准入时 白名单未包含镜像仓库镜像、标签通配符过严 限制镜像来源、防止使用未授权仓库
漏洞扫描 镜像层中的 CVE、依赖库版本、操作系统包 镜像推送后 / 定期重新扫描 扫描器数据库滞后、误报高危但实际不可利用 阻止已知漏洞进入生产环境

3.3 策略类型详解

3.3.1 签名校验

签名校验通过非对称加密技术确保镜像的完整性和发布者身份。etcd 镜像通常使用 Cosign 或 Notation 进行签名,策略引擎在部署前验证签名是否有效、是否由受信任的私钥签署。

  • 正向流程:构建者使用私钥对镜像摘要签名 → 签名存储于镜像仓库或 OCI 制品中 → 准入控制器使用公钥验证。
  • 误报复核点:公钥分发延迟、签名格式不兼容(如旧版 Cosign 与新版 Notation 互认失败)、镜像重新打标签后签名丢失。

3.3.2 来源白名单

来源白名单策略定义允许拉取或部署的镜像仓库地址、组织路径和标签模式。对于 etcd 镜像,白名单通常包含官方仓库(如 gcr.io/etcd-development/etcd)和内部镜像仓库。

实践建议: 白名单应使用精确匹配或受限通配符,避免使用 */*:* 等过于宽泛的规则。例如:registry.internal.io/etcd/*:v3.5.* 比 registry.internal.io/*:* 更安全且误报率更低。

3.3.3 漏洞扫描

漏洞扫描策略基于 CVE 数据库对镜像层进行静态分析。扫描结果通常包含漏洞严重等级(Critical / High / Medium / Low)和修复建议。策略可配置为:当存在 Critical 级别漏洞时阻止部署,或仅记录告警。

  • 常见扫描工具:Trivy、Grype、Clair、Anchore。
  • 误报场景:扫描器将已修复的 CVE 标记为存在(数据库未更新)、将仅影响非运行时的依赖标记为高危、将 etcd 自身代码中的误报 CVE 标记为严重。
三种策略类型决策流程对比 三种策略类型决策流程对比 签名校验 获取镜像摘要与签名 公钥验证签名 通过 → 允许部署 失败 → 阻止并告警 来源白名单 提取镜像仓库地址 匹配白名单规则 匹配 → 允许部署 不匹配 → 阻止并告警 漏洞扫描 扫描镜像层与依赖 比对 CVE 数据库 无高危 → 允许部署 有高危 → 阻止或告警 三种策略可组合使用,形成多层防御;误报通常发生在策略边界条件或数据同步延迟时

3.4 策略组合与误报关系

在实际生产环境中,etcd 镜像供应链通常同时启用上述三种策略。策略组合虽然提升了安全性,但也增加了误报的复杂性和排查难度:

  • 签名校验 + 来源白名单:镜像来源合法但签名过期,导致部署被拒绝。
  • 漏洞扫描 + 签名校验:镜像签名有效但扫描报告包含误报 CVE,导致流水线阻塞。
  • 三种策略同时触发:需要按策略优先级逐层排查,先确认来源白名单是否匹配,再验证签名有效性,最后复核漏洞扫描结果。
误报复核提示: 当 etcd 镜像部署被策略拒绝时,不要仅查看最终拒绝原因。应分别检查三种策略的日志输出,因为策略引擎可能只返回第一条失败原因,而实际存在多个策略同时失败的情况。

3.5 策略配置示例(Cosign + Kyverno)

以下是一个针对 etcd 镜像的供应链策略配置片段,使用 Cosign 进行签名校验,Kyverno 作为准入控制器执行策略:

apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
  name: etcd-signature-verify
spec:
  validationFailureAction: Enforce
  rules:
  - name: verify-cosign-signature
    match:
      any:
      - resources:
          kinds:
          - Pod
    verifyImages:
    - imageReferences:
      - "gcr.io/etcd-development/etcd:*"
      attestors:
      - count: 1
        entries:
        - keys:
            publicKeys: |-
              -----BEGIN PUBLIC KEY-----
              MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE...
              -----END PUBLIC KEY-----
      mutateDigest: true
      required: true

该策略强制要求所有来自 gcr.io/etcd-development/etcd 的镜像必须包含有效的 Cosign 签名,且摘要必须与签名时一致。若签名缺失或无效,Pod 创建将被拒绝。