In this article
Seguridad de Kubernetes: problemas comunes y prácticas recomendadas
Conoce los problemas de seguridad de Kubernetes en un contexto de seguridad nativa de la nube
¿Qué es la seguridad de Kubernetes?
La seguridad de Kubernetes se define como las acciones, los procesos y los principios que deben seguirse para garantizar la seguridad de tus implementaciones de Kubernetes. Esto incluye, entre otras cosas, proteger los contenedores, configurar correctamente las cargas de trabajo, proteger la red de Kubernetes y proteger tu infraestructura.
¿Por qué es importante la seguridad de Kubernetes?
La seguridad de Kubernetes es importante debido a la variedad de amenazas que enfrentan los clústeres y los pods, entre ellas:
Actores maliciosos
Malware que se ejecuta dentro de contenedores
Imágenes de contenedor defectuosas
Usuarios comprometidos o no autorizados
Sin controles adecuados, un actor malicioso que vulnere una aplicación podría intentar tomar el control del host o de todo el clúster.
¿Qué lugar ocupa Kubernetes en el proceso general de desarrollo?
En el siguiente diagrama, vemos dónde encaja la seguridad de Kubernetes en el ciclo de vida del desarrollo de software (SDLC). El código se prueba después de la etapa de compilación para garantizar que las vulnerabilidades no lleguen al entorno de Kubernetes en producción. Luego, la implementación y la seguridad de la infraestructura en la nube monitorean las aplicaciones en ejecución y envían información útil a los desarrolladores, lo que crea un ciclo de retroalimentación positivo del código a la nube y de vuelta al código.

Principales problemas de seguridad de Kubernetes
Aunque existen varios problemas de seguridad de Kubernetes, estos son los tres más importantes que debes tener en cuenta:
Configuración de los controles de seguridad de Kubernetes: Al implementar Kubernetes por tu cuenta a partir del código abierto, ninguno de los controles de seguridad viene configurado de fábrica. Averiguar cómo funcionan y cómo configurarlos de forma segura es responsabilidad exclusiva del operador.
Implementación segura de cargas de trabajo: Tanto si usas una distribución de Kubernetes con controles de seguridad preconfigurados como si creas el clúster y su seguridad por tu cuenta, los desarrolladores y los equipos de aplicaciones que no conocen a fondo Kubernetes pueden tener dificultades para proteger correctamente sus cargas de trabajo.
Falta de seguridad integrada: Aunque Kubernetes ofrece controles de acceso y funciones que ayudan a crear un clúster seguro, la configuración predeterminada no es 100 % segura. Las organizaciones deben realizar los cambios adecuados en las cargas de trabajo, el clúster, la red y las configuraciones de infraestructura para garantizar que los clústeres de Kubernetes y los contenedores estén completamente protegidos.
Desafíos y soluciones de seguridad de Kubernetes
Aunque las soluciones de seguridad integradas en Kubernetes no cubren todos los problemas posibles, el ecosistema de Kubernetes ofrece muchas soluciones de seguridad.
Algunas áreas de Kubernetes que presentan desafíos y requieren herramientas de seguridad adicionales son:
Seguridad de las cargas de trabajo: La mayoría de las cargas de trabajo de Kubernetes son contenedores que se ejecutan en motores como containerd, cri-o o Docker. El código y los demás paquetes de esos contenedores no deben tener vulnerabilidades.
Configuración de las cargas de trabajo: Tanto si usas manifiestos de Kubernetes, Helm Charts o herramientas de plantillas, la configuración para implementar tus aplicaciones en Kubernetes suele definirse en código. Este código afecta los controles de seguridad de Kubernetes, que determinan cómo se ejecuta una carga de trabajo y qué puede o no puede ocurrir en caso de una vulneración. Por ejemplo, limitar la CPU, la memoria y la red de cada carga de trabajo al uso máximo previsto ayuda a contener cualquier vulneración y limitarla a la carga de trabajo afectada, además de garantizar que los demás servicios no se vean comprometidos.
Configuración del clúster: Hay varias herramientas de evaluación de seguridad de Kubernetes disponibles para tus clústeres en ejecución, como Sysdig, Falco y Prometheus. Entre otras funciones, estas herramientas usan registros de auditoría y otras métricas integradas de Kubernetes para comprobar el cumplimiento de las prácticas recomendadas de seguridad de Kubernetes y de CIS y otros estándares de seguridad relevantes.
Redes de Kubernetes: Proteger la red es fundamental en Kubernetes. Deben tenerse en cuenta las comunicaciones entre pods, el tráfico de entrada y salida, la detección de servicios y, si es necesario, las mallas de servicios (por ejemplo, Istio). Una vez que se vulnera un clúster, todos los servicios y equipos de la red están en riesgo. Por eso, es importante asegurarse de que tus servicios y las comunicaciones entre ellos estén aislados y limitados a lo estrictamente necesario. Esto, junto con el uso de criptografía para mantener la privacidad de tus equipos y servicios, también puede ayudar a contener la amenaza y evitar una vulneración que afecte a toda la red.
Seguridad de la infraestructura: Como las aplicaciones distribuidas se ejecutan en muchos servidores (con redes y almacenamiento físicos o virtuales), proteger tu infraestructura de Kubernetes —en particular, los nodos principales, las bases de datos y los certificados— es fundamental. Si un actor malicioso vulnera tu infraestructura, también podría acceder a todo lo necesario para acceder a tu clúster y tus aplicaciones.
Cada uno de estos desafíos se puede abordar con las herramientas de seguridad disponibles en el ecosistema de Kubernetes. La alianza entre Snyk y Sysdig fortalece la colaboración entre los desarrolladores y los equipos de SecOps al ofrecer herramientas pensadas primero para los desarrolladores en cada aspecto de la seguridad de Kubernetes, desde el contenedor hasta el clúster. Snyk ofrece herramientas de seguridad centradas en los desarrolladores que funcionan en todo el SDLC, como Snyk Container y Snyk Open Source. Al combinar esos flujos de trabajo pensados primero para los desarrolladores con Sysdig, podemos proporcionarles información de la inteligencia en tiempo de ejecución de Sysdig —que usa registros de auditoría para monitorear los entornos de Kubernetes— directamente en sus flujos de trabajo habituales. Esta alianza ofrece la primera plataforma de gestión de la postura de seguridad en la nube pensada primero para los desarrolladores.

