Assured Open Source Software (Assured OSS) 會為每個可用的套件和套件版本提供安全性中繼資料。您可以在 Cloud Storage 中存取這項中繼資料,查看建構詳細資料、安全漏洞狀態、測試結果和授權資訊。
本文僅適用於免費方案。如需使用 Artifact Analysis API 存取中繼資料的操作說明,請參閱「使用 Artifact Analysis API 存取中繼資料」。
安全性中繼資料檔案
每個 Assured OSS 套件版本的安全性中繼資料,會分散在 Cloud Storage bucket 中的下列四個檔案:
buildinfo.zip:這個檔案包含套件建構資訊的中繼資料。這項中繼資料只會在極少數情況下變更,例如重新建構套件、輪替憑證和新增欄位。vexinfo.zip:這個檔案包含 CycloneDX 1.4 格式的套件安全漏洞資訊。只要有套件安全漏洞的相關資訊,這個值就會變更。healthinfo.zip:這個檔案含有套件測試的詳細資料。如果套件的測試狀態有所變更,這個值可能也會隨之變動。例如,如果執行新的安全性測試,或涵蓋範圍結果有所變更。licenseinfo.zip:這個檔案包含與套件授權資訊相關的中繼資料。如果套件發布者修改資訊,套件的授權資訊可能會變更。
每個 ZIP 檔案都包含下列兩個檔案:
- 包含資料的 JSON 檔案。
- 包含該資料簽章的
signature.zip檔案。
JSON 檔案結構
JSON 檔案的結構說明如下:
buildInfo.json
creationTime:這份文件的建立時間,採用 RFC 3339 字串格式。creator:文件擁有者。提供的詳細資料如下:name:建立這份文件的機構名稱。email:機構的電子郵件地址,供使用者提出問題或申訴。
buildDetails:建構二進位檔的相關詳細資料。提供的詳細資料如下:packageFileName:套用建構作業詳細資料的檔案名稱。buildProvenance:此字串代表套件的建構作業來源資訊,格式為 SLSA v0.2。這項資訊由 Cloud Build 產生。envelope:代表 DSSE 信封的字串,可用於驗證來源文件的完整性。這項資訊也是由 Cloud Build 產生。slsaLevel:表示建構系統遵循的 SLSA 等級。buildTool:用於建構套件的工具名稱,即 Cloud Build。詳情請參閱「Cloud Build」。transitiveClosureState:這個 ENUM 會指出套件的所有建構依附元件 (直接或間接) 是否也存在於 Assured OSS 的產品組合中。這個欄位可有兩個值:OPEN:如果 Assured OSS 支援零個或部分轉換依附元件。CLOSED:如果 Assured OSS 支援所有轉換依附元件。
sourceInfo:用於建構套件的原始碼相關資訊。提供的詳細資料如下:sourceUrl:GitHub 網址字串。commitHash:附加至版本的修訂版本雜湊字串。tag:與套件版本相關聯的發布版本標記。host:GitHub 中託管原始碼的系統名稱。commitTime:提交時間,採用 RFC 3339 字串格式。
sbom:SPDX 2.3 格式的 SBOM 字串。
vexInfo.json
creationTime:這份文件的建立時間,採用 RFC 3339 字串格式。creator:文件擁有者。提供的詳細資料如下:name:建立這份文件的機構名稱。email:機構的電子郵件地址,供使用者提出查詢或申訴。
vexData:CycloneDX 1.4 格式的安全漏洞可利用性交換 (VEX) 字串。
healthInfo.json
creationTime:這份文件的建立時間,採用 RFC 3339 字串格式。creator:文件擁有者。提供的詳細資料如下:name:建立這份文件的機構名稱。email:機構的電子郵件地址,供使用者提出查詢或申訴。
testingData:套件安全性測試的詳細資料。提供的詳細資料如下:testType:測試類型。例如:FUZZ。tool:執行測試的工具名稱。testStatus:測試狀態。狀態可能是下列其中一種:TESTED:已執行測試。NOT_REQUIRED:套件不需要測試。舉例來說,如果套件只包含介面,就不需要進行模糊測試。UNTESTED:未測試套件。
licenseInfo.json
package_name:套件名稱,格式為字串。package_version:套件版本。license_info::與套件相關聯的授權。
存取 Cloud Storage 的安全性中繼資料
如要從 Cloud Storage 存取安全性中繼資料,請按照下列步驟操作:
步驟 1:設定驗證機制
如要瞭解如何設定驗證,請參閱「設定驗證」。
步驟 2 - 建立網址
您可以使用 gcloud storage 或 curl 指令下載中繼資料。請使用下列資訊建構兩者的網址:
- 語言:
java或python。值必須為小寫。 - Package_ID:Java 為 groupId:artifactId,Python 為 packageName。值必須為小寫。
- 版本:套件的版本。
- Metadata_Type:選擇
buildinfo.zip、vexinfo.zip或healthinfo.zip。
網址必須採用下列格式:
gcloud
gs://cloud-aoss-metadata/<language>/<package_id>/<version>/<metadata_type>
請注意,網址必須為小寫。
Python 範例網址:gs://cloud-aoss-metadata/python/cryptography/37.0.4/buildinfo.zip
Java 網址範例:gs://cloud-aoss-metadata/java/com.google.errorprone:error_prone_annotations/2.15.0/buildinfo.zip
curl
https://storage.googleapis.com/cloud-aoss-metadata/<language>/<package_id>/<version>/<metadata_type>
請注意,網址必須為小寫。
Python 範例網址:https://storage.googleapis.com/cloud-aoss-metadata/python/cryptography/37.0.4/buildinfo.zip
Java 網址範例:https://storage.googleapis.com/cloud-aoss-metadata/java/com.google.errorprone:error_prone_annotations/2.15.0/buildinfo.zip
步驟 3:下載中繼資料
使用下列指令下載中繼資料:
gcloud
gcloud storage cp "gs://cloud-aoss-metadata/<language>/<package_id>/<version>/<metadata_type>" outputFolderLocation
如要一併下載特定套件和版本的建構資訊、健康狀態資訊和 VEX 資訊等所有中繼資料類型,請使用下列指令:
gcloud storage cp "gs://cloud-aoss-metadata/<language>/<package_id>/<version>" outputFolderLocation --recursive
中繼資料會分散在三個 ZIP 檔案 (buildinfo.zip、healthinfo.zip、vexinfo.zip) 中,並下載到輸出資料夾。
curl
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -L https://storage.googleapis.com/cloud-aoss-metadata/<language>/<package_id>/<version>/<metadata_type> -o output.zip
步驟 4:擷取中繼資料
將 ZIP 檔案解壓縮,在 macOS 或 Linux 上,請使用 unzip 指令:unzip input.zip -d outputFolder。每個 ZIP 檔案都包含一個 JSON 檔案和一個 signature.zip 檔案。JSON 檔案包含實際的安全性中繼資料,signature.zip 檔案則包含用於驗證 JSON 上 Google 簽章的檔案。
下載授權資訊
所有 Assured OSS 套件的授權資訊都位於單一 JSON 檔案中。如要下載這個檔案,請執行下列指令:
gcloud
gcloud storage cp "gs://cloud-aoss/info/LicenseInfo.json" outputFolderLocation
curl
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -L https://storage.googleapis.com/cloud-aoss/info/LicenseInfo.json
如要下載授權中繼資料檔案的簽章,請執行下列指令:
gcloud
gcloud storage cp "gs://cloud-aoss/info/LicenseInfo.json-sig.zip" outputFolderLocation
curl
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -L https://storage.googleapis.com/cloud-aoss/info/LicenseInfo.json-sig.zip -o output.zip