您可以驗證自訂 OS 映像檔的 SLSA (軟體構件供應鏈級別) 建構作業來源資訊認證,確保軟體供應鏈完整性。
將 Image Builder 管道設定為輸出至 Artifact Registry 並啟用驗證選項後,Cloud Build 會自動產生密碼編譯認證,說明編譯期間使用的確切管道原始碼、設定、執行參數和基礎映像檔。驗證這項建構作業來源資訊可確認受信任的管道安全地建構映像檔,未經授權不得竄改。
事前準備
- 完成「準備環境」一文中的環境設定步驟。
-
如果尚未設定驗證,請先完成設定。
驗證可確認您的身分,以便存取 Google Cloud 服務和 API。如要從本機開發環境執行程式碼或範例,請選取下列其中一個選項,向 Compute Engine 進行驗證:
選取這個頁面上您打算如何使用範例的分頁:
控制台
使用 Google Cloud 控制台存取 Google Cloud 服務和 API 時,無須設定驗證。
gcloud
-
安裝 Google Cloud CLI。 完成後,執行下列指令來初始化 Google Cloud CLI:
gcloud init若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI。
-
- 設定預設地區和區域。
REST
如要在本機開發環境中使用本頁的 REST API 範例,請使用您提供給 gcloud CLI 的憑證。
安裝 Google Cloud CLI。
若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI。
詳情請參閱 Google Cloud 驗證說明文件中的「使用 REST 進行驗證」。
必要的角色
如要取得查看及驗證建構出處認證所需的權限,請要求管理員在專案中授予您下列 IAM 角色:
- Artifact Registry 讀取者 (
roles/artifactregistry.reader) - Cloud Build 檢視者 (
roles/cloudbuild.builds.viewer)
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
設定來源生成作業
如要產生建構作業來源資訊,請確保在 cloudbuild.yaml 檔案中設定 substitutions、options、results 和 artifacts 區塊,如下列程式碼片段所示:
substitutions:
# 1. Specify your output path and target Artifact Registry resource URI
_IMAGE_OUTPUT_PATH: 'image-builder/binaryOut'
_ARTIFACT_REGISTRY_RESOURCE_URI: 'projects/PROJECT_ID/locations/REGION/repositories/REPOSITORY_NAME/packages/PACKAGE_NAME/versions/v${BUILD_ID}'
steps:
# 2. Configure step results and base image attestations
- name: 'REGION-docker.pkg.dev/image-builder-official/release/builder:stable'
script: |
#!/usr/bin/env bash
/build
id: 'imagebuilder-customize'
results:
- name: image_builder_telemetry_metrics
- name: base_image
attestationType: "https://cloudbuild.googleapis.com/attestations/build_content_restrictions"
attestationContent: base_image
options:
# 3. Enable Cloud Logging and cryptographic provenance generation
logging: CLOUD_LOGGING_ONLY
requestedVerifyOption: VERIFIED
artifacts:
# 4. Upload generic image artifacts and provenance to Artifact Registry
generic_artifacts:
- folder: '${_IMAGE_OUTPUT_PATH}'
registry_path: '${_ARTIFACT_REGISTRY_RESOURCE_URI}'
驗證出處資料
您可以使用 Google Cloud 控制台或 Google Cloud CLI,查看及驗證建構作業來源資訊和執行構件:
控制台 (Cloud Build)
如要透過 Cloud Build 建構歷史記錄查看建構作業來源資訊和輸出構件,請按照下列步驟操作:
前往 Google Cloud 控制台的「Cloud Build」頁面。
按一下「記錄」,然後選取映像檔管道執行的「建構 ID」。建構詳細資料頁面會顯示三個程序步驟 (
imagebuilder-customize、imagebuilder-validate和imagebuilder-publish) 的記錄。按一下「建構作業成果」分頁標籤,即可查看執行期間建立的確切 OS 映像檔。
按一下「附件」分頁標籤,即可查看已簽署的 SLSA 來源認證檔案和結果檔案。結果檔案會記錄執行期間使用的來源基礎映像檔。
主控台 (Artifact Registry)
如要直接在 Artifact Registry 中查看建構作業來源資訊,請按照下列步驟操作:
前往 Google Cloud 控制台的「Artifact Registry」頁面。
在存放區清單中,按一下一般存放區的名稱。
在套件清單中,按一下作業系統映像檔套件名稱。
在版本記錄清單中,按一下管道執行的版本 ID (
v${BUILD_ID})。按一下「附件」分頁標籤,即可查看該圖片版本的已簽署 SLSA 來源認證檔案和結果檔案。結果檔案會記錄執行期間使用的基礎來源圖片。
gcloud
Artifact Registry 會將出處記錄儲存為附件檔案,並與一般映像檔 tarball 放在一起。
由於認證格式為 Dead Simple Signing Envelope (DSSE),因此 JSON 內的實際出處聲明酬載會採用 Base64 編碼。如要讀取詳細資料,請使用 gcloud CLI 和 jq 公用程式執行下列步驟:
列出套件版本,找出要驗證的特定建構 ID 版本,方法是執行
gcloud artifacts versions list指令:gcloud artifacts versions list \ --package=PACKAGE_NAME \ --repository=REPOSITORY_NAME \ --location=REPOSITORY_LOCATION \ --project=PROJECT_ID更改下列內容:
PACKAGE_NAME:Artifact Registry 存放區中的套件名稱,例如my-custom-image。REPOSITORY_NAME:一般 Artifact Registry 存放區的名稱,例如custom-os-images。REPOSITORY_LOCATION:存放區所在的區域,例如us-central1。PROJECT_ID:您的專案 ID。
執行
gcloud artifacts attachments list指令,查詢與目標套件版本相符的附件中繼資料:gcloud artifacts attachments list \ --target=projects/PROJECT_ID/locations/REPOSITORY_LOCATION/repositories/REPOSITORY_NAME/packages/PACKAGE_NAME/versions/vBUILD_ID \ --repository=REPOSITORY_NAME \ --location=REPOSITORY_LOCATION \ --project=PROJECT_ID將
BUILD_ID替換為步驟 1 中傳回的版本 ID,例如12345。在指令輸出中,找出
name欄位包含build-result(含type: application/vnd.in-toto+json) 的附件項目,然後複製files:下列出的路徑,例如:projects/PROJECT_ID/locations/REPOSITORY_LOCATION/repositories/REPOSITORY_NAME/files/sha256:SHA256_HASH從存放區執行
gcloud artifacts files download指令,下載 JSON 中繼資料附件酬載:gcloud artifacts files download ATTACHMENT_FILE_ID \ --repository=REPOSITORY_NAME \ --location=REPOSITORY_LOCATION \ --project=PROJECT_ID \ --destination=./provenance.json將
ATTACHMENT_FILE_ID替換為上一步擷取的files:附件路徑。執行下列指令,即可隔離、解碼並格式化 JSON 酬載內容:
cat ./provenance.json | jq -r '.payload' | base64 --decode | jq
輸出內容包含標準 SLSA 格式參數,重點在於建構觸發條件、配方存放區詳細資料、使用的容器映像檔、建構雜湊和基本映像檔屬性。