Seguridad de contenedores centrada en los desarrolladores
Snyk encuentra y corrige automáticamente vulnerabilidades en imágenes de contenedores y cargas de trabajo de Kubernetes.
Protección de los hosts de Kubernetes
El host en la nube representa la última capa de un entorno de Kubernetes. Los principales proveedores de nube ofrecen herramientas de administración para los recursos de Kubernetes, como Google Kubernetes Engine (GKE), Azure Kubernetes Service (AKS) y Elastic Kubernetes Service (EKS) de Amazon, pero la seguridad sigue funcionando según un modelo de responsabilidad compartida.
Hay varias formas de proteger los hosts de Kubernetes contra las vulnerabilidades:
Protege la capa de cargas de trabajo: Asegúrate de que las imágenes de contenedor no tengan vulnerabilidades y estén configuradas correctamente (por ejemplo, impide el uso de contenedores con privilegios).
Establece límites entre las cargas de trabajo y los hosts: Restringe el acceso a los recursos del host reduciendo los privilegios de los contenedores y configurando el entorno de ejecución para limitar el uso de recursos en caso de una vulneración.
Monitorea los clústeres en ejecución: Debes monitorear los registros de auditoría para identificar errores de configuración o comportamientos sospechosos.
Configuración del contexto de seguridad de Kubernetes que debes implementar
Una forma de impedir que los pods y los clústeres accedan al resto del sistema Kubernetes es usar securityContexts. Estas son diez configuraciones principales del contexto de seguridad que deberían usar todos los pods y contenedores:
runAsNonRoot: Al establecer esta opción en “true”, se impide que los contenedores se ejecuten como usuarios root.runAsUser/runAsGroup: Estas opciones garantizan que los contenedores usen un usuario y un grupo específicos durante la ejecución.seLinuxOptions: Esta opción establece el contexto de SELinux para el contenedor o el pod.seccompProfile: Esta opción permite establecer el perfil de seccomp en el kernel de Linux para restringir lo que pueden hacer los contenedores.privileged/allowPrivilegeEscalation: En general, no se recomienda permitir contenedores con privilegios ni que los procesos dentro de ellos eleven sus privilegios, por lo que estas opciones deben establecerse en false.capabilities: Esta opción permite controlar el acceso a las llamadas a nivel del kernel. Otorga solo los permisos mínimos necesarios.readonlyRootFilesystem: Establece esta opción en true cuando sea posible. Esto ayuda a evitar que los atacantes instalen software o cambien las configuraciones del sistema de archivos.procMount: Debe usarse la configuración “Default”, excepto en situaciones específicas, como en el caso de contenedores anidados.fsGroup/fsGroupChangePolicy: Esta configuración debe usarse con precaución, ya que cambiar la propiedad de un volumen confsGrouppuede afectar el rendimiento de inicio del pod y perjudicar los sistemas de archivos compartidos.sysctls: Debes evitar modificar los parámetros del kernel consysctls, a menos que tengas requisitos muy específicos, ya que esto podría desestabilizar el sistema host.

