3. 环境准备:安装 Cosign CLI、配置 OIDC 认证、初始化密钥对生成与管理
在实施镜像签名与自动化回滚之前,必须完成本地开发环境与云身份认证的初始化。本章将指导你完成 Cosign CLI 安装、OIDC 认证配置以及密钥对生成与管理三个核心步骤。这些是后续所有签名、验证与回滚操作的基础设施。
3.1 安装 Cosign CLI
Cosign 是 Sigstore 项目提供的命令行工具,支持容器镜像签名、验证和存储。根据操作系统选择对应的安装方式。
| 操作系统 | 安装命令 / 方式 | 验证命令 |
|---|---|---|
| Linux (amd64) | |
cosign version |
| macOS (Intel/Apple Silicon) | |
cosign version |
| Windows | |
cosign version |
| 容器化运行 | |
同上 |
版本建议:推荐使用 Cosign v2.0 及以上版本,支持更完善的 OIDC 流程和密钥管理 API。安装后执行
cosign version 确认输出中包含 GitVersion 和 GitCommit 信息。
3.2 配置 OIDC 认证
OIDC(OpenID Connect)是 Sigstore 无密钥签名流程的核心。Cosign 支持多种 OIDC 提供商,包括 Google、GitHub、Microsoft 以及自建 Dex 等。配置 OIDC 认证后,Cosign 可以自动获取短期身份令牌,无需手动管理长期密钥。
3.2.1 OIDC 认证流程架构
下图展示了 Cosign 通过 OIDC 与 Sigstore Fulcio 证书颁发机构交互的完整流程:
3.2.2 配置 OIDC 提供商
Cosign 支持多种 OIDC 提供商。以下列出常见配置方式:
- Google:默认支持,无需额外配置。Cosign 会自动打开浏览器进行 Google 账号认证。
- GitHub:在 GitHub Actions 中运行时自动注入
ACTIONS_ID__REQUEST_环境变量,Cosign 自动识别。 - Microsoft:通过
--identity-参数传入 Azure AD 或 Microsoft 账户的 ID 。 - 自建 OIDC (Dex/LDAP):通过
--oidc-issuer和--oidc-client-id指定自定义提供商。
关键配置示例:在 CI/CD 环境中,通常使用无交互模式:
# GitHub Actions 示例
cosign sign --oidc-issuer https://.actions.githubusercontent.com \
--oidc-client-id "sigstore" \
ghcr.io/your-org/your-image:tag
3.3 初始化密钥对生成与管理
虽然 Cosign 推荐无密钥签名,但在某些场景(如离线环境、自建 PKI、合规要求)下仍需使用传统密钥对。Cosign 支持生成和管理 RSA、ECDSA 和 Ed25519 密钥对。
3.3.1 生成密钥对
使用 cosign generate-key-pair 命令生成密钥对。Cosign 会自动将私钥加密存储到本地文件系统,公钥则用于验证。
# 生成默认密钥对(ECDSA P-256)
cosign generate-key-pair
# 指定密钥算法为 Ed25519
cosign generate-key-pair --key-type ed25519
# 指定输出路径
cosign generate-key-pair --output-key-prefix ./my-cosign-key
执行后会在当前目录生成以下文件:
| 文件 | 说明 | 安全等级 |
|---|---|---|
cosign.key |
加密的私钥文件(受密码保护) | 机密,不可泄露 |
cosign.pub |
公钥文件(明文) | 公开,用于验证 |
安全警告:私钥文件
cosign.key 必须妥善保管。建议使用硬件安全模块(HSM)或云密钥管理服务(KMS)存储私钥。切勿将私钥提交到版本控制系统。
3.3.2 密钥管理操作
Cosign 提供完整的密钥生命周期管理能力:
- 查看公钥:
cosign public-key --key cosign.key(需要输入私钥密码) - 更改私钥密码:
cosign change-key-password --key cosign.key - 上传公钥到透明日志:
cosign upload public-key --key cosign.pub(可选,用于公开验证) - 从 KMS 加载密钥:
cosign sign --key gcpkms://projects/.../locations/.../keyRings/.../cryptoKeys/.../versions/1
3.3.3 密钥对管理架构
下图展示了密钥对从生成到使用的完整生命周期:
3.4 验证环境准备
完成上述步骤后,执行以下命令验证环境是否就绪:
# 验证 Cosign 版本
cosign version
# 验证密钥对是否存在
ls -la cosign.key cosign.pub
# 测试 OIDC 认证(交互模式)
cosign sign --oidc-issuer https://accounts.google.com \
--oidc-client-id "sigstore" \
--dry-run \
ghcr.io/your-org/test-image:latest
# 测试密钥签名(需要输入密码)
echo "test" | cosign sign-blob --key cosign.key -
快速检查清单:
- ✅ Cosign CLI 已安装并可执行
cosign version - ✅ OIDC 提供商可访问(Google/GitHub/自建)
- ✅ 密钥对文件已生成(
cosign.key+cosign.pub) - ✅ 私钥密码已记录到安全密码管理器
- ✅ 公钥已分发到需要验证的团队或系统
环境准备完成后,即可进入下一阶段:使用 Cosign 对容器镜像进行签名,并配置自动化验证策略。密钥对和 OIDC 认证将作为后续所有签名操作的身份基础。