使用 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-actionsbom 输入设置为 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 }}
© . This site is unofficial and not affiliated with Kubernetes or Docker Inc.