Cuenta Iniciar sesión
Kubernetes illustration
Secciones

Cómo abordar la seguridad de Kubernetes

Copiar URL

La seguridad de Kubernetes implica tres tareas: resolver los puntos vulnerables conocidos durante la etapa de diseño, volver a establecer las configuraciones con errores durante las etapas de diseño e implementación, y hacer frente a las amenazas durante la ejecución. Esto surge de las respuestas recopiladas para el último informe State of Kubernetes and Container Security, en el cual se determinó que el 24 % de los problemas graves de seguridad de los contenedores eran puntos vulnerables que podían resolverse; casi el 70 % eran configuraciones con errores y el 27 % eran incidentes durante el tiempo de ejecución.

Los contenedores están en todas partes

Kubernetes es una plataforma open sourcepara la organización de los contenedores que permite gestionar cientos (y hasta miles) de contenedores de Linux® agrupados en clústeres. Se basa en gran medida en las interfaces de programación de aplicaciones (API) que conectan los microservicios organizados en contenedores. Esta naturaleza distribuida dificulta el poder detectar rápidamente cuáles son los contenedores que tienen puntos vulnerables, que están mal configurados o que suponen un mayor riesgo para la empresa.

Para eso, necesitamos una solución que permita visualizar todas las implementaciones de contenedores e identificar los eventos graves en el sistema de cada uno de ellos.

Mal uso de las imágenes y los registros

Las imágenes de contenedores (también conocidas como "de base") son plantillas fijas que permiten crear contenedores nuevos. Aquellas recién copiadas pueden modificarse para diferentes fines.

La solución consiste en establecer políticas que ayuden a determinar cómo se diseñarán las imágenes y cómo se almacenarán en los registros. Las imágenes de base deben probarse, aprobarse y analizarse con frecuencia y, para poner en marcha contenedores en un entorno de Kubernetes, solo deben usarse aquellas que provengan de registros permitidos.

Comunicación sin restricciones entre los contenedores

Para que los contenedores y los pods funcionen correctamente, no solo deben poder comunicarse entre sí en las implementaciones, sino también con otros extremos internos y externos. Ante una falla de seguridad de un contenedor, la capacidad de los piratas informáticos para desplazarse por el entorno dependerá directamente del grado de comunicación que tenga ese contenedor con otros y con los pods. En un entorno de contenedores en expansión, segmentar las redes puede ser demasiado difícil debido a la complejidad que implica configurar esas políticas de forma manual.

La solución consiste en hacer un seguimiento del tráfico que existe entre los espacios de nombres, las implementaciones y los pods, y en determinar qué tanto de ese intercambio está permitido.

Políticas de red predeterminadas para los contenedores

De forma predeterminada, las implementaciones de Kubernetes no aplican las políticas de red a los pods, que son las unidades más pequeñas de una aplicación de esta plataforma. Este tipo de políticas funcionan como reglas de firewall y controlan la comunicación entre los pods, así que sin ellas, los pods pueden comunicarse entre sí sin restricciones. 

La solución implica definir políticas de red para que los pods se comuniquen únicamente con ciertos recursos, y organizar los secretos en volúmenes de solo lectura dentro de los contenedores, en lugar de trasladarlos como variables del entorno.

Cumplimiento normativo de los contenedores y de Kubernetes

Tal como ocurre con los demás entornos de TI, aquellos desarrollados en la nube y basados en Kubernetes no solo deben regirse por las prácticas recomendadas de seguridad, los estándares del sector, los índices de referencia y las políticas internas de la empresa, sino también demostrar que se adhieren a ellos. En ocasiones, esto significa adaptar las estrategias para que los entornos de Kubernetes cumplan con los controles que se diseñaron originalmente para las arquitecturas de aplicaciones tradicionales.

La solución consiste en supervisar si se cumple con lo establecido y en automatizar las auditorías.

Tiempo de ejecución

Kubernetes es una infraestructura que no se puede modificar. Por eso no es posible aplicar parches durante la ejecución de los contenedores; en cambio, deberá destruir aquellos que estén en funcionamiento y volver a crearlos. Los contenedores en riesgo pueden ejecutar procesos maliciosos, como la criptominería y el análisis de puertos.

