首页/开发/CI/CD 与发布速查/镜像签名(cosign / Sigstore)
构建与制品管理58 条

镜像签名(cosign / Sigstore)

对镜像摘要签名并支持后续校验:keyless 模式用 OIDC 身份签名,签名与证书进透明日志(Rekor),降低密钥托管负担。

CI/CD 与发布速查开发更新于 2026-10-13

镜像签名是什么

镜像签名(cosign / Sigstore)对镜像的「摘要」签名并支持部署前校验:证明这个镜像确实由受信方构建、内容未被替换。keyless 模式不管理长期私钥:签名时用 OIDC 身份换取 Fulcio 的短时证书,签名记录写入 Rekor 透明日志,任何人可公开审计。校验时必须同时限定签发者身份与 OIDC 发行方,否则「有签名」没有意义。cosign 还能附加 SBOM 与证明(attest),把物料绑到同一摘要上。

基本信息

命令cosign sign / cosign verify(绑定签发者身份与 OIDC 发行方约束)
keylessFulcio 签发短时证书 + Rekor 透明日志,签名记录可公开审计
扩展cosign attach sbom / attest 附加物料与证明
信任要素identity 与 issuer 两个条件必须同时收紧

典型使用场景

  • 发布门禁:部署前校验签名,来源不符直接拒绝。
  • 集群准入:准入控制器校验签名,无有效签名的镜像不允许调度。
  • OpenSSF 类供应链合规:把签名与来源证明纳入发布检查清单。
  • 开源分发:官方镜像可被下游用户独立验证,替代校验和口口相传。
  • 审计取证:Rekor 记录可查询,确认某次签名的发生时间与身份。

keyless 签名与校验

keyless 签名与校验
cosign sign registry.example.com/app@sha256:<digest>
cosign verify registry.example.com/app@sha256:<digest> \
  --certificate-identity-regexp '^https://github.com/org/repo/' \
  --certificate-oidc-issuer https://token.actions.githubusercontent.com
# 校验绑定 digest 而不是 tag

两种模式对比

模式密钥管理适用
keyless无长期私钥,信任来自 OIDC 身份托管 CI 环境
密钥对自管私钥(可存 KMS),轮换自理离线、内网环境
校验要绑定签发者身份与发行方:只验证「有签名」会被任意密钥蒙混,两个条件缺一不可。
签名绑定的是摘要:部署引用也必须用 digest,否则标签被改指后校验对象与实际运行对象不是同一个东西。
校验失败要分类处理:未签名对应流程缺失、签名者不符对应配置错误、摘要不符疑似篡改,三类原因的响应动作完全不同。

易错点

  • 签名后标签被改指其他摘要:签名绑定 digest,部署引用却用 tag,验证与运行对象脱节,统一用 digest 引用。
  • 校验条件收集过宽(任意 issuer/identity):收紧 identity 与 issuer 条件到受信流水线。
  • 签名或校验失败不阻断发布:供应链策略形同虚设,把 verify 做成部署前置门禁。
  • 本地密钥模式把私钥贴进 CI 变量:日志与外部 PR 都可能泄露,改用 keyless 或云 KMS 托管。
  • 只对部分制品签名:未签名通道同样进入生产,发布清单要覆盖全部制品类型。

数据来源与参考

  • Sigstore 文档(docs.sigstore.dev)
  • cosign 文档
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