3. 环境准备:安装 Cosign CLI、配置 OIDC 认证、初始化密钥对生成与管理

在实施镜像签名与自动化回滚之前,必须完成本地开发环境与云身份认证的初始化。本章将指导你完成 Cosign CLI 安装、OIDC 认证配置以及密钥对生成与管理三个核心步骤。这些是后续所有签名、验证与回滚操作的基础设施。

3.1 安装 Cosign CLI

Cosign 是 Sigstore 项目提供的命令行工具,支持容器镜像签名、验证和存储。根据操作系统选择对应的安装方式。

操作系统 安装命令 / 方式 验证命令
Linux (amd64)
curl -O -L "https://github.com/sigstore/cosign/releases/latest/download/cosign-linux-amd64"
sudo mv cosign-linux-amd64 /usr/local/bin/cosign
sudo chmod +x /usr/local/bin/cosign
cosign version
macOS (Intel/Apple Silicon)
brew install cosign
cosign version
Windows
# 使用 winget
winget install cosign
cosign version
容器化运行
docker run --rm -v $HOME/.cosign:/root/.cosign gcr.io/projectsigstore/cosign:latest 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 证书颁发机构交互的完整流程:

Cosign OIDC 认证与签名流程 Cosign OIDC 认证与签名流程 开发者 / CI 环境 Cosign CLI OIDC Provider Fulcio CA Rekor 透明日志 镜像仓库 执行 cosign sign 请求身份令牌 返回 ID 提交 ID 请求证书 返回签名证书 记录签名到透明日志 推送签名附件 说明:OIDC 流程使 Cosign 无需长期密钥即可完成签名,证书由 Fulcio 动态签发并记录到 Rekor 透明日志

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 密钥对管理架构

下图展示了密钥对从生成到使用的完整生命周期:

Cosign 密钥对生命周期管理 Cosign 密钥对生命周期管理 1. 生成密钥对 cosign generate-key-pair 2. 安全存储 本地 / KMS / HSM 3. 签名镜像 cosign sign --key 4. 验证签名 cosign verify --key 5. 密钥轮换 生成新对 / 废弃旧对 6. 吊销 / 归档 标记为不可信 密钥管理最佳实践 • 私钥必须加密存储,建议使用 KMS 或 HSM 保护 • 定期轮换密钥(建议每 90 天),并维护公钥信任列表

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 认证将作为后续所有签名操作的身份基础。