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