Introducción
La evidencia de la cadena de suministro solo es útil si se verifica antes del despliegue. Un paquete de lanzamiento puede contener un manifiesto de Kubernetes, un SBOM, metadatos de imagen y un archivo de suma de comprobación (checksum). La suma de comprobación demuestra que los archivos listados no han sido alterados. El SBOM y los metadatos de la imagen le ayudan a confirmar qué imagen y qué evidencia de paquetes afirma contener el lanzamiento.
En este laboratorio, validará un paquete de lanzamiento local utilizando sha256sum y jq, confirmará que el SBOM y los metadatos de la imagen describen la carga de trabajo aprobada, registrará un resultado de validación en formato JSON compacto y desplegará únicamente el manifiesto aprobado. Este laboratorio no requiere descargas externas ni herramientas de firma. Se centra en el hábito fundamental de CKS: verificar la evidencia local antes de confiar en el artefacto de lanzamiento.
Inspeccionar el paquete de lanzamiento
En este paso, inspeccionará el paquete de lanzamiento antes de ejecutar cualquier comando de validación. Esto es importante porque los archivos de suma de comprobación solo cubren las rutas listadas en su interior. Un archivo puede existir en el paquete y, aun así, estar fuera del conjunto de lanzamiento aprobado.
Comience en el directorio del proyecto y lea las notas:
cd /home/labex/project
sed -n '1,180p' RELEASE_VALIDATION_NOTES.md
Liste los archivos del paquete:
find release-bundle -path release-bundle/evidence -prune -o -type f -print | sort | tee release-bundle/evidence/bundle-files.txt
Acceda al paquete e inspeccione el archivo de suma de comprobación:
cd /home/labex/project/release-bundle
cat checksums.sha256 | tee evidence/checksum-file-review.txt
Debería ver las sumas de comprobación para manifests/receipt-ledger-approved.yaml, sbom.json y image-metadata.json. El manifiesto no listado debería existir en el paquete, pero no debería aparecer en checksums.sha256.
Verificar sumas de comprobación y rechazar el candidato no listado
En este paso, verificará los artefactos listados con sha256sum -c. La opción -c lee los hashes esperados de un archivo de suma de comprobación y los compara con los archivos actuales. Un resultado exitoso significa que los archivos listados aún coinciden con las sumas de comprobación aprobadas.
Ejecute la verificación de la suma de comprobación:
sha256sum -c checksums.sha256 | tee evidence/checksum-verification.txt
Confirme que el manifiesto no listado no forma parte de la evidencia de suma de comprobación aprobada:
if grep -q 'receipt-ledger-unlisted.yaml' checksums.sha256; then
echo "unlisted manifest is unexpectedly approved" | tee evidence/unlisted-check.txt
else
echo "unlisted manifest is not in the approved checksum list" | tee evidence/unlisted-check.txt
fi
El primer comando debería imprimir OK para los tres archivos listados. El segundo comando debería indicar que el manifiesto no listado no se encuentra en la lista de sumas de comprobación aprobadas.
Hacer coincidir los metadatos de SBOM con los metadatos de la imagen
En este paso, inspeccionará el SBOM y los metadatos de la imagen. La suma de comprobación le indica que los archivos no han cambiado, pero no explica si el SBOM describe la imagen que planea desplegar. Para ello, compare el nombre de la imagen y el resumen (digest) en ambos archivos.
Extraiga los metadatos del componente SBOM:
jq '.metadata.component' sbom.json | tee evidence/sbom-component.json
Confirme que el SBOM contiene la entrada del paquete esperada:
jq '.components[] | select(.name == "busybox")' sbom.json | tee evidence/sbom-required-package.json
Inspeccione los metadatos de la imagen:
jq . image-metadata.json | tee evidence/image-metadata-review.json
Ahora, cree un JSON de validación compacto a partir de la evidencia que acaba de inspeccionar. Las variables de shell leen la suma de comprobación del manifiesto aprobado y el resumen de la imagen del paquete en lugar de codificarlos directamente.
approved_sha="$(awk '$2=="manifests/receipt-ledger-approved.yaml" {print $1}' checksums.sha256)"
image_digest="$(jq -r '.digest' image-metadata.json)"
cat > evidence/validation.json <<EOF
{
"checksum_status": "verified",
"approved_manifest": "manifests/receipt-ledger-approved.yaml",
"approved_manifest_sha256": "${approved_sha}",
"sbom_name": "receipt-ledger",
"sbom_version": "1.8.4",
"sbom_image": "busybox:1.36",
"sbom_package": "busybox",
"image_digest": "${image_digest}",
"rejected_manifest": "manifests/receipt-ledger-unlisted.yaml",
"rejection_reason": "not-listed-in-checksums"
}
EOF
jq -M . evidence/validation.json
Este JSON no es un informe narrativo. Es un registro pequeño y legible por máquina de los hechos de verificación que usted desearía tener antes del despliegue.
Desplegar únicamente el manifiesto aprobado
En este paso, desplegará solo el manifiesto que superó la validación de suma de comprobación. El candidato no listado está presente en el paquete, pero no figuraba en el archivo de suma de comprobación aprobado, por lo que debe permanecer fuera del clúster.
Aplique el manifiesto aprobado:
kubectl apply -f manifests/receipt-ledger-approved.yaml
Espere al despliegue:
kubectl -n cks-prep-sbom rollout status deployment/receipt-ledger --timeout=120s
Confirme que el despliegue no listado no se haya creado:
if kubectl -n cks-prep-sbom get deployment receipt-ledger-unlisted >/dev/null 2>&1; then
echo "unlisted deployment exists" | tee evidence/unlisted-deployment-check.txt
else
echo "unlisted deployment is absent" | tee evidence/unlisted-deployment-check.txt
fi
Lea el estado de ejecución del Pod aprobado:
pod="$(kubectl -n cks-prep-sbom get pod -l app=receipt-ledger --field-selector=status.phase=Running -o jsonpath='{.items[0].metadata.name}')"
kubectl -n cks-prep-sbom exec "$pod" -- cat /release/status.txt | tee evidence/runtime-status.txt
El estado de ejecución debería ser:
release-status=approved
Resumen
Usted inspeccionó un paquete de lanzamiento local, verificó las sumas de comprobación aprobadas, confirmó que un candidato no listado estaba fuera del conjunto de lanzamiento aprobado, hizo coincidir los metadatos de SBOM con los metadatos de la imagen, registró evidencia de validación en un JSON compacto y desplegó únicamente el manifiesto de Kubernetes aprobado. Este es el flujo de trabajo fundamental de evidencia de la cadena de suministro: verificar la integridad y la identidad antes del despliegue.