La solución consiste en destruir los contenedores comprometidos o en ejecución, volver a diseñar una imagen sin riesgos e iniciarlos nuevamente.

La seguridad de Kubernetes comienza en la fase de diseño con la creación de imágenes de base sólidas y la adopción de procesos que ayuden a detectar los puntos vulnerables.

  • Use imágenes de base mínimas: evite las imágenes con shells o administradores de paquetes de los sistemas operativos, que podrían contener puntos vulnerables desconocidos, o elimine los administradores de paquetes más adelante.

  • No agregue elementos innecesarios: por lo general, las herramientas comunes pueden convertirse en riesgos para la seguridad cuando se incluyen en las imágenes.

  • Use solamente imágenes actualizadas: actualice las versiones de los elementos.

  • Use una herramienta para analizar las imágenes: identifique los puntos vulnerables en cada capa de las imágenes.

  • Integre la seguridad a los canales de CI/CD: automatice un aspecto repetible de la seguridad que interrumpa las compilaciones de la integración continua y genere alertas en caso de que haya puntos vulnerables graves que puedan corregirse.

  • Etiquete los puntos vulnerables permanentes: agregue a una lista de elementos permitidos todos los puntos vulnerables conocidos que no puedan corregirse, que no sean graves o que no necesiten solucionarse de inmediato. 

  • Implemente un sistema de protección integral: estandarice la verificación de políticas y los flujos de trabajo de resolución de problemas para detectar y actualizar las imágenes que contengan puntos vulnerables.

Configure la seguridad de la infraestructura de Kubernetes antes de que se implementen las cargas de trabajo. Para hacerlo, debe conocer en detalle el proceso: qué se implementará (imágenes, elementos, pods) y dónde (clústeres, espacios de nombres, nodos), de qué manera se realizará (privilegios, políticas de comunicación, seguridad aplicada), a qué tendrá acceso (secretos, volúmenes) y con qué normas deberá cumplir.

  • Use espacios de nombres: si separa las cargas de trabajo en espacios de nombres, podrá evitar los ataques y limitar el impacto de los errores o de las acciones dañinas de los usuarios autorizados.

  • Aplique políticas de red: Kubernetes permite que todos los pods se comuniquen entre sí de manera predeterminada; sin embargo, las políticas de segmentación de redes pueden anular ese ajuste.

  • Restrinja el acceso a los secretos: cargue únicamente los secretos que requieran las implementaciones.

  • Evalúe los privilegios de los contenedores: proporcione únicamente las funciones, los roles y los privilegios que permitan que el contenedor lleve a cabo sus tareas. 

  • Evalúe la procedencia de las imágenes: utilice aquellas que provengan de registros conocidos.

  • Analice las implementaciones: aplique políticas en función de los resultados del análisis. 

  • Use etiquetas y anotaciones: coloque etiquetas o anotaciones en las implementaciones con la información de contacto del equipo responsable de una aplicación en contenedores, para agilizar el proceso de evaluación.

  • Habilite el control de acceso basado en funciones (RBAC): el RBAC gestiona las autorizaciones de las cuentas de servicios y de los usuarios para acceder al servidor de la API de Kubernetes de un clúster.

Si bien los enfoques preventivos de seguridad durante el diseño y la implementación pueden reducir la probabilidad de que ocurran incidentes durante la ejecución, se necesita una supervisión permanente de los procesos y las comunicaciones de la red para identificar las amenazas en esta etapa y responder a ellas.

  • Use la información contextual: a fin de detectar instancias sospechosas, utilice la información de las etapas de diseño e implementación en Kubernetes para evaluar las diferencias entre las actividades observadas y las esperadas durante el tiempo de ejecución.

  • Analice las implementaciones en ejecución: supervise las implementaciones en ejecución para detectar los mismos puntos vulnerables que se encontraron recientemente en las imágenes de contenedores.

  • Emplee controles integrados: configure el contexto de seguridad de los pods para limitar sus funciones.

  • Supervise el tráfico de red: a fin de identificar comunicaciones inesperadas, observe el tráfico de red activo y compárelo con el que permiten las políticas de red de Kubernetes.

  • Emplee listas de elementos permitidos: identifique los procesos que tienen lugar durante la ejecución habitual de la aplicación para crear una lista de elementos permitidos.

  • Compare la actividad del tiempo de ejecución en pods implementados de manera similar: deberá investigar aquellas réplicas que muestren variaciones significativas.

  • Ajuste la ejecución de los pods sospechosos según la demanda: use los controles de Kubernetes para evitar los incidentes; para ello, ordénele automáticamente a la plataforma que ajuste la ejecución de los pods sospechosos según sea necesario, o que destruya y reinicie las instancias.

