4. 环境准备:安装 Cosign CLI、配置 OIDC 认证与本地密钥对

在实施镜像签名与验证之前,必须完成 Cosign 命令行工具的安装,并根据巡检场景选择合适的认证方式。本章将指导你完成 Cosign CLI 的安装、OIDC 认证配置以及本地密钥对的生成,为后续的签名与验证操作奠定基础。

4.1 Cosign CLI 安装

Cosign 支持多种操作系统和架构,推荐使用官方发布的二进制文件进行安装。以下为常见平台的安装方式:

平台 安装命令 / 步骤 验证命令
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) brew install cosign 或 curl -O -L https://github.com/sigstore/cosign/releases/latest/download/cosign-darwin-amd64 && sudo mv cosign-darwin-amd64 /usr/local/bin/cosign && sudo chmod +x /usr/local/bin/cosign cosign version
macOS (Apple Silicon) brew install cosign 或 curl -O -L https://github.com/sigstore/cosign/releases/latest/download/cosign-darwin-arm64 && sudo mv cosign-darwin-arm64 /usr/local/bin/cosign && sudo chmod +x /usr/local/bin/cosign cosign version
Windows 从 GitHub Releases 下载 cosign-windows-amd64.exe,重命名为 cosign.exe 并加入 PATH cosign version
版本建议: 建议使用 Cosign v2.0.0 及以上版本,以支持完整的 OIDC 认证和密钥管理功能。在容量巡检场景中,推荐使用最新稳定版。

4.2 OIDC 认证配置

OIDC(OpenID Connect)认证是 Sigstore 生态的核心身份验证机制,允许 Cosign 通过短期令牌()进行无密钥签名。在容量巡检的自动化流水线中,OIDC 认证可以避免长期密钥的存储风险。

4.2.1 OIDC 认证流程

Cosign 支持多种 OIDC 身份提供商(IdP),包括 GitHub、GitLab、Google 等。以下为通用配置步骤:

  1. 设置环境变量:配置 OIDC 发行者 URL 和客户端 ID。
  2. 获取令牌:通过 cosign login 或环境变量注入令牌。
  3. 执行签名:Cosign 自动使用令牌向 Fulcio 证书机构请求短期证书。

关键配置示例(GitHub Actions 环境):

# 设置 OIDC 环境变量
export COSIGN_EXPERIMENTAL=1
export COSIGN_OIDC_ISSUER=https://.actions.githubusercontent.com
export COSIGN_OIDC_CLIENT_ID=sigstore

# 使用 OIDC 令牌直接签名(无需本地密钥)
cosign sign --oidc-issuer $COSIGN_OIDC_ISSUER \
            --oidc-client-id $COSIGN_OIDC_CLIENT_ID \
            registry.example.com/my-image:tag

4.2.2 支持的 OIDC 提供商对比

提供商 发行者 URL 适用场景 令牌获取方式
GitHub Actions https://.actions.githubusercontent.com CI/CD 流水线签名 自动注入 ACTIONS_ID__REQUEST_
GitLab CI https://gitlab.com CI/CD 流水线签名 自动注入 CI_JOB_JWT_V2
Google Cloud https://accounts.google.com 手动或服务账号签名 gcloud auth print-identity-
通用 OIDC 自定义 URL 企业 IdP 集成 外部令牌注入
注意: 在容量巡检的离线或内网环境中,OIDC 认证可能无法直接使用。此时应回退到本地密钥对模式,确保签名操作不依赖外部网络。

4.3 本地密钥对生成

当 OIDC 认证不可用或需要长期密钥管理时,使用 Cosign 生成本地密钥对是最直接的方式。密钥对包括私钥(用于签名)和公钥(用于验证)。

4.3.1 生成密钥对

使用 cosign generate-key-pair 命令创建密钥对:

# 生成密钥对(默认使用 ECDSA P-256 算法)
cosign generate-key-pair

# 指定输出路径和算法
cosign generate-key-pair --output-key-prefix my-cosign-key \
                         --key-algorithm ecdsa-p256

# 查看生成的文件
ls -la
# 输出示例:
# -rw-------  1 user user  227 Mar 15 10:00 my-cosign-key.key
# -rw-r--r--  1 user user  178 Mar 15 10:00 my-cosign-key.pub

4.3.2 密钥文件说明

文件 权限 用途 安全要求
cosign.key 或 my-cosign-key.key 600(仅所有者可读写) 签名操作 必须加密存储,禁止提交到代码仓库
cosign.pub 或 my-cosign-key.pub 644(可读) 验证操作 可公开分发,用于验证签名

4.3.3 密钥加密与密码保护

Cosign 支持使用密码对私钥进行加密保护:

# 生成带密码保护的密钥对
cosign generate-key-pair --password

# 系统会提示输入密码(至少 8 个字符)
# 生成的私钥将使用 AES-256-GCM 加密

# 使用加密私钥签名时需要提供密码
cosign sign --key cosign.key \
            --password \
            registry.example.com/my-image:tag
安全最佳实践: 在容量巡检的自动化场景中,建议将私钥密码存储在密钥管理服务(KMS)或 CI/CD 的加密变量中,避免明文硬编码。

4.4 环境验证

完成安装和配置后,执行以下命令验证环境是否就绪:

# 1. 验证 Cosign 版本
cosign version

# 2. 验证 OIDC 配置(如果使用)
echo $COSIGN_EXPERIMENTAL
echo $COSIGN_OIDC_ISSUER

# 3. 验证密钥对存在
ls -la cosign.key cosign.pub

# 4. 测试密钥对可用性(使用公钥验证自身)
cosign verify --key cosign.pub \
              --check-claims=false \
              registry.example.com/test-image:latest

巡检环境就绪检查清单:

  • ✅ Cosign CLI 已安装并可执行 cosign version
  • ✅ OIDC 环境变量已配置(如使用 OIDC 模式)
  • ✅ 本地密钥对已生成且权限正确
  • ✅ 私钥密码已安全存储(如使用密码保护)
  • ✅ 公钥已分发至验证节点
环境准备与认证流程 安装 Cosign CLI 选择认证方式 OIDC 认证 本地密钥对 配置 IdP 环境变量 获取 OIDC 令牌 生成密钥对 加密存储私钥 环境验证就绪

4.5 常见问题与避坑指南

问题 原因 解决方案
cosign: command not found 二进制未加入 PATH 或未安装 检查安装路径,使用 which cosign 定位
Error: OIDC not found 环境变量未设置或令牌过期 重新配置 COSIGN_OIDC_ISSUER 和 COSIGN_OIDC_CLIENT_ID
Error: private key is encrypted 使用加密私钥时未提供密码 添加 --password 参数或设置 COSIGN_PASSWORD 环境变量
Error: key file permissions too open 私钥权限大于 600 执行 chmod 600 cosign.key
安全提醒: 切勿将私钥文件(.key)提交到 Git 仓库或暴露在公共存储中。在容量巡检的共享环境中,建议使用 KMS 或硬件安全模块(HSM)管理私钥。