在GCR/GAR中签名Docker镜像遇错误,求解决方案
在Google Cloud GCR/GAR中签名Docker镜像的可行方案
你遇到的问题是因为docker trust依赖的Notary服务与Google Cloud的容器仓库(GCR/GAR)没有官方集成,默认Notary服务器无法识别Google Cloud项目,因此触发报错。以下是Google官方支持的两种镜像签名方案:
方法一:使用Cosign(推荐)
Cosign是CNCF开源工具,Google官方支持用于GCR/GAR的镜像签名,操作简单且支持无密钥模式:
- 安装Cosign:
- macOS:
brew install cosign - 通用方式:下载对应系统的二进制文件,或通过Go安装:
go install github.com/sigstore/cosign/v2/cmd/cosign@latest
- macOS:
- 登录容器仓库:
- GAR:
gcloud auth configure-docker <你的区域>-docker.pkg.dev - GCR:
gcloud auth configure-docker gcr.io
- GAR:
- 签名镜像:
- 无密钥模式(推荐,基于Google账号身份):直接执行
cosign sign <镜像地址>:<标签>,会自动跳转至Google账号完成身份验证,无需本地存储密钥 - 密钥对模式:先生成密钥对
cosign generate-key-pair,再执行cosign sign --key cosign.key <镜像地址>:<标签>
- 无密钥模式(推荐,基于Google账号身份):直接执行
- 验证签名:
- 无密钥模式:
cosign verify <镜像地址>:<标签> - 密钥对模式:
cosign verify --key cosign.pub <镜像地址>:<标签>
- 无密钥模式:
方法二:使用Google Cloud Binary Authorization
适合需要与Google Cloud部署策略深度集成的场景(比如限制只有签名镜像能部署到GKE):
- 启用API:在Google Cloud控制台启用Binary Authorization API和Container Analysis API
- 创建签名密钥:在Cloud KMS中创建不对称密钥对(推荐RSA-SHA256算法)
- 获取镜像摘要:
gcloud artifacts docker images describe <镜像地址>:<标签> --format='value(image_summary.digest)' - 生成镜像签名:
gcloud container binauthz signatures create --keyversion projects/<项目ID>/locations/<区域>/keyRings/<密钥环名>/cryptoKeys/<密钥名>/cryptoKeyVersions/<版本号> --artifact-url <镜像地址>@<刚才获取的摘要> - 配置Binary Authorization策略,设置只有携带有效签名的镜像才能通过部署校验
内容的提问来源于stack exchange,提问作者Dsan
相关产品推荐
相关产品推荐

