Skip to main content

5 mejores prácticas para la seguridad de contenedores

Escrito por

19 de julio de 2022

0 minutos de lectura

La seguridad de los contenedores es fundamental porque la imagen del contenedor incluye todos los componentes que finalmente ejecutarán tu aplicación. Si hay vulnerabilidades ocultas en la imagen, aumentan el riesgo y el posible impacto de los problemas de seguridad en producción. Por eso, también es esencial monitorear tu entorno de producción. Aunque crees imágenes sin vulnerabilidades ni privilegios elevados, es necesario vigilar la actividad durante la ejecución.

En términos generales, estos son cinco pasos clave para crear una imagen de contenedor segura:

  1. Protege tu código y sus dependencias

  2. Empieza con una imagen base mínima de una fuente confiable

  3. Administra todas las capas entre tu imagen base y tu código

  4. Usa la administración de acceso

  5. Protege la infraestructura de los contenedores

1. Protege tu código y sus dependencias

La contenerización es una forma de entregar aplicaciones nativas de la nube más rápido, y probablemente sea una de las razones por las que creas contenedores. Los contenedores han ampliado el significado del código de las aplicaciones, pero el código sigue siendo el área que los desarrolladores controlan más directamente. Las dependencias de código abierto pueden superar con facilidad la cantidad de código propietario, por lo que es importante implementar el análisis integrado con herramientas de análisis de composición de software (SCA) y pruebas de seguridad de aplicaciones estáticas (SAST) para automatizar el análisis del código y las dependencias. También puedes analizar contenedores para detectar problemas directamente en los commits y repositorios de Git, lo que probablemente se adapte mejor al proceso de desarrollo.

2. Empieza con una imagen base mínima de una fuente confiable

Aunque el tamaño importa para la portabilidad y las descargas rápidas, también reduce la cantidad de elementos que podrían contener vulnerabilidades. Lo ideal sería que cada imagen de contenedor incluyera tu código y la cantidad mínima de paquetes adicionales necesarios para ejecutar una aplicación. Sin embargo, en la práctica, tendrás muchas aplicaciones y necesitarás encontrar un equilibrio para que las imágenes de contenedor sean fáciles de administrar.

Para elegir una imagen base, hay muchos proveedores confiables que alojan imágenes base de contenedores. Docker Hub es, por mucho, la opción más popular, con más de 3.8 millones de imágenes disponibles, más de 7 millones de repositorios y alrededor de 11 mil millones de descargas al mes. Algunas son Docker Official Images, publicadas por Docker como un conjunto seleccionado de repositorios de soluciones de código abierto de Docker y soluciones listas para usar. Docker también ofrece imágenes de alta calidad que mantienen directamente los Verified Publishers. Los lineamientos de Docker para estos Verified Publishers son un excelente punto de partida para definir tus propias mejores prácticas para las imágenes de contenedor.

Es fácil ir a Docker Hub y encontrar imágenes disponibles públicamente que se ajusten a tu caso de uso, pero es importante prestar atención a su procedencia: verifica si forman parte del programa Docker Official Images o si puedes confirmar su origen y contenido con una herramienta como Notary, que comprueba las firmas digitales y te ofrece cierto nivel de garantía de calidad.

3. Administra todas las capas entre la imagen base y tu código

Las imágenes base requieren consideraciones especiales: al crear tu propia imagen encima de una imagen base, heredas todo lo que esta incluye. Aunque empieces con una imagen ligera, es probable que necesites agregar herramientas y bibliotecas, además de tu código y las instalaciones necesarias para que todo funcione. Debes monitorear todos estos elementos para detectar vulnerabilidades.

La buena noticia es que puedes controlar directamente estas capas intermedias. Sin embargo, es importante priorizar dónde enfocas tu atención durante el desarrollo, las pruebas y el despliegue en producción. Quizás necesites herramientas distintas en cada etapa, pero, a medida que las imágenes se acercan a producción, debes eliminar todo lo que no sea absolutamente necesario.

