Cosign工具镜像供应链信任边界驱动开发与调优 - 第2节
2.1 Cosign 是什么
Cosign 是 Sigstore 项目下的一个开源工具,专为容器镜像和软件制品提供签名、验证和存储能力。它解决了“谁签的、签的什么、签完有没有被改”这三个核心信任问题,是云原生供应链安全中实现“非侵入式信任”的关键组件。
核心定位:Cosign 不要求你修改 Dockerfile 或镜像构建流程,它通过 OCI 制品扩展机制将签名数据附着在镜像仓库中,实现签名与镜像的“同仓共存”。
2.2 核心功能
| 功能 | 说明 | 典型命令 |
|---|---|---|
| 签名 | 使用私钥或 OIDC 身份对镜像摘要进行数字签名,生成签名载荷 | cosign sign |
| 验证 | 使用公钥或 OIDC 身份验证签名是否匹配镜像摘要,并检查签名者身份 | cosign verify |
| 存储 | 将签名、证书、时间戳等元数据以 OCI 制品形式存入镜像仓库 | 自动关联,无需额外命令 |
| 发现 | 通过仓库标签或 OCI 引用自动查找与镜像关联的签名 | cosign triangulate |
2.3 与 Docker / OCI 镜像的关系
Cosign 不修改镜像本身,而是利用 OCI 镜像规范的扩展能力,将签名数据作为独立的 OCI 制品(Artifact)存储在同一个仓库中。这种设计保证了镜像的原始性,同时让签名与镜像保持强关联。
2.4 安装与 CLI 初探
2.4.1 安装方式
| 平台 | 命令 |
|---|---|
| Linux (amd64) | curl -sL https://github.com/sigstore/cosign/releases/latest/download/cosign-linux-amd64 -o /usr/local/bin/cosign && chmod +x /usr/local/bin/cosign |
| macOS (Homebrew) | brew install cosign |
| Windows (Scoop) | scoop install cosign |
| 容器运行 | docker run --rm -v $HOME/.docker:/root/.docker gcr.io/projectsigstore/cosign |
2.4.2 验证安装
cosign version
______ ______ ______ ______ ______ ______
/ _____| / _____/ / _____/ / _____/ / ____/ / _____/
( (____ ( (____ ( (____ ( (____ ( (___ ( (____
\____ \ \____ \ \____ \ \____ \ \___ \ \____ \
_____) ) _____) ) _____) ) _____) ) ____) ) _____) )
(______/ (______/ (______/ (______/ (______/ (______/
Cosign Version: v2.2.0
Git Commit: abcdefg
2.4.3 快速体验:签名与验证
以下命令演示对一个测试镜像进行签名和验证的完整流程:
# 1. 生成密钥对(仅演示用,生产推荐 OIDC)
cosign generate-key-pair
# 2. 对镜像签名(需要镜像已推送到仓库)
cosign sign --key cosign.key registry.example.com/my-image:v1
# 3. 验证签名
cosign verify --key cosign.pub registry.example.com/my-image:v1
# 输出示例:
# Verification for registry.example.com/my-image:v1 --
# The following checks were performed on each of these signatures:
# - The cosign claims were validated
# - The signatures were verified using the specified public key
# - Any certificates were verified against the Fulcio roots.
提示:Cosign v2.x 默认使用 OCI 引用(Referrers API)存储签名,不再依赖镜像标签。这避免了标签污染,并提升了签名发现的可靠性。
2.5 签名存储机制
Cosign 支持两种签名存储模式,理解它们的差异对生产部署至关重要:
| 模式 | 存储方式 | 优点 | 缺点 |
|---|---|---|---|
| OCI 引用(推荐) | 通过 Referrers API 将签名作为独立 Manifest 存储 | 标准、可发现、无标签冲突 | 需要仓库支持 Referrers API |
| 标签模式(兼容) | 将签名存储在 sha256-xxx.sig 标签下 |
兼容旧仓库 | 标签数量膨胀、可发现性差 |
注意:如果镜像仓库不支持 OCI 引用(如某些私有仓库或旧版本 Harbor),Cosign 会自动降级到标签模式。建议在部署前使用
cosign triangulate 验证仓库的兼容性。