Assured OSS 套件的建構作業符合 SLSA 第 2 級法規。建構出處會以安全性中繼資料的形式提供。本頁說明如何驗證建構出處中繼資料。
本文適用於免費方案。如要瞭解進階層級的建構出處資訊,請參閱「存取安全中繼資料並驗證套件」。
事前準備
- 安裝 cosign,驗證建構出處中的簽章。
設定驗證方法
如要瞭解如何設定驗證,請參閱「設定驗證」。
驗證建構來源資訊
建構出處是使用 in-toto 認證簽署,而這項認證會使用 DSSE 信封格式。也就是說,產生的簽章會包含經過包裝的簽章和原始資料。
使用 aoss-verifier 工具
如要驗證建構出處,請安裝 aoss-verifier 工具。
匯出
$(go env GOPATH)/bin,然後執行加上--verify_build_provenance旗標的aoss-verifier verify-package指令。aoss-verifier verify-package \ --language LANGUAGE \ --package_id PACKAGE_ID \ --version VERSION \ --artifact_path ARTIFACT_PATH \ --verify_build_provenance \ [--disable_certificate_verification] \ [--temp_downloads_path TEMP_DOWNLOADS_DIR_PATH] \ [--disable_deletes]更改下列內容:
- LANGUAGE:套件語言。值必須為小寫。
- PACKAGE_ID:如果是 Java,格式為 groupId:artifactId。如果是 Python,格式為 packageName。值必須為小寫。
- VERSION:套件版本。
- ARTIFACT_PATH:要驗證的本機目錄中資料檔案路徑。請使用下列副檔名:
- Java 套件的
jar副檔名 - Python 套件的
whl副檔名
- Java 套件的
--disable_certificate_verification是選用標記,如果使用,會略過透過憑證鏈結將分葉憑證與根憑證相符的程序。--temp_downloads_path是選用旗標,可用於設定要下載檔案的路徑。更換 TEMP_DOWNLOADS_DIR_PATH。 如未設定這個旗標,檔案會下載至目前目錄中的tmp_downloads資料夾。--disable_deletes是選用旗標,可保留下載的檔案。根據預設,這項工具會清除所有已下載的檔案。
詳情請參閱 工具的 README 檔案。
手動驗證
如要驗證建構出處,請執行下列操作:
擷取建構來源。
視您存取安全中繼資料的方式而定,建構出處的存取方式也會有所不同。
- 如果您使用 Cloud Storage 存取安全性中繼資料,建構出處資訊會顯示在
buildDetails欄位下的Build Information中繼資料中。
詳情請參閱下列中繼資料程式碼片段範例:
{ "creationTime": "2023-03-25T05:32:23Z", "buildDetails": [ { "packageFileName": "jackson-databind-2.13.3.jar", "envelope": { "payload": "eyJfdHlwZSI6Imh0d……………", "payloadType": "application/vnd.in-toto+json", "signatures": [ "sig": "eyJwYXlsb2FkVHlwZSI6Im……", "keyid": "gcpkms://projects/cloud-aoss/locations/global/keyRings/cloud-aoss-ring/cryptoKeys/tekton-chains" } ] }, "buildProvenance": "{\"_type\":\"https://in-toto.io/Statement/v0.1…" .....- 如果您使用 Artifact Analysis API 存取安全性中繼資料,則建構出處資訊會儲存在安全性中繼資料的
BuildOccurrence區段中。
中繼資料片段範例:
{'BuildOccurrence': name: "projects/cloud-aoss/occurrences/06c514bb-1069-4cde-8d68-b1306f19535a" resource_uri: "jackson-databind-2.13.3.jar@sha256:4c01a14673bc1cd4a2df337a3b4e695af0a6ed8ac6be19c9e4077377fb8adf92" note_name: "projects/cloud-aoss/notes/tekton-cloudbuild-intoto" kind: BUILD create_time { seconds: 1665556616 nanos: 891004000 } …… …… } envelope { payload: "{\"_type\":\"https://in-toto.io/Statement/v0.1\", ….." payload_type: "application/vnd.in-toto+json" signatures { sig: "{\"payloadType\":\"application/vnd.in-toto+json\",....." keyid: "gcpkms://projects/cloud-aoss/locations/global/keyRings/cloud-aoss-ring/cryptoKeys/tekton-chains" } } , …- 如果您使用 Cloud Storage 存取安全性中繼資料,建構出處資訊會顯示在
擷取建構來源簽章。
建構出處包含名為「Envelope」的區段,其中包含簽章,如「EnvelopeSignature」EnvelopeSignature。如要擷取簽章,請按照下列步驟操作:
- 將
sig資料儲存在名為signature.txt的檔案中。 使用中繼資料指令碼檢查中繼資料是否已下載。
如果使用中繼資料指令碼下載中繼資料,請修改簽章並儲存在名為
signature.sig的另一個檔案中。如要修改簽章,請執行下列指令:
cat signature.txt | sed -e 's/\\"/"/g' > signature.sig如果沒有使用中繼資料指令碼下載中繼資料,請解碼簽章並儲存在名為
signature.sig的另一個檔案中。如要解碼簽章,請使用下列指令:
cat signature.txt | tr '\-_' '+/' | base64 -d > signature.sig
- 將
擷取建構出處公開金鑰。
建構出處的「EnvelopeSignature」EnvelopeSignature部分包含用來簽署建構出處的金鑰參照。金鑰會以下列其中一種格式儲存:
gcpkms://projects/cloud-aoss/locations/global/keyRings/cloud-aoss-ring/cryptoKeys/KEY_NAMEgcpkms://projects/cloud-aoss/locations/global/keyRings/cloud-aoss-ring/cryptoKeys/KEY_NAME/cryptoKeyVersions/KEY_VERSION其中 KEY_NAME 和 KEY_VERSION 是 Cloud Key Management Service 金鑰的名稱和版本。
公開金鑰會儲存在 Assured OSS 擁有的 Cloud Storage bucket 中。
使用 Google Cloud CLI 擷取公開金鑰。請使用下列其中一個指令:
如果只有 KEY_NAME:
gcloud storage cp gs://cloud-aoss/keys/KEY_NAME-public.pem PATH_TO_LOCAL_STORE如果 KEY_NAME 和 KEY_VERSION 同時存在:
gcloud storage cp gs://cloud-aoss/keys/KEY_NAME-KEY_VERSION-public.pem PATH_TO_LOCAL_STORE
請替換下列項目:
- KEY_NAME 替換為 Cloud Key Management Service 金鑰的名稱。
- KEY_VERSION,並使用 Cloud Key Management Service 金鑰版本。
- 將 PATH_TO_LOCAL_STORE 替換為儲存公開金鑰的本機路徑名稱。
驗證出處簽章。
如要驗證簽章,請執行下列指令:
cosign verify-blob-attestation --insecure-ignore-tlog --key KEY_REF --signature signature.sig --type slsaprovenance --check-claims=false /dev/null更改下列內容:
- KEY_REF:您在上一個步驟中下載的公開金鑰路徑。
- signature.sig:包含上一個步驟中擷取簽章的檔案。
指令順利執行後,會傳回下列輸出內容:
Verified OK如要一併驗證與出處相關聯的構件雜湊值,請使用下列指令:
cosign verify-blob-attestation --insecure-ignore-tlog --key KEY_REF --signature signature.sig --type slsaprovenance --check-claims=true ARTIFACT_PATH更改下列內容:
- KEY_REF:您在上一個步驟中下載的公開金鑰路徑。
- signature.sig:包含上一個步驟中擷取簽章的檔案。
- ARTIFACT_PATH:構件的路徑。
指令順利執行後,會傳回下列輸出內容:
Verified OK