GNU/Linux >> Tutoriales Linux >  >> Panels >> Docker

Cómo firmar sus imágenes Docker para aumentar la confianza

La mayoría de las imágenes de Docker se distribuyen sin ninguna verificación de que son lo que dicen ser. Puede aumentar la confianza en sus imágenes firmándolas digitalmente. Esto demuestra a los usuarios que usted publicó la imagen, no un impostor.

El sistema de firma de Docker se conoce como confianza de contenido. Está expuesto a través de docker trust Comando CLI. Content Trust utiliza conjuntos de claves para permitir que los registros verifiquen la identidad de los posibles editores. Los usuarios de imágenes firmadas pueden estar seguros de que provienen de la fuente esperada.

Generación de claves

Necesitará un par de claves para comenzar a usar Content Trust. Los pares de claves pueden ser emitidos por autoridades de certificación o generados por la CLI de Docker.

Ejecute docker trust key generate your-name para crear una clave. Se le pedirá que ingrese una frase de contraseña. Deberá proporcionarlo cada vez que use la clave para firmar o verificar imágenes. Presione enter en cada indicación para continuar.

Una vez que haya terminado, se generarán dos archivos en ~/.docker/trust :la clave privada y su correspondiente clave pública. De manera similar a las claves SSH, la clave privada nunca debe compartirse y no debe perderse. Si necesita moverse entre máquinas, puede importar un archivo de clave privada a otra instalación de Docker usando docker trust key load my-key.pem .

Agregando su clave pública a su registro

Docker Hub es compatible con todas las funciones de docker trust . Si está utilizando un servidor Docker Registry privado, se requiere un proceso de configuración más complejo.

El servidor de registro no ofrece soporte de firma integrado. Necesita un servicio Docker Notary independiente que se encargue de la verificación de firmas para la inserción y extracción de imágenes. Notary tiene tres componentes, el servidor, un servicio de firma y una base de datos MySQL. Debe implementarse en la misma URL que su servidor de registro.

Puede poner en marcha Notary utilizando su archivo Docker Compose:

git clone https://github.com/theupdateframework/notary.git
docker-compose up -d

Esta implementación básica se ejecutará con un certificado TLS autofirmado. Está diseñado solo para uso de desarrollo. Deberá confiar en el archivo de la autoridad de certificación fixtures/root-ca.crt en el repositorio antes de que los clientes puedan conectarse con éxito.

sudo mkdir -p /usr/share/ca-certificates/extra
sudo cp fixtures/root-ca.crt /usr/share/ca-certificates/extra/notary.crt
sudo update-ca-certificates

Los comandos anteriores copiarán el archivo del certificado en ca-certificates ubicación de almacenamiento. update-ca-certificates recarga todos los certificados, agregando la autoridad Notarial a su sistema.

Si va a ejecutar Notary en producción, deberá configurar la autenticación para que solo los usuarios autorizados puedan agregar nuevas claves. El NOTARY_AUTH la variable de entorno debe establecerse al iniciar el servicio con docker-compose . Esto acepta credenciales codificadas en Base64 en username:password formato. Se le pedirá que los proporcione cuando interactúe con Notario.

export NOTARY_AUTH=$(echo "username" | base64):$(echo "password" | base64)
docker-compose up -d

Ahora está listo para agregar su clave pública a su servidor Notary. Las claves se agregan por repositorio. Esto le permite aislar imágenes entre sí y habilita la compatibilidad con colaboradores externos delegados. Puede agregar a otras personas con derechos de publicación más adelante haciendo que repitan el comando con su clave privada.

docker trust signer add your-key-name registry.example.com/my-image

Deberá ingresar la frase de contraseña de la clave. Luego estará disponible en su servidor de registro.

Imágenes de firma

Una vez que su clave esté en el registro, puede comenzar a firmar imágenes. Use el docker trust sign dominio. Asegúrese de que cada imagen esté etiquetada con la URL de registro correcta.

