什么是构建溯源与 SBOM
buildx(BuildKit)在构建时可以把构建溯源(provenance)与软件物料清单(SBOM)作为 attestation 附加到镜像索引上。溯源记录镜像由哪个构建器、用什么参数、从哪个源码提交构建而来;SBOM 列出镜像内包含的软件包与版本。两者都只是随镜像分发的元数据,不改变镜像运行方式,但让制品来源可以被核对。
基本信息
| 适用平台 | Docker Buildx / BuildKit(Docker 20.10 起广泛可用) |
|---|---|
| 构建参数 | --provenance=true / --sbom=true |
| 取值 | --provenance=mode=min|max,max 记录更完整 |
| 查看方式 | docker buildx imagetools inspect <ref> |
| 前提 | 推送到的镜像仓库需支持 OCI attestation |
典型使用场景
- 合规流水线要求制品可溯源:构建同时产出证据,而不是事后补文档
- 上线前用 SBOM 核对基础镜像与第三方依赖版本,判断已知漏洞影响面
- 被问到某个线上镜像对应哪次提交、由谁构建时,直接查溯源声明
- 镜像来源存在争议时,作为签名之外的第二类客观证据
- 安全审计阶段批量导出 SBOM,统计全量镜像的依赖分布
构建与核对示例
构建与核对示例
# 推送时附加溯源与 SBOM 声明
docker buildx build --provenance=true --sbom=true \
--push -t registry.example.com/team/app/web:1.4.2 .
# 记录更完整的构建参数,便于事后审计
docker buildx build --provenance=mode=max \
--push -t registry.example.com/team/app/web:1.4.2 .
# 在远端核对:输出里会列出索引附带的 attestation 清单
docker buildx imagetools inspect registry.example.com/team/app/web:1.4.2
docker buildx imagetools inspect registry.example.com/team/app/web:1.4.2 --raw | head -c 400 # 看原始索引 JSON三类声明对照
| 名称 | 内容 | 典型用途 |
|---|---|---|
| provenance | 构建器、构建参数、源码提交等构建过程记录 | 制品溯源与合规留痕 |
| SBOM | 镜像内软件包与版本清单 | 依赖梳理、漏洞影响面判断 |
| attestation | 承载以上声明的清单对象 | 随镜像存储并被校验 |
attestation 是附着在镜像索引上的独立清单,推送到不支持的仓库时会丢失;核对要在推送之后的远端做,不能只看本机 docker images。
多平台构建时声明随各自平台清单保存,查看输出可按平台定位到对应条目。
BuildKit 默认生成最小化溯源;mode=max 会额外记录构建参数与来源依赖,体积略大但审计价值更高,合规场景建议直接用 max 并写进流水线模板。