Observabilidad de la seguridad de Kubernetes
En cuanto a la seguridad de K8s, usar configuraciones seguras ayuda a aprovechar las funciones de seguridad de Kubernetes. También es importante usar procesos de monitoreo eficaces para mantener la visibilidad de los recursos de Kubernetes. Aquí tienes algunos consejos para el monitoreo de Kubernetes:
Usa etiquetas y rótulos: Estos definen las aplicaciones mediante metadatos para simplificar su administración.
Monitorea todos los contenedores, no cada uno por separado: Kubernetes administra pods, no contenedores, por lo que es importante monitorear a nivel de pod.
Usa la detección de servicios: Esto ayuda a monitorear los servicios de Kubernetes a pesar de su naturaleza dinámica.
Aprovecha las alertas: Puedes configurar alertas según los indicadores de un entorno de Kubernetes en buen estado. Ten cuidado con el exceso de alertas, ya que los sistemas distribuidos pueden tener muchos puntos de monitoreo posibles.
Inspecciona el plano de control:El plano de control de Kubernetes funciona como una torre de control del tráfico aéreo para las cargas de trabajo y los clústeres. Inspeccionar cada componente del plano de control ayuda a garantizar una orquestación y programación eficientes de las tareas.
Prácticas recomendadas de seguridad de Kubernetes según la fase
En cuanto a la seguridad de Kubernetes, estas son algunas prácticas recomendadas para cada fase:
Fase de desarrollo y diseño
Algunos entornos de Kubernetes pueden ser más seguros que otros. Usar una arquitectura de varios clústeres o varios espacios de nombres con controles RBAC adecuados puede ayudar a aislar las cargas de trabajo.
Fase de compilación
Elige una imagen mínima de un repositorio verificado.
Usa herramientas de análisis de contenedores para detectar vulnerabilidades o errores de configuración en los contenedores.
Fase de implementación
Debes analizar y validar las imágenes antes de implementarlas.
Puedes usar un controlador de admisión para automatizar esta validación y permitir que solo se implementen imágenes de contenedor verificadas.
Fase de ejecución
El entorno de ejecución representa la última capa de defensa de los recursos de Kubernetes.
La API de Kubernetes genera registros de auditoría que deben monitorearse con una herramienta de seguridad en tiempo de ejecución, como Sysdig.
También se deben analizar continuamente las imágenes y los archivos de políticas para evitar la presencia de malware o errores de configuración en el entorno de ejecución.
Cómo usar Snyk para proteger Kubernetes
Snyk puede ayudarte a mejorar y mantener tu postura de seguridad de Kubernetes con herramientas de seguridad pensadas primero para los desarrolladores, como Snyk Container y Snyk IaC. Snyk automatiza el análisis del código de las aplicaciones, las imágenes de contenedor y las configuraciones de Kubernetes, y proporciona información y recomendaciones a los desarrolladores directamente en sus flujos de trabajo.
“Un producto como Snyk nos ayuda a identificar áreas de nuestros servicios que podrían estar expuestas a amenazas de actores externos”, explicó Rizzo. ... “Ahora que Snyk forma parte de nuestra canalización de CI/CD, las verificaciones de seguridad se realizan siempre en etapas más tempranas del desarrollo.”
Nuestra alianza con Sysdig amplía nuestras capacidades de seguridad al entorno de ejecución.
Seguridad de contenedores centrada en los desarrolladores
Snyk encuentra y corrige automáticamente vulnerabilidades en imágenes de contenedores y cargas de trabajo de Kubernetes.
Preguntas frecuentes sobre la seguridad de Kubernetes
¿Kubernetes representa un riesgo de seguridad?
Aunque Kubernetes ofrece funciones y configuraciones de seguridad que pueden ayudar, la seguridad no viene integrada de forma predeterminada. Los operadores deben configurar estos controles para garantizar que los contenedores y el código que se ejecutan en el clúster sean seguros.
Como cada vez más desarrolladores escriben las configuraciones de los contenedores donde se ejecuta su aplicación, deben tener en cuenta la seguridad de Kubernetes en sus planes.
¿Cómo proteges los Secrets de Kubernetes?
Los Secrets de Kubernetes se almacenan sin cifrar de forma predeterminada, así que el primer paso para protegerlos es habilitar el cifrado en reposo. Después, aplica controles de acceso basados en roles para limitar las capacidades de lectura y escritura de los usuarios, y definir los privilegios para modificar o crear nuevos Secrets.
¿Cómo proteges los contenedores en Kubernetes?
La seguridad de los contenedores en Kubernetes comienza con la selección de una imagen base confiable y minimalista. Se deben usar herramientas de análisis para detectar vulnerabilidades o errores de configuración en el contenedor antes de implementarlo en producción. Luego, las herramientas de monitoreo en tiempo de ejecución pueden mantener la visibilidad de los contenedores activos mediante registros de auditoría y otros métodos.
¿Cómo mantienes la seguridad en Kubernetes?
Kubernetes incluye funciones de seguridad, pero deben configurarse correctamente para que sean eficaces. La seguridad comienza en la fase de diseño, al elegir una arquitectura segura y una imagen base de contenedor. Luego, las herramientas de análisis pueden ayudar a supervisar el proceso de compilación y detectar vulnerabilidades o configuraciones incorrectas antes de que el contenedor pase a producción. Por último, las herramientas de monitoreo en tiempo de ejecución ayudan a mantener la visibilidad de los contenedores en ejecución.