概述目标:对镜像进行加签并在部署前验证签名与身份,防止未授权/篡改镜像进入生产。适用:Kubernetes镜像拉取验签、CI/CD发布签名、供应链合规。核心与实战生成密钥对(本地密钥):cosign generate-key-pair
使用密钥签名镜像:cosign sign --key cosign.key registry.example.com/app/web:1.0.0
验证签名:cosign verify --key cosign.pub registry.example.com/app/web:1.0.0
Keyless签名(OIDC,无密钥):cosign sign registry.example.com/app/web:1.0.1
# 验证并限制身份与发行者
cosign verify \
--certificate-identity "https://github.com/org/repo/.github/workflows/release.yml@refs/heads/main" \
--certificate-oidc-issuer "https://token.actions.githubusercontent.com" \
registry.example.com/app/web:1.0.1
示例CI中发布后加签:# 在GitHub Actions作业中
cosign sign --key $COSIGN_KEY $IMAGE_REF
cosign verify --key $COSIGN_PUB $IMAGE_REF
拉取前验签(部署前检查):cosign verify --key cosign.pub registry.example.com/app/api:2.3.0 && \
kubectl set image deploy/api api=registry.example.com/app/api:2.3.0
验证与监控透明日志与证书:验证输出中包含TLOG与证书信息;检查证书的issuer与subject。供应链策略:在准入控制中强制验签(如Gatekeeper/Kyverno策略);记录拒绝次数与原因。工具版本:统一Cosign版本并在CI中锁定,避免验签不一致。常见误区只做签名不做验签导致形同虚设;必须在部署环节强制验证。Keyless未限制certificate-identity/issuer导致任何OIDC主体可验签通过;需精确匹配。未管理公钥轮换与撤销;应定期轮换并在策略中更新公钥引用。结语通过Cosign加签与严格验签可显著提升镜像供应链安全,结合CI/CD与准入策略实现端到端可追溯与合规。

发表评论 取消回复