Assured OSS 软件包的构建符合 SLSA 2 级要求。构建来源信息作为安全元数据的一部分提供。本页介绍了如何验证 build 来源元数据。
本文档适用于免费层级。如需了解高级层级中的 build 出处,请参阅访问安全元数据并验证软件包。
准备工作
- 安装 cosign 以验证 build 出处中的签名。
设置身份验证
如需了解如何设置身份验证,请参阅设置身份验证。
验证 build 出处
构建来源使用 in-toto 证明进行签名,而该证明又使用 DSSE 信封格式。这意味着生成的签名包含封装的签名和原始数据。
使用 aoss-verifier 工具
如需验证 build 出处,请安装 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 文件。
手动验证
如需验证 build 出处,请执行以下操作:
检索 build 出处。
根据您访问安全元数据的方式,构建来源的访问方式也会有所不同。
- 如果您使用 Cloud Storage 访问安全元数据,则 build 出处信息会作为
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 访问安全元数据,则 build 出处会存储在安全元数据的
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 访问安全元数据,则 build 出处信息会作为
检索 build 来源签名。
build 出处包含一个名为 Envelope 的部分,其中包含签名作为 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
- 将
检索 build 出处公钥。
build 出处中的 EnvelopeSignature 部分包含对用于对 build 出处进行签名的密钥的引用。密钥以以下格式之一存储:
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 存储桶中。
使用 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