概述目标:对镜像进行加签并在部署前验证签名与身份,防止未授权/篡改镜像进入生产。适用:Kubernetes镜像拉取验签、CI/CD发布签名、供应链合规。核心与实战生成密钥对(本地密钥):cosign generate-key-pair # 生成 cosign.key 与 cosign.pub 使用密钥签名镜像: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与准入策略实现端到端可追溯与合规。

发表评论 取消回复