使用 GitHub Actions 添加 SBOM 和出处证明
目录
软件物料清单 (SBOM) 和出处证明 添加关于镜像内容及其构建方式的元数据。
docker/build-push-action
第 4 版及更高版本支持证明。
默认出处证明
docker/build-push-action
GitHub Action 在满足以下条件时,会自动向您的镜像添加出处证明:
- 如果 GitHub 仓库是公共的,则具有
mode=max
的出处证明会自动添加到镜像中。 - 如果 GitHub 仓库是私有的,则具有
mode=min
的出处证明会自动添加到镜像中。 - 如果您正在使用
docker
导出器,或者通过load: true
将构建结果加载到运行器,则不会向镜像添加任何证明。这些输出格式不支持证明。
警告
如果您使用
docker/build-push-action
为公共 GitHub 仓库中的代码构建镜像,则默认附加到镜像的出处证明会包含构建参数的值。如果您滥用构建参数来向构建传递密钥,例如用户凭据或身份验证令牌,这些密钥会在出处证明中暴露。请重构您的构建,转而使用密钥挂载来传递这些密钥。同时,请记住轮换所有您可能已暴露的密钥。
最高级别出处证明
建议您使用最高级别出处证明构建镜像。私有仓库默认仅添加最低级别出处,但您可以通过将 docker/build-push-action
GitHub Action 的 provenance
输入设置为 mode=max
来手动覆盖出处级别。
请注意,向镜像添加证明意味着您必须直接将镜像推送到镜像仓库,而不是将镜像加载到运行器的本地镜像存储。这是因为本地镜像存储不支持加载带有证明的镜像。
name: ci
on:
push:
env:
IMAGE_NAME: user/app
jobs:
docker:
runs-on: ubuntu-latest
steps:
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ vars.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Extract metadata
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.IMAGE_NAME }}
- name: Build and push image
uses: docker/build-push-action@v6
with:
push: true
provenance: mode=max
tags: ${{ steps.meta.outputs.tags }}
SBOM
SBOM 证明不会自动添加到镜像。要添加 SBOM 证明,请将 docker/build-push-action
的 sbom
输入设置为 true。
请注意,向镜像添加证明意味着您必须直接将镜像推送到镜像仓库,而不是将镜像加载到运行器的本地镜像存储。这是因为本地镜像存储不支持加载带有证明的镜像。
name: ci
on:
push:
env:
IMAGE_NAME: user/app
jobs:
docker:
runs-on: ubuntu-latest
steps:
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ vars.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Extract metadata
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.IMAGE_NAME }}
- name: Build and push image
uses: docker/build-push-action@v6
with:
sbom: true
push: true
tags: ${{ steps.meta.outputs.tags }}