La seguridad no implica solamente las imágenes y las cargas de trabajo, sino también toda la infraestructura de Kubernetes: los clústeres, los nodos, el motor de los contenedores e incluso las nubes.

  • Actualice Kubernetes: actualice su distribución de Kubernetes para aplicar parches de seguridad e instalar nuevas herramientas de protección.

  • Configure el servidor de la API de Kubernetes: desactive el acceso anónimo o sin autenticación y use el cifrado TLS para las conexiones entre los kubelets y el servidor de la API.

  • Proteja el etcd: etcd es un tipo de almacenamiento de clave-valor que utiliza Kubernetes para acceder a los datos. Proteja el kubelet. Para deshabilitar el acceso anónimo al kubelet, utilice el indicador --anonymous-auth=false para iniciarlo y el controlador de admisión NodeRestriction para limitar los recursos que este puede consultar.

Seguridad de la nube

Sin importar el tipo de nube (pública, privada, híbrida o multicloud) en que se alojen los contenedores o se ejecute Kubernetes, quien la utilice (y no quien la proporcione) será permanentemente responsable de proteger la carga de trabajo de Kubernetes, que incluye:

  • Imágenes de contenedores: fuentes, contenido y puntos vulnerables

  • Implementaciones: servicios de red, almacenamiento y privilegios

  • Gestión de la configuración: funciones, grupos, enlaces de funciones para establecer los permisos de acceso y las cuentas de servicios

  • Aplicaciones: gestión de secretos, etiquetas y anotaciones

  • Segmentación de la red: políticas de red en el clúster de Kubernetes

  • Tiempo de ejecución: detección de amenazas y respuesta ante incidentes

El uso de los contenedores y de Kubernetes no modifica sus objetivos en materia de seguridad: reducir los puntos vulnerables.

  • Integre la seguridad al ciclo de vida de los contenedores desde el inicio: la seguridad debe permitir que los equipos de DevOps y los desarrolladores diseñen e implementen con tranquilidad las aplicaciones que estén listas para la producción.

  • Use los controles de seguridad de Kubernetes: de esta forma, evitará que los mecanismos de seguridad entren en conflicto con la herramienta encargada de organizar los sistemas. 

  • Permita que Kubernetes dé prioridad a la corrección de errores.

Artículos relacionados

ARTÍCULO

Diferencias entre los contenedores y las máquinas virtuales

Las máquinas virtuales (VM) y los contenedores de Linux son entornos informáticos empaquetados que combinan varios elementos de TI y los aíslan del resto del sistema.

ARTÍCULO

¿Qué es la organización de los contenedores?

La organización en contenedores automatiza la implementación, la gestión, la escalabilidad y la conexión en red de los contenedores.

ARTÍCULO

¿Qué es un contenedor de Linux?

Un contenedor de Linux es un conjunto de procesos separados del resto del sistema, los cuales pueden ejecutarse desde una imagen diferente que proporciona todos los archivos necesarios para que funcionen.

Más información sobre los contenedores

Productos

Red Hat OpenShift

Plataforma de contenedores de Kubernetes empresarial con operaciones automatizadas integrales para gestionar implementaciones de nube híbrida, multicloud y edge computing.

Contenido adicional

Lista de verificación

Desarrollo de aplicaciones en contenedores: cinco temas para analizar con su equipo

Ebook

Los tres aspectos más importantes que debe tener en cuenta a la hora de seleccionar una plataforma de Kubernetes

Capacitación

Curso de capacitación gratuito

Running Containers with Red Hat Technical Overview

Curso de capacitación gratuito

Containers, Kubernetes and Red Hat OpenShift Technical Overview

Curso de capacitación gratuito

Developing Cloud-Native Applications with Microservices Architectures

Illustration - mail

Obtenga más contenido como este

Suscríbase a nuestro boletín informativo: Red Hat Shares.