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 等。以下为通用配置步骤:
- 设置环境变量:配置 OIDC 发行者 URL 和客户端 ID。
- 获取令牌:通过
cosign login或环境变量注入令牌。 - 执行签名: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 模式)
- ✅ 本地密钥对已生成且权限正确
- ✅ 私钥密码已安全存储(如使用密码保护)
- ✅ 公钥已分发至验证节点
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)管理私钥。