Los paquetes de Assured OSS se compilan con cumplimiento del nivel 2 de SLSA. La compilación de la procedencia se proporciona como parte de los metadatos de seguridad. En esta página, se explica cómo verificar los metadatos de procedencia de la compilación.
Este documento se aplica al nivel gratuito. Para obtener información sobre la procedencia de la compilación en el nivel Premium, consulta Accede a los metadatos de seguridad y verifica los paquetes.
Antes de comenzar
- Instala cosign para verificar la firma en la procedencia de la compilación.
Configura la autenticación
Para obtener información sobre cómo configurar la autenticación, consulta Configura la autenticación.
Verifica la procedencia de la compilación
La procedencia de la compilación se firma con una certificación de in-toto que, a su vez, usa el formato de sobre DSSE. Esto significa que la firma generada contiene la firma ajustada y los datos sin procesar.
Cómo usar la herramienta aoss-verifier
Para verificar la procedencia de la compilación, instala la herramienta aoss-verifier.
Exporta
$(go env GOPATH)/biny ejecuta el comandoaoss-verifier verify-packagecon la marca--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]Reemplaza lo siguiente:
- LANGUAGE: Es el idioma del paquete. El valor debe estar en minúsculas.
- PACKAGE_ID: En Java, el formato es groupId:artifactId. En Python, el formato es packageName. El valor debe estar en minúsculas.
- VERSION: Es la versión del paquete.
- ARTIFACT_PATH: Es la ruta de acceso al archivo de datos en tu directorio local que deseas verificar. Usa las siguientes extensiones de nombre de archivo:
- Extensión de archivo
jarpara un paquete de Java - Extensión de archivo
whlpara un paquete de Python
- Extensión de archivo
--disable_certificate_verificationes una marca opcional que omite la coincidencia del certificado de hoja con el certificado raíz a través de la cadena de certificados, si se usa.--temp_downloads_pathes una marca opcional para establecer la ruta de acceso en la que deseas descargar los archivos. Reemplaza TEMP_DOWNLOADS_DIR_PATH. Si no se configura esta marca, los archivos se descargan en la carpetatmp_downloadsdel directorio actual.--disable_deleteses una marca opcional que conserva los archivos descargados. De forma predeterminada, la herramienta limpia todos los archivos descargados.
Para obtener más información, consulta el archivo README de la herramienta.
Verificación manual
Para verificar la procedencia de la compilación, haz lo siguiente:
Recupera la procedencia de compilación.
Según cómo accedas a los metadatos de seguridad, se accederá a la procedencia de la compilación de manera diferente.
- Si accedes a los metadatos de seguridad con Cloud Storage, la procedencia de la compilación está disponible como parte de los metadatos de
Build Informationen el campobuildDetails.
Para obtener más información, consulta el siguiente fragmento de metadatos de ejemplo:
{ "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…" .....- Si accedes a los metadatos de seguridad con la API de Artifact Analysis, la procedencia de la compilación se almacena en la sección
BuildOccurrencede los metadatos de seguridad.
Fragmento de metadatos de muestra:
{'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" } } , …- Si accedes a los metadatos de seguridad con Cloud Storage, la procedencia de la compilación está disponible como parte de los metadatos de
Recupera la firma de procedencia de la compilación.
La procedencia de la compilación contiene una sección llamada Envelope que incluye firmas como EnvelopeSignature. Para recuperar la firma, sigue estos pasos:
- Almacena los datos de
sigen un archivo llamadosignature.txt. Comprueba si los metadatos se descargaron con la secuencia de comandos de metadatos.
Si los metadatos se descargan con la secuencia de comandos de metadatos, modifica la firma y almacénala en otro archivo llamado
signature.sig.Para modificar la firma, ejecuta el siguiente comando:
cat signature.txt | sed -e 's/\\"/"/g' > signature.sigSi los metadatos no se descargan con la secuencia de comandos de metadatos, decodifica la firma y almacénala en otro archivo llamado
signature.sig.Para decodificar la firma, usa el siguiente comando:
cat signature.txt | tr '\-_' '+/' | base64 -d > signature.sig
- Almacena los datos de
Recupera la clave pública de la procedencia de la compilación.
La sección EnvelopeSignature en la procedencia de la compilación contiene la referencia a la clave que se usa para firmar la procedencia de la compilación. La clave se almacena en uno de los siguientes 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_VERSIONAquí, KEY_NAME y KEY_VERSION son el nombre y la versión de la clave de Cloud Key Management Service.
La clave pública se almacena en un bucket de Cloud Storage que pertenece a Assured OSS.
Recupera la clave pública con Google Cloud CLI. Usa uno de los siguientes comandos:
Si solo está presente KEY_NAME:
gcloud storage cp gs://cloud-aoss/keys/KEY_NAME-public.pem PATH_TO_LOCAL_STORESi están presentes KEY_NAME y KEY_VERSION, se aplican las siguientes reglas:
gcloud storage cp gs://cloud-aoss/keys/KEY_NAME-KEY_VERSION-public.pem PATH_TO_LOCAL_STORE
Reemplaza lo siguiente :
- KEY_NAME por el nombre de la clave de Cloud Key Management Service
- KEY_VERSION con la versión de la clave de Cloud Key Management Service.
- PATH_TO_LOCAL_STORE por el nombre de la ruta de acceso local para almacenar la clave pública.
Verifica la firma de procedencia.
Para verificar la firma, ejecuta el siguiente comando:
cosign verify-blob-attestation --insecure-ignore-tlog --key KEY_REF --signature signature.sig --type slsaprovenance --check-claims=false /dev/nullReemplaza lo siguiente:
- KEY_REF: Es la ruta de acceso a la clave pública que descargaste en el paso anterior.
- signature.sig: Es el archivo que contiene la firma recuperada en el paso anterior.
El siguiente resultado se muestra después de que el comando se ejecuta correctamente:
Verified OKPara verificar también el hash del artefacto asociado con la procedencia, usa el siguiente comando:
cosign verify-blob-attestation --insecure-ignore-tlog --key KEY_REF --signature signature.sig --type slsaprovenance --check-claims=true ARTIFACT_PATHReemplaza lo siguiente:
- KEY_REF: Es la ruta de acceso a la clave pública que descargaste en el paso anterior.
- signature.sig: Es el archivo que contiene la firma recuperada en el paso anterior.
- ARTIFACT_PATH: Es la ruta de acceso al artefacto.
El siguiente resultado se muestra después de que el comando se ejecuta correctamente:
Verified OK