使用 GitHub Actions 添加 SBOM 和出处证明

软件物料清单 (SBOM) 和来源证明添加了有关 您的镜像,以及它是如何构建的。

版本 4 及更高版本支持证明。docker/build-push-action

默认出处

GitHub Action 会自动添加 provenance 证明您的镜像,但需满足以下条件:docker/build-push-action

  • 如果 GitHub 存储库是公开的,则 的出处证明会自动添加到镜像中。mode=max
  • 如果 GitHub 存储库是私有的,则 的来源证明会自动添加到镜像中。mode=min
  • 如果您使用的是 docker 导出器,或者 您正在将构建结果加载到运行程序中,没有 证明将添加到镜像中。这些输出格式不支持 证明。load: true

警告

如果您用于为 public GitHub 存储库,附加到镜像的来源证明 默认情况下,包含 build 参数的值。如果您误用了 build 参数将密钥传递给您的构建,例如用户凭证或 authentication tokens 时,这些密钥会在 Proven 证明。重构您的构建以改用 secret 挂载来传递这些密钥。还要记住轮换您可能已暴露的任何秘密。docker/build-push-action

最高级别的出处

建议您使用最高级别的 prosourceance 构建镜像 证明。私有仓库默认只添加 min-level 来源, 但您可以通过将 GitHub Action 上的输入设置为 .provenancedocker/build-push-actionmode=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 的步骤 证明,请将 的 input 设置为 true。sbomdocker/build-push-action

请注意,向镜像添加证明意味着您必须将镜像推送到 注册表,而不是将镜像加载到 跑步者。这是因为本地镜像存储不支持加载 带有证明的镜像。

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 }}