4、环境准备:安装Cosign、配置OIDC身份提供商、初始化Rekor实例
在开始集成Sigstore身份验证与镜像回滚策略之前,必须完成底层工具链的部署与配置。本章节将指导你完成三个核心组件的环境准备:Cosign(签名/验证客户端)、OIDC身份提供商(OIDC IdP,用于自动化身份绑定)以及Rekor(透明性日志实例,用于记录签名元数据)。
4.1 安装Cosign CLI
Cosign 是 Sigstore 生态中的客户端工具,负责对容器镜像进行签名、验证和存储。推荐使用官方发布的二进制文件进行安装,以确保版本一致性和签名校验能力。
| 安装方式 | 适用场景 | 命令/步骤 |
|---|---|---|
| 二进制下载(推荐) | CI/CD 环境、生产节点 | curl -O -L "https://github.com/sigstore/cosign/releases/latest/download/cosign-linux-amd64" && chmod +x cosign-linux-amd64 && sudo mv cosign-linux-amd64 /usr/local/bin/cosign |
| Homebrew(macOS) | 本地开发工作站 | brew install cosign |
| Go 源码编译 | 定制化构建或调试 | go install github.com/sigstore/cosign/v2/cmd/cosign@latest |
安装完成后,执行版本验证命令:
cosign version
输出应包含类似 GitVersion: v2.4.0 的信息。若出现 command not found,请检查 /usr/local/bin 是否在 $PATH 中。
4.2 配置OIDC身份提供商
OIDC IdP 是 Sigstore 无密钥签名流程的核心。Cosign 通过 OIDC 协议从 IdP 获取短期身份令牌,并将其绑定到签名证书中。常见的 IdP 包括 GitHub、GitLab、Google 以及自建的 Dex 或 Keycloak。
以下以 GitHub OIDC 为例,展示配置步骤:
- 创建 GitHub OIDC 应用:在 GitHub 组织或用户 Settings → Developer settings → OIDC 中,添加一个新的 OIDC 应用。回调 URL 填写
http://localhost:8080/auth/callback(本地开发)或你的 CI 回调地址。 - 获取 Issuer URL 与 Client ID:GitHub 的 Issuer URL 固定为
https://.actions.githubusercontent.com。Client ID 由 GitHub 自动生成。 - 配置 Cosign 使用 OIDC:设置环境变量或 Cosign 配置文件,指定 IdP 端点。
# 设置 GitHub OIDC 环境变量
export COSIGN_OIDC_ISSUER=https://.actions.githubusercontent.com
export COSIGN_OIDC_CLIENT_ID=your-client-id
# 可选:指定额外的 OIDC 作用域
export COSIGN_OIDC_EXTRA_SCOPES="openid,email"
对于自建 IdP(如 Keycloak),需要额外配置 JWKS 端点 和 令牌签名算法。以下表格对比了常见 IdP 的关键参数:
| IdP 类型 | Issuer URL 示例 | 默认令牌格式 | 是否需要额外配置 |
|---|---|---|---|
| GitHub Actions | https://.actions.githubusercontent.com |
JWT (RS256) | 否 |
| GitLab CI | https://gitlab.com |
JWT (RS256) | 否 |
| Google Cloud IAM | https://accounts.google.com |
JWT (RS256) | 需绑定服务账号 |
| Keycloak(自建) | https://keycloak.example.com/realms/myrealm |
JWT (RS256/ES256) | 需配置 JWKS 端点 |
sub 声明(通常是 repo:owner/repo:ref:refs/heads/main)会被 Cosign 提取并嵌入到签名证书的 SAN(Subject Alternative Name)中。后续验证时,策略引擎会检查 SAN 是否匹配允许的 OIDC 身份。
4.3 初始化Rekor实例
Rekor 是 Sigstore 的透明性日志服务,用于存储所有签名事件的元数据(包括签名哈希、证书指纹、时间戳等)。生产环境中建议使用 Sigstore 公共 Rekor 实例(https://rekor.sigstore.dev),但为了故障排查和离线场景,你可能需要部署私有 Rekor 实例。
以下步骤演示如何使用 Docker Compose 快速启动一个本地 Rekor 实例:
- 创建 Docker Compose 文件:
version: '3.8'
services:
rekor-server:
image: ghcr.io/sigstore/rekor-server:v1.3.6
ports:
- "3000:3000"
environment:
- REKOR_ADDRESS=0.0.0.0:3000
- REKOR_STORAGE_TYPE=memory
- REKOR_TRUSTED_PUBLIC_KEYS_PATH=/etc/rekor/keys
volumes:
- ./keys:/etc/rekor/keys
command: ["rekor-server", "serve"]
rekor-cli:
image: ghcr.io/sigstore/rekor-cli:v1.3.6
entrypoint: ["/bin/sh"]
stdin_open: true
tty: true
- 启动服务:
docker-compose up -d rekor-server
- 验证 Rekor 实例状态:
curl -s http://localhost:3000/api/v1/log | jq .
成功响应应包含 rootHash、treeSize 等字段,表示日志已初始化。
- 配置 Cosign 使用私有 Rekor:
export COSIGN_REKOR_URL=http://localhost:3000
export COSIGN_REKOR_PUBLIC_KEY_PATH=/path/to/rekor-public-key.pem
4.4 环境验证与集成检查
完成上述安装后,执行以下端到端验证流程,确保三个组件能够协同工作:
- 生成测试密钥对:
cosign generate-key-pair - 使用 OIDC 令牌签名一个测试镜像:
cosign sign --oidc-issuer $COSIGN_OIDC_ISSUER --rekor-url $COSIGN_REKOR_URL your-registry/test-image:latest - 验证签名并查询 Rekor 日志:
cosign verify --rekor-url $COSIGN_REKOR_URL your-registry/test-image:latest
若验证通过,Cosign 会输出 Verified OK 以及 Rekor 日志条目索引。此时,环境准备全部完成,可以进入下一阶段的回滚策略与身份验证集成设计。