Os pacotes do Assured OSS são criados com compliance do nível 2 da SLSA. A origem da build é fornecida como parte dos metadados de segurança. Esta página explica como verificar os metadados de procedência do build.
Este documento se aplica ao nível sem custo financeiro. Para informações sobre a origem do build no nível premium, consulte Acessar metadados de segurança e verificar pacotes.
Antes de começar
- Instale o cosign para verificar a assinatura na origem da build.
Configurar a autenticação
Para informações sobre como configurar a autenticação, consulte Configurar a autenticação.
Verificar a origem do build
A origem da build é assinada usando um atestado in-toto, que usa o formato de envelope dsse. Isso significa que a assinatura gerada contém a assinatura encapsulada e os dados brutos.
Como usar a ferramenta aoss-verifier
Para verificar a origem da build, instale a ferramenta aoss-verifier.
Exporte
$(go env GOPATH)/bine execute o comandoaoss-verifier verify-packagecom a flag--verify_build_provenance.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]Substitua:
- LANGUAGE: o idioma do pacote. O valor precisa estar em letras minúsculas.
- PACKAGE_ID: para Java, o formato é groupId:artifactId. Para Python, o formato é packageName. O valor precisa estar em letras minúsculas.
- VERSION: a versão do pacote.
- ARTIFACT_PATH: o caminho para o arquivo de dados no diretório
local que você quer verificar. Use as seguintes extensões de nome de arquivo:
- Extensão de arquivo
jarpara um pacote Java - Extensão de arquivo
whlpara um pacote Python.
- Extensão de arquivo
--disable_certificate_verificationé uma flag opcional que ignora a correspondência do certificado de folha com o certificado raiz pela cadeia de certificados, se usada.--temp_downloads_pathé uma flag opcional para definir o caminho em que você quer fazer o download dos arquivos. Substitua TEMP_DOWNLOADS_DIR_PATH. Se essa flag não estiver definida, os arquivos serão baixados para a pastatmp_downloadsno diretório atual.--disable_deletesé uma flag opcional que mantém os arquivos baixados. Por padrão, a ferramenta limpa todos os arquivos baixados.
Para mais informações, consulte o arquivo README da ferramenta.
Verificação manual
Para verificar a origem do build, faça o seguinte:
Recupera a procedência do build.
Dependendo de como você acessa os metadados de segurança, a origem da build é acessada de maneira diferente.
- Se você acessar metadados de segurança usando o Cloud Storage, a origem da build estará disponível como parte dos metadados
Build Informationno campobuildDetails.
Para mais informações, consulte o seguinte snippet de metadados de exemplo:
{ "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…" .....- Se você acessar metadados de segurança usando a API Artifact Analysis, a origem da build será armazenada na seção
BuildOccurrencedos metadados de segurança.
Exemplo de snippet de metadados:
{'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" } } , …- Se você acessar metadados de segurança usando o Cloud Storage, a origem da build estará disponível como parte dos metadados
Recupere a assinatura de origem do build.
A origem da build contém uma seção chamada Envelope, que contém assinaturas como EnvelopeSignature. Para recuperar a assinatura, siga estas etapas:
- Armazene os dados de
sigem um arquivo chamadosignature.txt. Verifique se os metadados foram baixados usando o script de metadados.
Se os metadados forem baixados usando o script de metadados, modifique a assinatura e armazene-a em outro arquivo chamado
signature.sig.Para modificar a assinatura, execute o seguinte comando:
cat signature.txt | sed -e 's/\\"/"/g' > signature.sigSe os metadados não forem baixados usando o script de metadados, decodifique a assinatura e armazene-a em outro arquivo chamado
signature.sig.Para decodificar a assinatura, use o seguinte comando:
cat signature.txt | tr '\-_' '+/' | base64 -d > signature.sig
- Armazene os dados de
Recupere a chave pública de procedência do build.
A seção EnvelopeSignature na origem da build contém a referência à chave usada para assinar a origem da build. A chave é armazenada em um dos seguintes formatos:
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_VERSIONEm que KEY_NAME e KEY_VERSION são o nome e a versão da chave do Cloud Key Management Service.
A chave pública é armazenada em um bucket do Cloud Storage de propriedade do Assured OSS.
Recupere a chave pública usando a Google Cloud CLI. Use um dos seguintes comandos:
Se apenas KEY_NAME estiver presente:
gcloud storage cp gs://cloud-aoss/keys/KEY_NAME-public.pem PATH_TO_LOCAL_STORESe KEY_NAME e KEY_VERSION estiverem presentes:
gcloud storage cp gs://cloud-aoss/keys/KEY_NAME-KEY_VERSION-public.pem PATH_TO_LOCAL_STORE
Substitua o seguinte :
- KEY_NAME com o nome da chave do Cloud Key Management Service.
- KEY_VERSION com a versão da chave do Cloud Key Management Service.
- PATH_TO_LOCAL_STORE com o nome do caminho local para armazenar a chave pública.
Verifique a assinatura de origem.
Para verificar a assinatura, execute o seguinte comando:
cosign verify-blob-attestation --insecure-ignore-tlog --key KEY_REF --signature signature.sig --type slsaprovenance --check-claims=false /dev/nullSubstitua:
- KEY_REF: o caminho para a chave pública que você baixou na etapa anterior.
- signature.sig: o arquivo que contém a assinatura recuperada na etapa anterior.
A seguinte saída é retornada após a execução bem-sucedida do comando:
Verified OKPara verificar também o hash do artefato associado à origem, use o comando a seguir:
cosign verify-blob-attestation --insecure-ignore-tlog --key KEY_REF --signature signature.sig --type slsaprovenance --check-claims=true ARTIFACT_PATHSubstitua:
- KEY_REF: o caminho para a chave pública que você baixou na etapa anterior.
- signature.sig: o arquivo que contém a assinatura recuperada na etapa anterior.
- ARTIFACT_PATH: o caminho para o artefato.
A seguinte saída é retornada após a execução bem-sucedida do comando:
Verified OK