Compartir comentarios
Las respuestas se generan en base a la documentación.

Automatización con confianza de contenido

Es muy común que Docker Content Trust se integre en los sistemas de automatización existentes. Para permitir que las herramientas envuelvan (wrap) a Docker y suban contenido de confianza, existen variables de entorno que se pueden pasar al cliente.

Esta guía sigue los pasos descritos en Firmar imágenes con Docker Content Trust. Asegúrate de comprender y cumplir con los requisitos previos.

Cuando se trabaja directamente con el cliente Notary, este utiliza su propio conjunto de variables de entorno.

Añadir una clave privada de delegación

Para automatizar la importación de una clave privada de delegación al almacén local de confianza de Docker, necesitamos proporcionar una frase de contraseña (passphrase) para la nueva clave. Esta frase de contraseña se requerirá cada vez que esa delegación firme una etiqueta.

$ export DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE="mypassphrase123"

$ docker trust key load delegation.key --name jeff
Loading key from "delegation.key"...
Successfully imported key from delegation.key

Añadir una clave pública de delegación

Si inicias un repositorio al mismo tiempo que añades una clave pública de delegación, deberás utilizar la frase de contraseña de la clave raíz canónica local de Notary para crear los datos de confianza del repositorio. Si el repositorio ya ha sido iniciado, solo necesitarás la frase de contraseña del repositorio.

# Exportar la frase de contraseña de la clave raíz local si es necesario.
$ export DOCKER_CONTENT_TRUST_ROOT_PASSPHRASE="rootpassphrase123"

# Exportar la frase de contraseña del repositorio
$ export DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE="repopassphrase123"

# Inicializar repositorio y añadir delegación
$ docker trust signer add --key delegation.crt jeff registry.example.com/admin/demo
Adding signer "jeff" to registry.example.com/admin/demo...
Initializing signed repository for registry.example.com/admin/demo...
Successfully initialized "registry.example.com/admin/demo"
Successfully added signer: registry.example.com/admin/demo

Firmar una imagen

Finalmente, al firmar una imagen, necesitaremos exportar la frase de contraseña de la clave de firma. Esta se creó cuando la clave se cargó en el almacén local de confianza de Docker con docker trust key load.

$ export DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE="mypassphrase123"

$ docker trust sign registry.example.com/admin/demo:1
Signing and pushing trust data for local image registry.example.com/admin/demo:1, may overwrite remote trust data
The push refers to repository [registry.example.com/admin/demo]
428c97da766c: Layer already exists
2: digest: sha256:1a6fd470b9ce10849be79e99529a88371dff60c60aab424c077007f6979b4812 size: 524
Signing and pushing trust metadata
Successfully signed registry.example.com/admin/demo:1

Compilar con confianza de contenido

También puedes compilar con confianza de contenido. Antes de ejecutar el comando docker build, debes configurar la variable de entorno DOCKER_CONTENT_TRUST, ya sea de forma manual o mediante un script. Considera el siguiente Dockerfile sencillo.

# syntax=docker/dockerfile:1
FROM docker/trusttest:latest
RUN echo

La etiqueta FROM está descargando una imagen firmada. No puedes compilar una imagen cuyo FROM no esté presente localmente o firmado. Dado que existen datos de confianza para la etiqueta latest, la siguiente compilación debería tener éxito:

$  docker build -t docker/trusttest:testing .
Using default tag: latest
latest: Pulling from docker/trusttest

b3dbab3810fc: Pull complete
a9539b34a6ab: Pull complete
Digest: sha256:d149ab53f871

Si la confianza de contenido está habilitada, compilar desde un Dockerfile que dependa de una etiqueta sin datos de confianza hace que el comando de compilación falle:

$  docker build -t docker/trusttest:testing .
unable to process Dockerfile: No trust data for notrust

Información relacionada