docker trust sign registry.example.com/my-image:latest

Este comando firmará la imagen con su clave y luego la enviará directamente al registro. No es necesario ejecutar manualmente docker push después. Deberá configurar una clave de depósito y una frase de contraseña para proteger los datos de confianza de la imagen individual. Siga cada indicación para configurar sus claves de firma.

Si tiene flujos de trabajo existentes usando docker push , puede optar por ese comando en lugar de docker trust . Complete los pasos anteriores para crear una clave y agregarla a Notary. Establecer el DOCKER_CONTENT_TRUST variable de entorno para que los comandos de Docker CLI detecten Content Trust y lo apliquen automáticamente.

export DOCKER_CONTENT_TRUST=1
docker push registry.example.com/my-image:latest

Verá que la salida del shell coincide con el docker trust sign produce. Docker realiza las mismas acciones que el comando más explícito.

Verificación de imágenes de confianza

El DOCKER_CONTENT_TRUST La variable reaparece con mayor importancia a la hora de verificar las imágenes que extraes. Docker no intenta verificar las imágenes de forma predeterminada, incluso si contienen datos de confianza. Debe configurar la variable de entorno en su shell para activar la validación de confianza de contenido.

export DOCKER_CONTENT_TRUST=1
docker pull registry.example.com/my-image:latest

Cuando se establece la variable, todas las extracciones de imágenes se compararán con el servidor Notary de su registro. Si Notary no puede proporcionar ningún dato de confianza, la imagen se trata como si no estuviera firmada y se anulará la extracción. Esto lo protege de las imágenes publicadas por actores malintencionados que se hacen pasar por un editor genuino.

Los usuarios de Docker Enterprise pueden configurar una configuración de daemon opcional para evitar que Docker Engine funcione con imágenes que no son de confianza que ya están en el host. Estos pueden haber llegado en tar archivos de una fuente no segura.

Edite /etc/docker/daemon.json y agregue la siguiente clave:

{
    "content-trust": {
        "mode": "enforced"
    }
}

Vuelva a cargar la configuración del demonio Docker con systemctl reload docker para aplicar el cambio.

Puede inspeccionar el estado de confianza de una imagen usando docker trust inspect . Esto mostrará las firmas asociadas con la imagen, lo que le permitirá verificar si ha sido firmada.

docker trust inspect registry.example.com/my-image:latest

Si ha publicado una imagen que ya no desea firmar, use docker trust revoke dominio. Esto eliminará los datos de confianza de la imagen, lo que provocará que falle todas las verificaciones posteriores del cliente de Docker.

docker trust revoke registry.example.com/my-image:latest

Resumen

Docker Content Trust agrega firmas digitales al ecosistema de Docker, lo que aumenta la seguridad al usar imágenes. Si envía imágenes a Docker Hub, ya tiene todo lo que necesita para usar la función. Establecer el DOCKER_CONTENT_TRUST variable de entorno y use los comandos de Docker como de costumbre.

Para los usuarios de registros autohospedados, la configuración es más complicada, pero aun así vale la pena el esfuerzo en un entorno crítico de confianza. En el momento de escribir este artículo, Notary todavía no tiene una versión estable oficial y la documentación se encuentra en su repositorio de GitHub.


Docker
  1. Cómo mover imágenes de Docker entre hosts

  2. Cómo buscar, extraer, enumerar y eliminar imágenes de Docker en Linux

  3. Cómo usar imágenes, contenedores y archivos Docker en profundidad

  4. Cómo compartir imágenes de Docker con otros

  5. Cómo modificar imágenes de Docker

Cómo crear imágenes de Docker en una canalización de GitLab CI

Cómo actualizar las imágenes de Docker a la última versión

Cómo copiar archivos con Docker cp a su Docker Container

Mantenga sus imágenes de Docker manejables con Docker Image Prune

Cómo usar Docker Commit para cambiar imágenes de contenedores

Cómo listar/buscar/extraer imágenes de la ventana acoplable en Linux