Búsqueda de sitios web

Mejores prácticas de seguridad de contenedores: protección de Docker


Cuando se trata de contenedores, Docker se ha convertido fácilmente en la tecnología más adoptada. A medida que las empresas y los usuarios de la industria buscan el uso de contenedores para reducir costos, escalar servicios y agilizar la implementación de numerosas aplicaciones, un aspecto importante que no debe pasarse por alto es la seguridad de Docker. Docker es comúnmente elogiado por ser más seguro que las implementaciones tradicionales y, si bien es cierto, aún debemos ser conscientes de las posibles fallas de seguridad para evitar la explotación de una herramienta tan poderosa.

En este tutorial, repasaremos algunas de las medidas de seguridad más importantes para Docker en un sistema Linux. Estas son las mejores prácticas que los administradores de sistemas deben seguir para garantizar que sus aplicaciones en contenedores en Docker se mantengan seguras contra posibles exploits y usuarios malintencionados.

En este tutorial aprenderás:

  • Las 5 mejores prácticas principales para proteger Docker en Linux

Mejores prácticas de seguridad de Docker

A continuación, contaremos cinco de las recomendaciones más importantes para mantener seguro su entorno Docker y sus aplicaciones en contenedores.

¿Para qué se utiliza Docker?
Docker es el nombre más importante en contenedorización, aunque hay muchas otras herramientas que también pueden hacer el trabajo. Muchos administradores de Linux comienzan a utilizar Docker para crear aplicaciones que puedan empaquetarse en un contenedor e implementarse fácilmente en cualquier sistema. Esta también es una excelente manera para que los desarrolladores compartan su trabajo, ya que cualquiera con Docker puede ejecutar la aplicación.

1. Evite el uso de permisos de root

Los usuarios de Linux ya deberían intentar minimizar el uso de privilegios administrativos siempre que sea posible. Esta ya es una regla de oro de los sistemas Linux, donde la cuenta raíz debe usarse exclusivamente para llevar a cabo tareas y comandos importantes que las cuentas de usuario normales no pueden realizar.

La misma regla se aplica a los contenedores Docker. A veces, los desarrolladores asignan de manera perezosa o desordenada más permisos de los necesarios a una aplicación Dockerizada, en lugar de tomarse el tiempo para decidir exactamente qué privilegios son necesarios y delegarlos en consecuencia. Un descuido de este tipo puede tener consecuencias nefastas si un usuario logra hacerse con el control de una aplicación, dándole efectivamente rienda suelta sobre el entorno.

Podemos evitar este error asegurándonos de no ejecutar contenedores como root (verifique USER dentro del Dockerfile para garantizar esto) y evitando ejecutar contenedores con opciones como --id 0 o --privilegiado. También podemos evitar ejecutar Docker como root en la mayoría de las situaciones, aunque esta no es una precaución tan importante como los puntos antes mencionados.

2. Actualice periódicamente y con precaución

Las actualizaciones de imágenes de Docker suelen ser algo bueno. Introducen nuevas funciones, parches de seguridad, etc. Por lo tanto, generalmente se recomienda buscar actualizaciones con regularidad y mantener actualizadas todas las imágenes de Docker. Sin embargo, en entornos sensibles donde el tiempo de actividad es muy importante, se pueden tomar medidas adicionales para preparar estos cambios antes de implementarlos en producción.

Aunque las actualizaciones son generalmente algo bueno, también pueden introducir cambios importantes o características inestables que aún no se han resuelto. En un entorno que utiliza muchos contenedores Docker y requiere atención adicional para garantizar el tiempo de actividad, podemos aprovechar tecnologías como Kubernetes, que nos permitirá implementar actualizaciones gradualmente y monitorear las aplicaciones en busca de errores en caso de que necesitemos cancelar las actualizaciones y revertirlas. .

Ver también: Kubernetes vs Docker, ¿cuál es la diferencia?

3. Utilice imágenes oficiales

Siempre que sea posible, opte por utilizar imágenes oficiales que se proporcionan para descargar en Docker Hub. Estas imágenes reciben actualizaciones periódicas y son ejecutadas por desarrolladores de la comunidad Docker, por lo que generalmente son más confiables y tienen una mayor longevidad que las imágenes mantenidas por varios usuarios en otros sitios web.

Por ejemplo, aplicaciones comunes como NGINX o Ubuntu tienen imágenes oficiales disponibles en Docker Hub. Usarlos es muy fácil, ya que esta capacidad ya está integrada en Docker de forma predeterminada:


# Pull an official nginx image from Docker Hub:
$ docker pull nginx:latest

El mismo comando que se muestra arriba también se puede utilizar para actualizar la imagen.

4. Limitar las capacidades de los contenedores

Esta recomendación va de la mano con la primera, que es evitar el uso de permisos de root. Del mismo modo, también deberíamos limitar las capacidades de nuestros contenedores Docker en todas las formas posibles. Por lo general, los contenedores deben ejecutarse solo con los permisos mínimos que necesitan para realizar su trabajo correctamente. Dado que las aplicaciones Docker suelen tener una función muy específica, podemos ser muy precisos con las capacidades que asignamos.

Una forma de limitar las capacidades es mediante el uso del indicador --internal. Esto evita que un contenedor Docker acceda a cualquier cosa fuera de la red interna, lo que a menudo no es un permiso necesario que debamos delegar. Por lo tanto, los contenedores Docker aún pueden comunicarse entre sí (si se configuran correctamente), pero no con la red externa del sistema host. Para las aplicaciones Docker que se han configurado para acceder a través de proxy, el indicador --internal es algo que se puede usar todo el tiempo.

La opción --cap-drop=ALL reducirá las capacidades de Linux al mínimo, algo que muchas aplicaciones no requieren. Podemos combinar esta opción con otras como --cap-add=NET_BIND_SERVICE para vincular un servicio a un puerto específico sin requerir permisos de root.

5. Auditorías de seguridad con Docker Bench Security

Los desarrolladores de Docker saben que es una aplicación compleja con muchas facetas que proteger. Es demasiado esperar que cada administrador de Linux se familiarice lo suficiente con Docker como para comprobar cada configuración en busca de posibles deficiencias de seguridad.

Es por eso que existe Docker Bench Security, que proviene del Docker GitHub oficial y realizará una auditoría de seguridad en su configuración de Docker. Básicamente, ejecuta un conjunto de scripts Bash que realizan una variedad de comprobaciones de la seguridad de su entorno y luego informa las amenazas encontradas y las medidas que se pueden tomar para reforzar su configuración.

Es tan sencillo como clonar el repositorio y luego ejecutar el script:


$ git clone https://github.com/docker/docker-bench-security.git
$ cd docker-bench-security
$ sudo sh docker-bench-security.sh

Pensamientos finales

En este tutorial, repasamos una lista de las cinco mejores prácticas para proteger Docker en un sistema Linux. Aunque Docker es una tecnología relativamente nueva, encontramos que muchas de sus mejores prácticas son similares a las empleadas en los sistemas Linux tradicionales, como la limitación de capacidades, herramientas de auditoría de seguridad, instalación de actualizaciones y uso de software confiable. El uso de Docker, en sí mismo, junto con estas recomendaciones principales le ayudará a mantener sus aplicaciones seguras al minimizar la superficie de ataque más de lo que podría hacerlo una implementación tradicional.

Artículos relacionados: