4. 制品签名链路概述:从代码提交到镜像签名验证的完整流程
在云原生多租户环境中,制品签名链路是保障供应链安全的核心防线。本章将完整拆解从开发者提交代码到生产环境验证镜像签名的全链路流程,明确每个环节的信任锚点、签名时机与验证边界,为后续压测场景中的容量基线校准提供流程上下文。
4.1 链路全景:四个阶段与信任传递
制品签名链路可划分为四个连续阶段,每个阶段完成一次信任状态的转换或增强:
| 阶段 | 起点 | 终点 | 信任锚点 | 签名/验证动作 |
|---|---|---|---|---|
| ① 代码提交与CI触发 | 开发者 Git Push | CI Pipeline 启动 | Git Commit GPG 签名 | 验证提交者身份与代码完整性 |
| ② 镜像构建与签名 | Docker Build 完成 | 镜像推送至 Registry | 私钥签名 / KMS 签名 | 对镜像 Digest 进行 Cosign / Notation 签名 |
| ③ 部署策略与签名验证 | Argo CD 检测到新镜像 | Kubernetes 资源 Apply | 公钥 / 策略引擎 | 验证签名是否匹配允许的镜像仓库与标签模式 |
| ④ 运行时持续验证 | Pod 启动 | 准入控制器 / 审计日志 | 策略代理 (OPA / Kyverno) | 运行时验证签名是否仍有效,记录审计事件 |
压测关注点: 阶段②和③是签名链路的性能瓶颈高发区。镜像签名操作涉及非对称加密计算,验证操作涉及公钥拉取与策略匹配,在高并发多租户场景下,签名吞吐量与验证延迟直接影响 Argo CD 的部署效率。
4.2 阶段详解:代码提交到镜像签名验证
4.2.1 代码提交与 CI 触发
- GPG 签名验证: Git 提交必须携带 GPG 签名,CI 系统(如 GitLab CI / GitHub Actions)在触发 Pipeline 前验证签名指纹是否在组织的信任公钥列表中。
- SBOM 生成: CI 在构建前自动生成软件物料清单(SBOM),为后续签名提供可追溯的依赖清单。
- 触发条件: 仅当提交签名验证通过且分支策略匹配时,才触发镜像构建 Pipeline。
4.2.2 镜像构建与签名
- 构建阶段: Dockerfile 执行多阶段构建,生成最终镜像 Digest(SHA256)。
- 签名时机: 镜像推送至 Registry 前,CI 使用 Cosign(Sigstore)或 Notation(Notary v2)对镜像 Digest 进行签名。
- 签名存储: 签名以 OCI 制品形式存储在 Registry 中,与镜像位于同一仓库,通过 Tag 或 Referrers API 关联。
- 密钥管理: 私钥由 KMS(如 AWS KMS、HashiCorp Vault)托管,CI 仅通过临时令牌调用签名接口,不接触原始私钥。
4.2.3 部署策略与签名验证
- Argo CD 检测: Argo CD 通过 Webhook 或轮询检测到新镜像 Tag 或 Digest 更新。
- 签名验证触发: Argo CD 调用策略引擎(如 OPA / Kyverno)执行签名验证策略。
- 验证内容:
- 镜像 Digest 是否与签名中的 Digest 一致。
- 签名者身份是否在允许的信任列表中。
- 签名是否在有效期内(时间戳或 TUF 元数据)。
- 决策结果: 验证通过则继续部署;验证失败则拒绝 Apply,并记录审计事件。
4.2.4 运行时持续验证
- 准入控制器: Kubernetes 集群部署 Kyverno 或 OPA Gatekeeper,在 Pod 创建时再次验证镜像签名。
- 审计日志: 所有签名验证结果(通过/拒绝/错误)写入审计日志,供安全团队事后分析。
- 证书轮换: 签名证书或公钥定期轮换,运行时验证需检查证书是否已被吊销。
4.3 完整链路流程图
下图展示了从代码提交到镜像签名验证的完整流程,包含关键节点与信任传递关系:
4.4 信任传递模型与安全边界
签名链路的本质是信任的逐级传递。每个阶段都建立在前一阶段的信任基础上,形成一条完整的信任链:
信任链: Git GPG 签名 → CI 身份认证 → 镜像签名私钥 → 策略引擎公钥 → 运行时准入控制
安全边界定义:
- 边界1: 代码提交阶段。GPG 签名验证失败则阻断 Pipeline,防止恶意代码进入构建流程。
- 边界2: 镜像签名阶段。私钥泄露会导致整个信任链崩塌,必须使用 KMS 托管并启用密钥轮换。
- 边界3: 部署验证阶段。策略引擎的规则配置错误可能导致未签名镜像被部署,需定期审计策略。
- 边界4: 运行时阶段。准入控制器作为最后一道防线,即使 CI/CD 链路被绕过,仍可阻止未签名镜像运行。
4.5 多租户隔离下的签名链路挑战
在多租户环境中,签名链路需要额外考虑隔离性:
| 挑战 | 描述 | 影响 |
|---|---|---|
| 密钥隔离 | 每个租户使用独立的签名密钥,KMS 需支持租户级权限隔离 | 密钥管理复杂度上升,签名操作需携带租户上下文 |
| 策略冲突 | 不同租户的签名验证策略可能冲突(如允许的镜像仓库列表重叠) | 策略引擎需支持租户级命名空间隔离 |
| 性能争抢 | 多个租户同时触发签名验证,KMS 和策略引擎成为共享瓶颈 | 验证延迟增加,影响 Argo CD 部署速度 |
| 审计隔离 | 签名验证日志需按租户分离,避免数据泄露 | 日志系统需支持租户标签和访问控制 |
压测前置条件: 在进行容量基线校准时,必须模拟多租户并发场景,分别测量每个租户的签名验证延迟和吞吐量,避免单租户测试掩盖共享资源争抢问题。
4.6 链路关键组件与版本兼容性
以下组件在签名链路中承担核心角色,压测前需确认版本兼容性:
- Cosign v2.x / Notation v1.x: 镜像签名工具,支持 OCI 制品签名存储。
- Sigstore Fulcio / Rekor: 证书颁发与透明日志(可选,用于公钥发现)。
- Kyverno v1.10+ / OPA Gatekeeper v3.14+: 策略引擎,支持镜像签名验证策略。
- Argo CD v2.8+: 支持通过 Config Management Plugin 或 Webhook 集成签名验证。
- HashiCorp Vault / AWS KMS: 密钥管理服务,提供签名私钥的托管与访问控制。
版本不匹配可能导致签名格式解析失败、策略语法错误或性能退化,压测前应统一版本基线。