目标
为了供应链安全,发布产物应带有可验证的签名与来源证明。本工作流以固定提交与锁定依赖确定性构建,对产物做无密钥签名并附加来源证明,把签名与证明与产物一起推送存放,最后在部署时以签名与来源证明校验作为门禁,确保只有预期工作流产出的产物能上线。
步骤要点
- 以固定提交与锁定依赖确定性构建。
- 无密钥签署产物并附加来源证明。
- 把签名与证明与产物一起推送存放。
- 在部署时以签名与证明做门禁。
cosign sign --yes ghcr.io/org/app@${DIGEST}
cosign attest --yes --predicate provenance.json --type slsaprovenance ghcr.io/org/app@${DIGEST}
验证
按顺序执行上述步骤后,逐项确认每个步骤的预期状态均已满足;只有全部预期状态成立,才认为本流程完成。若某一步未达到预期状态,应先按排错提示排查,不要跳过继续,以免掩盖问题。
排错提示
- 按标签签名无法防止产物被替换,应按摘要。
- 证明缺少提交信息即不可验证。
- 仅告警模式会让未签名产物溜过。
适用边界
- 需要支持 OIDC 的 CI。
- 证明需包含提交与构建信息。