跳转至

供应链

从 1.0.0 版本起,Turbo EA 发布到 GHCR 的容器镜像包含可验证的供应链元数据,操作员在将镜像拉入生产环境之前可以确认该镜像来自本项目的 CI。

本页介绍签名内容、验证方法、SBOM 所在位置,以及(目前仅供参考的)Trivy 扫描的作用。


签名内容

.github/workflows/docker-publish.yml 构建并推送到 ghcr.io/vincentmakes/turbo-ea/<镜像> 的每个镜像均使用 cosign 通过无密钥 OIDC 签名:没有长期有效的签名密钥。证书由 Sigstore 的 Fulcio 为工作流标识颁发,记录在公共 Rekor 透明日志中,并在签名创建后立即丢弃。

已签名的镜像:

  • ghcr.io/vincentmakes/turbo-ea/db
  • ghcr.io/vincentmakes/turbo-ea/backend
  • ghcr.io/vincentmakes/turbo-ea/frontend
  • ghcr.io/vincentmakes/turbo-ea/nginx
  • ghcr.io/vincentmakes/turbo-ea/mcp-server

ollama 镜像在矩阵之外手动重建,目前未签名。如果您依赖捆绑的 Ollama 配置文件并需要验证,请从源码构建。

签名适用于 OCI 清单列表摘要,因此单个签名可透明地涵盖 linux/amd64linux/arm64


验证镜像

安装 cosign,然后运行:

cosign verify \
  --certificate-identity-regexp 'https://github.com/vincentmakes/turbo-ea/.+' \
  --certificate-oidc-issuer 'https://token.actions.githubusercontent.com' \
  ghcr.io/vincentmakes/turbo-ea/backend:1.0.0

参数说明:

  • --certificate-identity-regexp — 接受此仓库中的任何工作流路径。如需更严格验证,请替换为 --certificate-identity 'https://github.com/vincentmakes/turbo-ea/.github/workflows/docker-publish.yml@refs/tags/v1.0.0'
  • --certificate-oidc-issuer — 将 OIDC 颁发者固定为 GitHub 的令牌端点。由任何其他颁发者(如 fork 的 CI)颁发的签名将验证失败。

验证成功后会打印已签名的载荷和 Rekor 透明日志条目 URL。失败时以非零代码退出——请让您的部署在此处失败。

您也可以按摘要验证,这是最严格的形式(不受标签重新映射影响):

DIGEST=$(docker buildx imagetools inspect ghcr.io/vincentmakes/turbo-ea/backend:1.0.0 --format '{{ .Manifest.Digest }}')
cosign verify \
  --certificate-identity-regexp 'https://github.com/vincentmakes/turbo-ea/.+' \
  --certificate-oidc-issuer 'https://token.actions.githubusercontent.com' \
  ghcr.io/vincentmakes/turbo-ea/backend@${DIGEST}

SBOM

SPDX 软件物料清单由 buildkit 自动生成(构建步骤中设置 sbom: true),并作为 OCI 引用者附加到每个镜像。无需额外安装。

使用以下命令获取:

docker buildx imagetools inspect --format '{{ json .SBOM }}' \
  ghcr.io/vincentmakes/turbo-ea/backend:1.0.0 | jq .

SBOM 列出了 buildkit 在最终镜像中观察到的所有软件包(apk 包、Python wheel、Node 模块等),包含版本和来源 URL。


漏洞扫描(Trivy)

发布工作流对每个构建的镜像运行 Trivy 扫描 HIGH 和 CRITICAL 级别的 CVE,并将结果作为 SARIF 上传到仓库的 Security 选项卡。

扫描目前不阻塞exit-code: 0)。如果 Trivy 结果对您的部署环境很重要,请对拉取的镜像运行自己的扫描器。已发布的 SBOM 是一个干净的输入源。

对于贡献者: 如果您发现真正可利用的漏洞,请通过私人安全公告而非公开 issue 进行报告。


Action SHA 固定

发布工作流使用的每个 GitHub Action 都固定在 40 字符的提交 SHA,而非浮动的主要版本标签。更新通过 github-actions 生态系统的 Dependabot 按月进行。