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

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

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

默认出处

docker/build-push-actionGitHub Action 自动添加出处 证明您的镜像,但需满足以下条件:

  • 如果 GitHub 存储库是公开的,则带有mode=max会自动添加到镜像中。
  • 如果 GitHub 存储库是私有的,则带有mode=min会自动添加到镜像中。
  • 如果您使用的是docker出口商或 您正在使用load: true不 证明将添加到镜像中。这些输出格式不支持 证明。

警告

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

最高级别的出处

建议您使用最高级别的 prosourceance 构建镜像 证明。私有仓库默认只添加 min-level 来源, 但是,您可以通过设置provenanceinput 在docker/build-push-actionGitHub Action 设置为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 的步骤 证明中,将sbominput 的docker/build-push-action设置为 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 }}