¿Cómo reforzar la seguridad en contenedores Docker?
Si no se implementan medidas de seguridad en los contenedores Docker aumenta la posibilidad de tener ataques, configuraciones inseguras y riesgos de acceso no autorizado.
Si no se implementan medidas de seguridad en los contenedores Docker aumenta la posibilidad de tener ataques, configuraciones inseguras y riesgos de acceso no autorizado.
POR WALTER MEDINA / BACKEND SOFTWARE ENGINEER
Los contenedores Docker son cruciales para el desarrollo y el despliegue de aplicaciones modernas, debido a que ofrecen ventajas como portabilidad, eficiencia de recursos, escalabilidad y un entorno aislado y eficiente que cambia la forma en que se implementan los servicios, tanto en la nube, como en infraestructuras locales. Por todo lo anterior es vital mantenerlos seguros.
No hacerlo implica la exposición a ataques, vulnerabilidades en las imágenes de los contenedores, configuraciones inseguras y riesgos de acceso no autorizado, así que lo mejor es aplicar medidas de seguridad en todas las fases del ciclo de vida del contenedor, con lo que podemos reducir significativamente la superficie de ataque.
Pero antes de continuar es preciso ahondar en qué es un contenedor Docker, el cual es definido de la siguiente manera por Oracle:
En una computadora, los contenedores comparten un componente crucial llamado kernel, que es esencial para el funcionamiento del sistema operativo, por lo que es muy importante dedicar esfuerzos para darle seguridad, lo que se logra tomando las siguientes medidas:
Además de configurar correctamente los contenedores es crucial asegurarse de que todas las capas de imagen de un contenedor estén libres de vulnerabilidades conocidas. Esto se puede lograr mediante el uso de herramientas de escaneo estático de imágenes, ya sea en los repositorios o antes de su publicación.
Algunas herramientas destacadas para este propósito son:
Además, herramientas de integración continua como Jenkins, TeamCity, Bamboo, TFS, Travis CI, CircleCi, GitLab Ci y Team Services pueden configurarse para automatizar el escaneo de imágenes como parte de sus procesos.
Una práctica recomendada es mantener los datos separados de los contenedores. Esto se logra mediante el uso de volúmenes Docker, que permiten almacenar datos de manera independiente de la ejecución del contenedor. Los volúmenes aseguran que la información se conserve, incluso si el contenedor se detiene o se elimina, ya que se almacena en el sistema de archivos del host, no dentro del contenedor.
Por cierto, los volúmenes de Docker tienen características especiales:
Un contenedor de volumen de datos en Docker permite que varios contenedores compartan almacenamiento persistente. Esto significa que los contenedores pueden acceder a volúmenes almacenados en un contenedor específico, facilitando el uso compartido de datos entre ellos. Una gran ventaja de este sistema es que los contenedores no necesitan conocer la ubicación exacta de los datos en el disco, debido a que Docker gestiona el acceso a estos archivos, lo que reduce el riesgo de que procesos ajenos a Docker alteren los datos.
Además, este enfoque es similar al funcionamiento de un servidor Network File System (NFS), donde los datos se distribuyen en una red, así que los contenedores pueden crearse y eliminarse sin afectar la información, que permanece centralizada en el contenedor de datos. Esto añade una capa adicional de abstracción y eficiencia en la gestión de datos en entornos Docker.
Pero no todo es tan sencillo, así que hay que tener cuidado al realizar algunos procesos relacionados con los contenedores de volumen de datos, como podemos leer en el libro Seguridad y monitorización en contenedores e imágenes (p. 318):
En conclusión, al implementar sistemas de software utilizando contenedores Docker es recomendable utilizar prácticas que contemplen la seguridad durante el desarrollo, como lo es DevSecOps, que AWS define como “la práctica de integrar las pruebas de seguridad en cada etapa del proceso de desarrollo de software. Incluye herramientas y procesos que fomentan la colaboración entre los desarrolladores, los especialistas en seguridad y los equipos de operaciones para crear un software que sea eficiente y seguro".
Haciendo esto, nos aseguramos de que los contenedores Docker no sólo sean eficientes y escalables, sino también seguros, fortaleciendo así la infraestructura tecnológica y la confianza de los usuarios en las aplicaciones desarrolladas.