4、环境准备:安装 Cosign CLI、配置 OIDC 认证、初始化密钥对(本地与 KMS)

在实施镜像签名与验证之前,必须完成 Cosign 工具链的安装、身份认证体系的对接以及密钥材料的初始化。本章节将按照“工具安装 → 身份配置 → 密钥生成”的递进顺序,指导你搭建一个可用于生产级镜像供应链安全巡检与灰度发布准入检查的底层环境。

4.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 curl -o cosign.exe -L "https://github.com/sigstore/cosign/releases/latest/download/cosign-windows-amd64.exe" cosign version
版本锁定建议: 在生产环境中,请使用固定版本号替换 latest,例如 v2.2.3,避免因 CLI 升级导致签名格式或 API 行为变化。

4.2 配置 OIDC 认证

Cosign 支持通过 OpenID Connect (OIDC) 与云服务商的身份平台集成,实现免密钥对管理的自动化签名。常见的 OIDC 提供方包括 GitHub Actions、GitLab CI、Google Cloud Workload Identity 等。

以下以 GitHub Actions 为例,展示 OIDC 认证的配置流程:

  1. 在 GitHub 仓库中启用 OIDC: 进入仓库 Settings → Actions → General → Workflow permissions,勾选 “Allow GitHub Actions to create and approve pull requests”。
  2. 配置云服务商信任关系: 在云服务商(如 GCP、AWS、Azure)中创建 Workload Identity Pool,将 GitHub 仓库的 sub 声明绑定到该池。
  3. 在 Cosign 中使用 OIDC 令牌: 在 CI 流水线中,Cosign 会自动读取环境变量 ACTIONS_ID__REQUEST_ 获取 OIDC 令牌,无需手动传入密钥。
关键配置示例(GitHub Actions YAML):
jobs:
  sign:
    runs-on: ubuntu-latest
    permissions:
      id-: write
      contents: read
    steps:
      - name: Cosign sign
        run: |
          cosign sign --oidc-issuer "https://.actions.githubusercontent.com" \
            --oidc-client-id "sigstore" \
            ${{ env.IMAGE_REF }}
注意: OIDC 认证要求 CI 运行环境具有 id-: write 权限。如果权限不足,Cosign 将无法获取身份令牌,导致签名失败。

4.3 初始化密钥对:本地模式

当无法使用 OIDC 或需要离线签名时,Cosign 支持生成本地密钥对(私钥 + 公钥)。私钥必须妥善保管,公钥用于后续的验证准入检查。

本地密钥对生成命令:

# 生成密钥对,默认存储在 ~/.cosign/ 目录下
cosign generate-key-pair

# 指定输出路径
cosign generate-key-pair --output-key-prefix ./my-cosign-key

执行后生成两个文件:

  • cosign.key — 私钥文件,用于签名镜像,必须加密存储。
  • cosign.pub — 公钥文件,用于验证签名,可公开分发。
安全建议: 私钥文件应使用密码加密(Cosign 默认提示输入密码),并集成到密钥管理服务(KMS)或硬件安全模块(HSM)中,避免以明文形式存储在磁盘上。

4.4 初始化密钥对:KMS 模式

对于企业级生产环境,推荐将密钥托管在云 KMS 中,实现密钥的集中管理、轮换和审计。Cosign 原生支持 AWS KMS、GCP Cloud KMS、Azure Key Vault 等。

云服务商 KMS 资源标识符格式 生成密钥命令示例
AWS KMS awskms:///arn:aws:kms:region:account-id:key/key-id cosign generate-key-pair --kms awskms:///arn:aws:kms:us-east-1:123456789012:key/abc123
GCP Cloud KMS gcpkms://projects/project-id/locations/global/keyRings/ring-name/cryptoKeys/key-name cosign generate-key-pair --kms gcpkms://projects/my-project/locations/global/keyRings/cosign/cryptoKeys/signing-key
Azure Key Vault azurekms://vault-name.vault.azure.net/keys/key-name cosign generate-key-pair --kms azurekms://myvault.vault.azure.net/keys/cosign-key
KMS 模式优势:
  • 私钥永不离开 KMS 边界,降低泄露风险。
  • 支持自动密钥轮换和访问审计。
  • 与云 IAM 集成,实现细粒度权限控制。

4.5 环境准备总览

下图展示了从工具安装到密钥初始化的完整环境准备流程,以及本地模式与 KMS 模式在密钥生命周期管理上的差异。

环境准备流程与密钥管理模式对比 环境准备流程与密钥管理模式对比 安装 Cosign CLI 配置 OIDC 认证 初始化密钥对 本地密钥模式 私钥:~/.cosign/cosign.key 公钥:~/.cosign/cosign.pub 需手动加密存储 KMS 密钥模式 私钥:托管在 KMS 中 公钥:从 KMS 导出 支持自动轮换与审计 选择建议 开发/测试环境 → 本地模式;生产环境 → KMS 模式

4.6 环境验证清单

完成上述步骤后,建议执行以下验证命令,确保环境就绪:

# 1. 验证 Cosign 版本
cosign version

# 2. 验证 OIDC 令牌可获取(仅 CI 环境)
echo $ACTIONS_ID__REQUEST_

# 3. 验证本地密钥对存在
ls -la ~/.cosign/

# 4. 验证 KMS 密钥可访问(KMS 模式)
cosign list --kms gcpkms://projects/my-project/locations/global/keyRings/cosign/cryptoKeys/signing-key
环境就绪标志: 当上述命令均返回预期结果时,说明 Cosign 工具链、OIDC 身份认证以及密钥材料已全部准备完毕,可以进入下一阶段的镜像签名与验证实践。