Cómo usar el comando docker trust sign para firmar una imagen

DockerDockerBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderá cómo utilizar el comando docker trust sign para proteger sus imágenes de Docker. Comenzaremos inspeccionando una imagen sin firmar para entender sus características antes de firmarla. Luego, practicarás firmar una etiqueta (tag) de imagen como administrador de un repositorio, afirmando su autenticidad y, posteriormente, verificando la firma. Finalmente, explorarás el proceso de firmar y verificar una etiqueta como firmante designado, demostrando la naturaleza colaborativa de Docker Content Trust.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/inspect("Inspect Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/ImageOperationsGroup -.-> docker/tag("Tag an Image") docker/ImageOperationsGroup -.-> docker/push("Push Image to Repository") subgraph Lab Skills docker/inspect -.-> lab-555255{{"Cómo usar el comando docker trust sign para firmar una imagen"}} docker/pull -.-> lab-555255{{"Cómo usar el comando docker trust sign para firmar una imagen"}} docker/tag -.-> lab-555255{{"Cómo usar el comando docker trust sign para firmar una imagen"}} docker/push -.-> lab-555255{{"Cómo usar el comando docker trust sign para firmar una imagen"}} end

Inspeccionar una imagen sin firmar

En este paso, aprenderemos cómo inspeccionar una imagen de Docker que no ha sido firmada. Docker Content Trust proporciona una forma de verificar la integridad y autenticidad de las imágenes de Docker. Sin embargo, no todas las imágenes están firmadas. Inspeccionar una imagen sin firmar nos ayuda a entender la información básica sobre la imagen antes de profundizar en los conceptos de firma y verificación.

Primero, necesitamos descargar una imagen sin firmar de un registro de Docker. Utilizaremos la imagen hello-world, que por lo general no está firmada por defecto.

docker pull hello-world

Este comando descarga la imagen hello-world desde el registro de Docker Hub a tu máquina local. Deberías ver una salida que indique el progreso y finalización de la descarga.

A continuación, inspeccionaremos la imagen descargada utilizando el comando docker inspect. Este comando proporciona información detallada sobre un objeto de Docker, incluyendo imágenes, contenedores, volúmenes y redes.

docker inspect hello-world

La salida de este comando será un gran documento JSON que contiene diversos detalles sobre la imagen hello-world. Puedes examinar esta salida para ver información como el ID de la imagen, la fecha de creación, la arquitectura, el sistema operativo y la configuración.

Dado que esta imagen no está firmada, no encontrarás ninguna información relacionada con firmas o confianza en la salida del comando docker inspect. Esta es la característica clave de una imagen sin firmar cuando se ve a través del prisma de Docker Content Trust.

Firmar una etiqueta (tag) como administrador de un repositorio

En este paso, aprenderemos cómo firmar una etiqueta (tag) de imagen de Docker como administrador de un repositorio. Docker Content Trust utiliza firmas digitales para garantizar que las imágenes que descargas son exactamente lo que el publicador pretendió. Como administrador de un repositorio, tienes la autoridad para firmar etiquetas de imágenes, afirmando su autenticidad.

Antes de poder firmar una imagen, necesitamos habilitar Docker Content Trust. Esto se hace estableciendo la variable de entorno DOCKER_CONTENT_TRUST en 1.

export DOCKER_CONTENT_TRUST=1

Este comando habilita la confianza en el contenido para los comandos de Docker subsiguientes en tu sesión de terminal actual.

Ahora, etiquetemos la imagen hello-world que descargamos en el paso anterior con una nueva etiqueta que incluya el nombre de un repositorio. Utilizaremos un nombre de repositorio de marcador de posición your_docker_username/my-signed-image. Reemplaza your_docker_username con tu nombre de usuario real de Docker Hub si tienes uno, o simplemente utiliza labexuser para este laboratorio.

docker tag hello-world labexuser/my-signed-image:latest

Este comando crea una nueva etiqueta labexuser/my-signed-image:latest que apunta a la misma imagen que hello-world.

Ahora, enviaremos esta imagen etiquetada a un registro. Cuando Docker Content Trust está habilitado, enviar una etiqueta de imagen que no ha sido firmada te pedirá que la firmes.

docker push labexuser/my-signed-image:latest

Cuando ejecutes este comando, Docker te pedirá que crees una nueva clave de firma o que uses una existente. Dado que es probable que esta sea tu primera vez firmando, se te pedirá que crees una nueva clave. Necesitarás proporcionar una contraseña para la nueva clave. Recuerda esta contraseña, ya que la necesitarás más adelante para firmar otras imágenes o rotar claves.

Después de ingresar y confirmar la contraseña, Docker firmará la etiqueta de la imagen y la enviará al registro. Deberías ver una salida que indique el proceso de firma y el envío exitoso.

Verificar la firma como administrador de un repositorio

En este paso, verificaremos la firma de la etiqueta (tag) de imagen que firmamos en el paso anterior. Como administrador de un repositorio, puedes utilizar Docker Content Trust para asegurarte de que la imagen que estás descargando es la que firmaste.

Primero, asegúrate de que Docker Content Trust sigue habilitado. Si abriste una nueva sesión de terminal, es posible que debas establecer la variable de entorno nuevamente.

export DOCKER_CONTENT_TRUST=1

Ahora, intentaremos descargar la etiqueta de imagen firmada. Debido a que Docker Content Trust está habilitado, Docker verificará la firma antes de descargar la imagen.

docker pull labexuser/my-signed-image:latest

Cuando ejecutes este comando, Docker comprobará si hay una firma válida para la etiqueta labexuser/my-signed-image:latest. Si la firma es válida y de confianza, se descargará la imagen. Deberías ver una salida que indique que la imagen se está descargando y que la firma se está verificando. La salida mencionará explícitamente "Verifying trust data for".

Si la firma fuera inválida o estuviera ausente (y la confianza en el contenido está habilitada), la operación de descarga fallaría, impidiéndote utilizar una imagen potencialmente comprometida.

Para inspeccionar más a fondo la información de confianza asociada con la imagen, puedes utilizar el comando docker trust inspect.

docker trust inspect labexuser/my-signed-image:latest

Este comando mostrará información detallada sobre las firmas asociadas con la etiqueta de imagen especificada. Deberías ver información sobre los firmantes y las etiquetas firmadas. Esta salida confirma que la etiqueta de imagen se ha firmado correctamente y que la firma es reconocida por Docker Content Trust.

Firmar una etiqueta (tag) como firmante

En este paso, exploraremos cómo un "firmante" designado puede firmar una etiqueta (tag) de imagen de Docker. En un escenario del mundo real, un repositorio podría tener múltiples firmantes, cada uno responsable de firmar etiquetas o versiones específicas. Esto permite un proceso de firma más distribuido y seguro.

Primero, asegúrate de que Docker Content Trust esté habilitado:

export DOCKER_CONTENT_TRUST=1

Ahora, creemos una nueva etiqueta para nuestra imagen, simulando una versión o lanzamiento diferente para el que un firmante podría ser responsable.

docker tag labexuser/my-signed-image:latest labexuser/my-signed-image:v1.0.0

Esto crea una nueva etiqueta labexuser/my-signed-image:v1.0.0 que apunta a la misma imagen.

Para firmar esta nueva etiqueta como un "firmante" diferente, utilizamos el comando docker trust sign. Este comando te permite firmar explícitamente una etiqueta específica con una clave específica.

docker trust sign labexuser/my-signed-image:v1.0.0

Cuando ejecutes este comando, Docker te pedirá la contraseña de la clave de firma que deseas utilizar. Si estás utilizando la misma clave generada en el Paso 2, ingresa esa contraseña. Si fueras un firmante diferente con una clave diferente, utilizarías la contraseña de esa clave.

Después de ingresar correctamente la contraseña, Docker firmará la etiqueta labexuser/my-signed-image:v1.0.0. Deberías ver una salida que confirme el proceso de firma.

Finalmente, necesitamos enviar los datos de confianza actualizados al registro. El comando docker push para la etiqueta firmada incluirá la nueva información de firma.

docker push labexuser/my-signed-image:v1.0.0

Este comando envía la etiqueta v1.0.0 junto con su firma asociada al registro.

Verificar la firma como firmante

En este último paso, verificaremos la firma de la etiqueta (tag) de imagen v1.0.0 que firmamos como "firmante" en el paso anterior. Esto demuestra cómo cualquier usuario con Docker Content Trust habilitado puede verificar la autenticidad de una imagen firmada por un firmante de confianza.

Primero, asegúrate de que Docker Content Trust esté habilitado.

export DOCKER_CONTENT_TRUST=1

Ahora, intentemos descargar la etiqueta de imagen v1.0.0. Dado que Content Trust está habilitado, Docker verificará la firma asociada a esta etiqueta.

docker pull labexuser/my-signed-image:v1.0.0

Similar a la verificación en el Paso 3, deberías ver una salida que indique que Docker está verificando los datos de confianza de la imagen y luego la está descargando. Esto confirma que la firma que aplicaste como firmante es válida y reconocida.

Para confirmar aún más la información de firma, puedes utilizar nuevamente el comando docker trust inspect.

docker trust inspect labexuser/my-signed-image:v1.0.0

La salida de este comando mostrará los firmantes de la etiqueta v1.0.0. Deberías ver la información de la clave del firmante que utilizaste en el paso anterior lista aquí. Esto proporciona evidencia concluyente de que la etiqueta ha sido firmada por una entidad de confianza.

Con esto concluimos nuestra exploración de la firma y verificación de etiquetas de imágenes de Docker utilizando Docker Content Trust. Al habilitar la confianza en el contenido y utilizar claves de firma, puedes mejorar significativamente la seguridad de tu flujo de trabajo de contenedores al garantizar la integridad y autenticidad de las imágenes que utilizas.

Resumen

En este laboratorio (lab), aprendimos cómo trabajar con Docker Content Trust. Primero, inspeccionamos una imagen no firmada para entender su información básica y la ausencia de detalles de firma. Luego, exploramos el proceso de firmar una etiqueta (tag) de imagen de Docker como administrador de un repositorio, que implica habilitar la confianza en el contenido y utilizar el comando docker trust sign para afirmar la autenticidad de la imagen.

Después del proceso de firma, aprendimos cómo verificar la firma como administrador de un repositorio para garantizar la integridad de la imagen. También practicamos firmar una etiqueta como un firmante designado, lo que demuestra la delegación de la autoridad de firma dentro de un repositorio. Finalmente, verificamos la firma como firmante, confirmando la aplicación exitosa y la verificación de la firma delegada.