Cómo proteger imágenes de Docker con cifrado a través de Containerd

08:15 13/09/2021 | Lượt xem

Cifrado de imágenes de Docker con containerd

Docker se ha disparado en popularidad durante la última década para DevOps. Sus tasas de adopción masivas lo convierten en la primera opción para la orquestación basada en contenedores. Lo utilizan pequeñas implementaciones y empresas a gran escala para lanzar e implementar aplicaciones utilizando contenedores de Linux, que, en pocas palabras, es una forma de virtualización a nivel de sistema operativo.

A diferencia de una máquina virtual, un contenedor solo contiene los archivos necesarios. Docker es de código abierto y es un motor de contenedores que utiliza características del Kernel de Linux para crear contenedores en la parte superior de un sistema operativo. Esto significa que es fácil para un desarrollador mover de manera eficiente una aplicación de una computadora portátil a un entorno de prueba.

El Docker por diseño es pequeño, liviano, portátil, de inicio rápido, altamente escalable y excelente para la integración continua (CI) y la implementación continua (CD). Pero, ¿qué tan seguro es?

De forma predeterminada, las imágenes del contenedor de Docker no están cifradas. Estas imágenes de contenedor a menudo contienen código y datos confidenciales, como claves privadas y API, que utiliza la aplicación. Esto significa que si un usuario malintencionado obtiene acceso al contenedor de Docker, también tendrá acceso a sus datos confidenciales.

como podemos prevenir esto? La solución más sencilla es cifrar sus contenedores Docker.

Cómo cifrar una imagen de contenedor de Docker

Para este tutorial, usaremos containerd para encriptar su imagen de Docker. ¿Qué es contenedor? containerd es un estándar de la industria para tiempos de ejecución de contenedores que está disponible como un demonio para Linux y Windows y está diseñado para integrarse en un sistema más grande. Gestiona el ciclo de vida completo del contenedor de su sistema host, desde la transferencia y el almacenamiento de imágenes, la ejecución y supervisión del contenedor, hasta el almacenamiento de bajo nivel y los adjuntos de red.

Para comenzar a usar containerd, necesitará Go Go 1.9.xo superior en su host Linux. Para instalar containerd, puede hacerlo usando el comando wget o ir directamente a la página de descarga. La última versión actual es 1.5.2 y aquí está el comando para instalar binarios para cottainerd.

Si no existe un archivo de configuración, puede generar un patrón usando el siguiente comando:

Para conectarse a containerd, cree un nuevo archivo main.go e importe containerd como un paquete raíz que contiene el cliente. Aquí está el código de ejemplo:

El ejemplo anterior creará un nuevo cliente con una ruta de socket predeterminada en contenedor. Para cambiar esto, cree un contexto para las llamadas a los métodos del cliente.

Ahora es el momento de obtener la imagen redis de DockerHub.

Aquí está todo el código main.go que necesita en un espacio:

Ahora puede crear su main.go

Si ejecuta sudo ./main, obtendrá el siguiente resultado (o algo similar):

Ahora que el contenedor está en funcionamiento, ¿cómo ciframos exactamente una imagen de Docker?

Primero, necesitamos generar algunas claves. Estos son los comandos para generar claves RSA con openssl.

Insertemos una imagen para poder cifrarla.

Para ver su información de cifrado en la imagen, puede usar el comando ctr-enc image layerinfo. Como aún no hemos cifrado nuestra imagen, esta es la apariencia:

Ahora es el momento de cifrar nuestra imagen de Docker. Para hacer esto, use el comando ctr-enc images encrypt. Esto cifrará la imagen existente en una nueva etiqueta. El cifrado de imágenes ctr-enc requiere cinco argumentos.

El primer argumento es –recipient jwe: mypubkey.pem. Esta parte del comando le dice a containerd que queremos encriptar la imagen usando la clave pública mypubkey.pem. Tiene el prefijo jwe: para indicar que el esquema de cifrado es el esquema de cifrado JSON web.

El segundo argumento es –platform linux / amd64. Esta bandera le dice a containerd que solo cifre la imagen de linux / amd64.

El tercer argumento es docker.io/library/bash:latest, que apunta a la imagen que queremos cifrar.

El cuarto argumento es bash.enc: latest, que es la etiqueta de la imagen cifrada que se creará.

Y finalmente, también puede decidir qué capa desea cifrar usando la etiqueta –layer. Este argumento es opcional y se puede omitir si desea cifrar la imagen completa y no solo partes de la imagen.

Aquí hay un ejemplo de cómo usarlo con nuestra clave pública.

Para cargar su imagen encriptada al registro, simplemente puede usar sudo docker run. Vale la pena señalar que solo la versión de Docker 2.7.1 y el registro superior admite imágenes OCI cifradas.

Aquí está el comando completo para ello:

Ahora puede etiquetar y enviar la imagen y luego eliminar la copia de trabajo usando el siguiente comando:

Ahora, si intentamos ejecutar el contenedor cifrado, la imagen fallará si no se proporcionan las claves de la imagen cifrada. Puede pasar claves usando la marca –key. A continuación, se muestra un ejemplo de cómo hacer esto:

Básicamente, se trata de cifrar una imagen de Docker, cargarla en un registro y ejecutar la imagen descifrada.

¿A dónde vamos desde aquí?

Cuando se trata de seguridad, el uso de la configuración predeterminada es uno de los mayores riesgos que puede enfrentar cualquier aplicación de nivel de producción. El cifrado es una metodología para proteger su Docker. Otros métodos incluyen establecer límites de recursos para su contenedor e implementar Docker Bench Security para verificar el host, la configuración del demonio de Docker y los archivos de configuración, así como las imágenes del contenedor, los archivos de compilación y los tiempos de ejecución del contenedor.

Otro protocolo de seguridad estándar de Docker es no ejecutar nunca un contenedor como usuario root. Si no especifica un usuario al iniciar un contenedor, el valor predeterminado es el usuario definido en la imagen, que suele ser el usuario raíz.

Siempre escanee y reconstruya imágenes para incluir parches de seguridad para que sus implementaciones estén siempre actualizadas. También puede habilitar Docker Content Trust (DCT), que utiliza firmas digitales para validar la integridad de las imágenes obtenidas de los registros de Docker remotos.

Related Posts

Agregar fondos a archivos PDF

Este artículo explicará cómo agregar un fondo a un PDF con Foxit PDF Editor. Para agregar un nuevo fondo, haga lo siguiente: 1. Abra un documento al que desee agregar un fondo y elija...

lên đầu trang