Si empiezas con una imagen base mínima y agregas solo las herramientas necesarias, será fácil quitarlas más adelante: basta con eliminarlas del Dockerfile y volver a compilar, o usar compilaciones de varias etapas para reunir todas estas etapas en un solo proceso de compilación automatizado. También podrías descubrir vulnerabilidades en las herramientas y los paquetes de soporte instalados en las capas intermedias, pero puedes ignorarlas de forma segura si las imágenes de producción no incluyen esos elementos adicionales. Lee nuestra publicación del blog con más mejores prácticas para las compilaciones de varias etapas.

4. Usa la administración de acceso

En el contexto de los contenedores, el acceso es la capacidad de un usuario determinado para realizar una operación específica en un recurso de contenedor. Las actividades habituales se engloban en las operaciones de crear, leer, actualizar o eliminar (CRUD). Los detalles de la administración de acceso dependen de la plataforma de contenedores. Por ejemplo, en Kubernetes, los usuarios están fuera del clúster, por lo que los administradores deben administrar las identidades fuera del clúster mediante certificados TLS, OAuth2 u otros métodos de autenticación.

Los secretos y el acceso a la red deben regirse por el principio de privilegio mínimo. El acceso de administrador debe limitarse a la creación de infraestructura. Para evitar que un contenedor tenga acceso completo a todos tus recursos, debes asignar funciones y responsabilidades específicas a los contenedores y luego usar herramientas para facilitar, aplicar y monitorear esas funciones.

5. Protege la infraestructura de los contenedores

Además de proteger la imagen del contenedor o el contenedor en ejecución, también es necesario administrar la pila de infraestructura necesaria para ejecutar contenedores. Esto abarca desde un registro de contenedores, como Docker Hub, hasta la orquestación en producción con Kubernetes.

Como los registros de contenedores están diseñados para fomentar la colaboración mediante un espacio seguro donde almacenar y compartir contenedores, pueden introducir vulnerabilidades, malware y secretos expuestos. A menudo incluyen funciones de seguridad integradas, y siempre debe usarse un protocolo de seguridad como TLS al conectarse a un registro. Asimismo, Kubernetes incluye herramientas para crear y aplicar controles de seguridad tanto a nivel de clúster como de red. Lee nuestro artículo sobre seguridad de los registros de contenedores para obtener más información.

Los contenedores siempre deben ejecutarse en un sistema seguro o en un servicio en la nube. En el caso de un servicio, se deben usar controles de acceso basados en roles (RBAC) para acceder al registro.

Un punto más: los atacantes están enfocando su atención en etapas cada vez más tempranas del pipeline de CI/CD, así que no descuides la seguridad de las primeras etapas del desarrollo. Al crear aplicaciones y contenedores, es importante analizar el código antes de usarlo en una aplicación y antes del despliegue. Además, es fundamental aplicar el principio de privilegio mínimo (POLP) y automatizar las comprobaciones de seguridad y los controles dentro del pipeline de desarrollo.

Leer más

feature customer snowflake
Article

Seguridad desde el inicio: presentamos la integración de Snyk Studio con Snowflake Cortex Code

Snyk Studio se integra con Snowflake Cortex Code para analizar código generado por IA, dependencias y contenedores en busca de vulnerabilidades durante el desarrollo.

blog feature pypi spoof
Article

Toda la Snyk AI Security Platform, gratis para quienes mantienen proyectos de código abierto

Quienes mantienen proyectos de código abierto reciben reportes de vulnerabilidades reales sin parar y necesitan ayuda para priorizarlas, corregirlas y publicar soluciones más rápido. El Secure Developer Program de Snyk ofrece a los proyectos que cumplen los requisitos acceso gratis a Snyk AI Security Platform.

feature insights announcement
Blog

Compromiso de la cadena de suministro de node-gyp: un gusano de npm que se propaga solo y se oculta en binding.gyp

Un nuevo gusano de npm abusa de binding.gyp para activar node-gyp durante la instalación y permitir que paquetes maliciosos ejecuten código sin scripts del ciclo de vida. Roba credenciales, persiste en GitHub y se propaga entre mantenedores.