使用 GitHub Actions 新增 SBOM 和來源證明
目錄
軟體物料清單 (SBOM) 和來源證明會新增關於映像檔內容及其建置方式的詮釋資料。
版本 4 和更新版本的docker/build-push-action
支援證明。
預設來源
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 }}