Firma de código
¿Qué es la firma de código?
La firma de código es el proceso de aplicar una firma criptográfica a los artefactos de software, como las imágenes de Docker, para verificar su integridad y autenticidad. Al firmar una imagen, garantizas que no ha sido alterada desde que fue firmada y que proviene de una fuente confiable.
En el contexto de las Docker Hardened Images (DHI), la firma de código se realiza utilizando Cosign, una herramienta desarrollada por el proyecto Sigstore. Cosign permite la firma segura y verificable de imágenes de contenedor, mejorando la confianza y la seguridad en la cadena de suministro de software.
¿Por qué es importante la firma de código?
La firma de código juega un papel crucial en el desarrollo de software moderno y la ciberseguridad:
- Autenticidad: Verifica que la imagen haya sido creada por una fuente confiable.
- Integridad: Garantiza que la imagen no haya sido manipulada desde que fue firmada.
- Cumplimiento: Ayuda a satisfacer los requisitos de seguridad organizativos y regulatorios.
Firma de código de las Docker Hardened Images
Cada DHI se firma criptográficamente utilizando Cosign, lo que garantiza que las imágenes no hayan sido manipuladas y provengan de una fuente confiable.
¿Por qué firmar tus propias imágenes?
Docker firma las Docker Hardened Images para demostrar su origen e integridad, pero si estás construyendo imágenes de aplicaciones que amplían o utilizan las DHI como base, también deberías firmar tus propias imágenes.
Al firmar tus propias imágenes, puedes:
- Demostrar que la imagen fue construida por tu equipo o pipeline
- Asegurarte de que tu construcción no haya sido manipulada después de subirla (push)
- Dar soporte a marcos de cadena de suministro de software como SLSA
- Habilitar la verificación de imágenes en los flujos de trabajo de despliegue
Esto es especialmente importante en entornos de CI/CD donde construyes y subes imágenes con frecuencia, o en cualquier escenario donde la procedencia de la imagen deba ser auditable.
Cómo visualizar y utilizar las firmas de código
Visualizar firmas
Puedes verificar que una Docker Hardened Image esté firmada y sea confiable utilizando Docker Scout o Cosign.
Para listar todas las atestaciones, incluidos los metadatos de firma, adjuntas a la imagen, utiliza el siguiente comando:
$ docker scout attest list <image-name>:<tag>
NoteSi la imagen existe localmente en tu dispositivo, debes anteponer el prefijo
registry://al nombre de la imagen. Por ejemplo, utilizaregistry://dhi.io/pythonen lugar dedhi.io/python.
Para verificar una atestación firmada específica (por ejemplo, SBOM, VEX, procedencia):
$ docker scout attest get \
--predicate-type <predicate-uri> \
--verify \
<image-name>:<tag>
NoteSi la imagen existe localmente en tu dispositivo, debes anteponer el prefijo
registry://al nombre de la imagen. Por ejemplo, utilizaregistry://dhi.io/python:3.13en lugar dedhi.io/python:3.13.
Por ejemplo:
$ docker scout attest get \
--predicate-type https://openvex.dev/ns/v0.2.0 \
--verify \
dhi.io/python:3.13
Si es válida, Docker Scout confirmará la firma y mostrará la carga útil de la firma (payload), así como el comando de Cosign equivalente para verificar la imagen.
Firmar imágenes
Para firmar una imagen de Docker, utiliza Cosign. Reemplaza
<image-name>:<tag> con el nombre y la etiqueta de la imagen.
$ cosign sign <image-name>:<tag>
Este comando te solicitará que te autentiques a través de un proveedor OIDC (como GitHub, Google o Microsoft). Tras una autenticación exitosa, Cosign generará un certificado de corta duración y firmará la imagen. La firma se almacenará en un registro de transparencia y se asociará con la imagen en el registro.