2. 制品类型与签名基础
在平台工程 IDP 中,制品签名是保障软件供应链安全的第一道防线。本章将系统梳理常见制品类型、数字签名核心原理以及签名与验签的标准流程,为后续构建可观测的签名链路奠定基础。
2.1 常见制品类型
不同制品类型具有不同的打包结构、元数据格式和分发方式,签名策略也因此有所差异。下表对比了四种主流制品类型的关键特征:
| 制品类型 | 包格式 | 元数据文件 | 签名方式 | 典型工具 |
|---|---|---|---|---|
| 容器镜像 | OCI Image Manifest | config.json, manifest.json | 镜像层摘要签名 + 签名对象 | Cosign, Notation |
| Helm Chart | tgz 压缩包 | Chart.yaml, values.yaml | prov 文件 + GPG 签名 | Helm GPG, Cosign |
| JAR 包 | ZIP 格式 | META-INF/MANIFEST.MF | JAR 签名 (jarsigner) | jarsigner, Maven GPG |
| NPM 包 | tgz 压缩包 | package.json | npm 包签名 + 完整性哈希 | npm audit, Sigstore |
关键提示: 容器镜像和 Helm Chart 是云原生 IDP 中最常见的制品类型,建议优先实现这两类制品的签名链路。JAR 包和 NPM 包在传统应用和前端组件中仍广泛使用,不可忽视。
2.2 数字签名原理
数字签名是制品完整性验证和来源认证的核心技术,其底层依赖两个关键机制:非对称加密和哈希摘要。
2.2.1 非对称加密
非对称加密使用一对密钥:私钥(Private Key)和公钥(Public Key)。私钥由签名者秘密保管,用于生成签名;公钥公开发布,用于验证签名。这种设计确保了即使公钥被广泛分发,也无法反向推导出私钥。
- 私钥签名: 签名者使用私钥对制品的哈希摘要进行加密,生成签名数据。
- 公钥验签: 验证者使用对应的公钥解密签名,并与重新计算的哈希摘要比对。
2.2.2 哈希摘要
哈希摘要(Digest)是将任意长度的制品数据通过哈希函数(如 SHA-256)映射为固定长度的唯一值。哈希函数具有以下特性:
- 单向性: 无法从摘要反推出原始数据。
- 抗碰撞性: 极难找到两个不同制品具有相同摘要。
- 敏感性: 制品内容发生微小变化,摘要将完全改变。
核心公式: 签名 = 私钥加密( SHA-256( 制品内容 ) )
2.3 签名与验签流程
下图展示了完整的签名与验签流程,包含签名者(Producer)和验证者(Consumer)两个角色,以及哈希计算、签名生成、签名分发、验签比对四个核心步骤。
2.4 签名链路的关键要素
在 IDP 中构建制品签名链路时,需要关注以下关键要素:
| 要素 | 说明 | 推荐实践 |
|---|---|---|
| 密钥管理 | 私钥的安全存储与生命周期管理 | 使用 HSM 或云 KMS 管理私钥,定期轮换 |
| 签名策略 | 定义哪些制品需要签名、签名级别 | 生产环境制品强制签名,开发环境可选 |
| 签名存储 | 签名数据与制品的关联存储方式 | 使用 OCI 签名仓库或制品仓库的签名扩展 |
| 验签策略 | 部署或运行时自动验证签名 | 在 CI/CD 流水线和准入控制器中集成验签 |
| 审计与可观测 | 记录签名与验签事件,暴露 Prometheus 指标 | 采集签名成功率、验签延迟、密钥过期等指标 |
安全警告: 私钥泄露将导致整个签名体系失效。务必使用硬件安全模块(HSM)或云密钥管理服务(KMS)保护私钥,禁止将私钥硬编码在代码或配置文件中。
2.5 签名链路中的 Prometheus 指标采集点
在制品签名链路中,以下关键节点适合暴露 Prometheus 指标,用于监控签名体系的健康状态:
- 签名操作: 签名请求总数、签名成功数、签名失败数、签名耗时。
- 验签操作: 验签请求总数、验签通过数、验签失败数、验签耗时。
- 密钥状态: 密钥是否过期、密钥轮换次数、密钥访问错误数。
- 制品分发: 已签名制品数量、未签名制品数量、制品分发延迟。
实践建议: 在签名和验签的入口处添加 Prometheus 客户端埋点,使用 Histogram 类型记录耗时分布,使用 Counter 类型记录成功/失败计数,便于后续构建 Grafana 监控面板。