验证镜像签名
API7 使用开源容器镜像签名工具 Cosign 保护 Docker 容器镜像。所有签名都存储在公共 Docker Hub 仓库 api7/notary 中。构建和发布流程通过 GitHub Actions 使用 GitHub 的 OIDC 身份提供商进行无密钥签名,确保镜像真实且未被修改。
部署前验证镜像签名可以保护组织免受供应链攻击,并确保运行的每个容器都由 API7.ai 生成。
前置条件
在执行验证的计算机上安装以下工具:
验证流程
1. 设置签名仓库
API7 签名与镜像分开存储。将 Cosign 指向专用签名仓库:
export COSIGN_REPOSITORY=api7/notary
2. 获取镜像摘要
使用 regctl 获取待验证镜像的 SHA-256 摘要:
regctl manifest digest api7/api7-ee-3-gateway:3.9.1
输出示例:
sha256:61a531d7ca8339712888bfdf7ad7af6d63f0e423e466818be96f0aaa3fc89578
3. 运行 Cosign 验证
对固定到摘要的镜像执行 cosign verify 命令,并指定签署镜像的 GitHub Actions 工作流的证书身份:
cosign verify \
'api7/api7-ee-3-gateway:3.9.1@sha256:61a531d7ca8339712888bfdf7ad7af6d63f0e423e466818be96f0aaa3fc89578' \
--certificate-oidc-issuer='https://token.actions.githubusercontent.com' \
--certificate-identity-regexp='https://github.com/api7/api7-ee-3-gateway/.github/workflows/push-release-image.yaml'
验证成功表示:
- Cosign 声明已通过验证。
- 签名已记录在公共透明日志中。
- 代码签名证书已通过可信证书颁发机构验证。