Puntos clave: La seguridad de Kubernetes está esencial para proteger los Pipelines DevOps integrando prácticas de seguridad a lo largo de todo el ciclo de vida del desarrollo. Las medidas clave de seguridad incluyen la protección de la infraestructura en la nube, los clústeres, los contenedores y el código de la aplicación.
- Implementar políticas de control de acceso basadas en roles (RBAC) y seguridad en pods.
- Escanea regularmente las imágenes de los contenedores en busca de vulnerabilidades y aplica la firma segura de imágenes.
La seguridad está entre las consideraciones principales en cualquier desarrollo de aplicaciones. Los estándares y prácticas de seguridad deben integrarse en todos los aspectos del desarrollo de software, desde la infraestructura y bases de datos hasta el mantenimiento y la gestión. Kubernetes soporta numerosas configuraciones de seguridad que pueden usarse para proteger clústeres y pods subyacentes. En este artículo, Ve cuáles son las mejores prácticas de seguridad de Kubernetes y cómo integrarlas en DevOps.
Seguridad nativa en la nube
Comencemos con un vistazo a la arquitectura de seguridad cloud-native al identificar la base de la seguridad de Kubernetes. Los 4C en la seguridad Cloud-native se refieren a las cuatro capas de seguridad:
- Cloud
- Cúmulos
- Contenedores
- Código
Cada capa se está construida sobre la capa anterior, proporcionando la máxima seguridad a un clúster Kubernetes:
- Nube. Esta capa representa la infraestructura física subyacente. te puede desplegar tu aplicación Kubernetes ya sea en hardware local o en un proveedor de nube externo, pero te debe seguir las mejores prácticas de seguridad relevantes para proteger toda la infraestructura.
- Clúster. Un clúster Kubernetes debe configurarse de forma segura con servicios de clúster como la API de Kubernetes y todas las aplicaciones dentro del clúster. Proteger las aplicaciones está aún más importante al tratar con microservicios, ya que una vulnerabilidad menor en un solo servicio puede afectar a todo el clúster.
- Contenedores. Construye tus contenedores usando la imagen más pequeña posible haciendo cumplir estrictos privilegios de usuario y eliminando todas las librerías y características innecesarias. Además, todos los contenedores deben escanearse regularmente para identificar vulnerabilidades.
- Código. El código de la aplicación puede ser la mayor superficie de ataque debido a errores de producción y al incumplimiento de las prácticas de seguridad durante el desarrollo, despliegue y gestión. Acciones simples como eliminar puertos no utilizados, cifrar transferencias de datos, pruebas regulares y escanear pueden mitigar muchos problemas de seguridad en el código de la aplicación.
Mejores prácticas de seguridad en Kubernetes
Veamos algunas buenas prácticas y recomendaciones para crear un entorno Kubernetes seguro.
Mejores prácticas de seguridad en la nube (Infraestructura)
- Acceso al panel de control. Solo un conjunto seleccionado de usuarios de una ubicación autorizada (IP en lista blanca) debería poder interactuar con el panel de control de Kubernetes. Todo acceso público debe estar deshabilitado.
- Acceso por nodos. El acceso a los nodos Kubernetes debe controlarse aceptando únicamente conexiones de servicios Kubernetes como NodePort o LoadBalancer restringidos a puertos y protocolos específicos. También se debe desalentar el acceso público a los nodos si es posible.
- API de proveedor de nube. Al interactuar con APIs de proveedores de nube a través de Kubernetes, asigna solo roles y políticas que limiten los privilegios a las funciones principales requeridas por Kubernetes, como la provisión de nuevos nodos.
- Kubernetes, etc. El acceso al almacén de datos debe limitarse al panel de control de Kubernetes y configurarse con TLS. Además, el almacén de datos debe estar cifrado para mayor seguridad.
Mejores prácticas de seguridad en clústeres
- Control de acceso basado en roles (RBAC). El acceso a todos los servicios debe limitarse a usuarios autorizados y roles con direcciones IP específicas.
- Políticas de seguridad de pods. Aplicar políticas estandarizadas de seguridad de pods en todo el entorno del clúster.
- Políticas de seguridad de red. Hacer cumplir las políticas de red para todos los recursos relacionados con la red para garantizar la seguridad de los datos.
- Cifrado de datos. Por defecto, Cifra todo el almacenamiento posible de datos desde etcd hasta volúmenes donde son datos sensibles.
Mejores prácticas de seguridad en contenedores
- Escaneo de vulnerabilidades. Escanea e identifica cualquier problema de seguridad relacionado con las imágenes del contenedor y soluciona antes de construir el contenedor.
- Firma de imágenes. Aplica la firma de imágenes para que el clúster solo pueda desplegar imágenes confiables firmadas.
- Control del usuario. Todos los usuarios privilegiados deben ser eliminados, y solo los usuarios con privilegios limitados deben incluirse en el contenedor (usuario vs root).
- Gestión de dependencias. Cualquier característica innecesaria o dependencia de software debe eliminarse de la imagen base.
Mejores prácticas de seguridad en el código
- Comunicación cifrada. Integra el cifrado en todo el tráfico de red para minimizar cualquier fuga de datos.
- Acceso a la aplicación. Exponer un número limitado de puntos finales y puertos de la aplicación y aplicar la autenticación para Reduce la superficie de ataque.
- Gestión de dependencias. Como con la imagen base del contenedor, elimina todos los frameworks y librerías de terceros innecesarios para Reduce el riesgo de vulnerabilidades de terceros que afecten a la aplicación.
- Metodología de desarrollo. Las mejores prácticas de seguridad deberían integrarse en el SDLC como parte del proceso DevSecOps, con escaneos regulares de vulnerabilidades y revisiones de código. Esto ayudaría a los desarrolladores a identificar y corregir cualquier problema de seguridad antes de que el producto están lanzado para producción.
Integración de la seguridad de Kubernetes en una pipeline DevOps
Son dos consideraciones principales que cualquier organización tendrá a la que se enfrentará al implementar la seguridad de Kubernetes:
- Autoconfiguración. Kubernetes consta de varias funciones para hacer cumplir las mejores prácticas de seguridad. Es importante destacar que ninguna de ellas son configurada por defecto, por lo que el administrador del clúster debe configura manualmente en el clúster.
- Falta de conocimiento. Requiere un conocimiento profundo del entorno Kubernetes y de la aplicación para configurar correctamente todas las características de seguridad, políticas y mejores prácticas.
La mejor opción para superar los problemas anteriores sería integrar las mejores prácticas de seguridad de Kubernetes en una pipeline DevOps. Permite a los desarrolladores ambos:
- Obtén una visión más amplia de toda la arquitectura de la aplicación
- Incorporar gradualmente prácticas de seguridad en un entorno Kubernetes con cambios incrementales
Podemos resumir la cadena de procesamiento DevOps de Kubernetes en tres secciones distintas para implementar mejor las prácticas de seguridad.
Vamos a echar un vistazo a cada uno.
Seguridad de aplicaciones y contenedores en la etapa de construcción de la imagen
Son varias mejores prácticas de seguridad de aplicaciones, tales como:
- Cifrado de datos
- Privilegios de usuario
- Gestión de tokens
- Evaluaciones de amenazas
- Revisiones de código
Estos deben integrarse orgánicamente en el desarrollo, desde la etapa inicial de desarrollo de la aplicación. Dado que la aplicación es el componente central del contenedor, una aplicación insegura puede exponer todo el clúster Kubernetes de producción a ataques, incluso si todos los demás aspectos son seguros. Al construir la imagen del contenedor, utiliza una imagen base actualizada sin vulnerabilidades de seguridad y elimina cualquier componente o característica innecesaria. Por ejemplo, supongamos que podemos utilizar una imagen base más pequeña como Alpine Linux en lugar de Ubuntu sin afectar la funcionalidad o el rendimiento de la aplicación. En ese caso, siempre deberíamos optar por la imagen base más pequeña. Ambas cosas:
- Reduce la superficie de ataque
- Crea un contenedor mucho más ligero
Luego deberíamos revisar cuidadosamente todas las dependencias de la aplicación para identificar vulnerabilidades usando una herramienta como synk y abordarlas. Otra preocupación están los puertos expuestos a través del contenedor. Solo deberíamos exponer los puertos necesarios y requerir autenticación para todas las solicitudes. Al final, podemos construir una imagen del contenedor que están lista para ser desplegada en Kubernetes. Otra buena práctica están realizar una prueba de penetración de la aplicación en un entorno de staging y firmar la imagen antes de enviarla al clúster de producción.
Despliegue de infraestructura de seguridad en Kubernetes
te debe tener un conocimiento profundo de Kubernetes para configura correctamente el clúster al desplegar un clúster Kubernetes. Como regla general, deberíamos intentar evitar usar configuraciones predeterminadas. También tendremos que:
- Definir permisos de usuario en el clúster
- Configurar una conectividad adecuada de red con los balanceadores de entrada y de carga para controlar el tráfico de red dentro del clúster
- Crea segmentación de red para proporcionar máxima seguridad física
Además, una red adecuada eliminará la necesidad de que los nodos estén expuestos directamente a internet. Una vez configuradas las políticas de pod, podemos garantizar que solo se creen pods que cumplan con la política requerida, y que no se creen pods fraudulentos. Las políticas de red te ayudan a controlar:
- El flujo de tráfico hacia los módulos
- Cómo puede un pod comunicarse con otros objetos de red, pods, etc.
Otra consideración importante están la seguridad en la nube. Aunque configuramos un clúster Kubernetes seguro, nuestras aplicaciones pueden estar expuestas a ataques si la infraestructura subyacente o el proveedor de la nube están inseguros. Por lo tanto, los administradores deben asegurar la infraestructura subyacente con controles de acceso adecuados y mecanismos de autenticación antes de desplegar la infraestructura para que solo los usuarios autorizados puedan modificarla. Por último, los administradores deben hacer cumplir los registros de imágenes para que solo las imágenes firmadas de registros autorizados de contenedores puedan desplegarse en el clúster. También están esencial configurar la monitorización continua y el escaneo de vulnerabilidades tanto para contenedores como para clústeres. Actuará como un sistema de alerta temprana para identificar y solucionar problemas. Una imagen de contenedor segura creada en la fase de compilación, combinada con un entorno de clúster seguro, proporciona una base sólida para la seguridad de Kubernetes.
Gestión de la seguridad en tiempo de ejecución
Esta última sección están sobre gestionar la seguridad en tiempo de ejecución. Los usuarios deben mantener las prácticas de seguridad incluso después del despliegue, o de lo contrario la aplicación y el clúster se volverán vulnerables con el tiempo. Además, te deberá llevar un control de todas las capas de seguridad desde el código hasta la capa de la nube en tiempo de ejecución. Los errores de producción de una aplicación que son detectados en producción también pueden introducir vulnerabilidades. Por tanto, debe existir un proceso adecuado para desplegar rápidamente una solución para el error. Además, los clústeres pueden convertirse rápidamente en estructuras complejas con múltiples aplicaciones y servicios ejecutándose en ellos. Por tanto, para mantener la seguridad de estos clústeres complejos, te necesitarán tener:
- Políticas avanzadas estrictas de control de red
- Soporte multi-inquilino
- Cortafuegos correctamente configurados
- Estándares de cifrado
En caso de vulnerabilidad, el(los) pod(s) afectado(s) deben aislarse y retirarse rápidamente mientras son crean nuevos pods de reemplazo con vulnerabilidades parcheadas. Por último, te necesitarás confiar en una solución adecuada de monitorización de salud y gestión de logs para identificar todos estos problemas. En definitiva, estas prácticas de seguridad ayudan a los usuarios a garantizar la seguridad de Kubernetes en tiempo de ejecución.
La seguridad de Kubernetes no tiene punto de detención
La seguridad de Kubernetes es un tema vasto. En resumen, el proceso de asegurar una aplicación comienza desde su inicio y continúa hasta el fin de vida de la aplicación. Proteger Kubernetes va de la mano con proteger la aplicación, ya que las vulnerabilidades de la aplicación pueden afectar al clúster. Como he explicado aquí, el mejor enfoque están incluir prácticas de seguridad en el proceso DevOps, considerando todos los aspectos del clúster y la aplicación Kubernetes para mantener la seguridad.
Lecturas relacionadas
Guía Kubernetes
- ¿Qué es Kubernetes (K8s)? Un tutorial básico de Kubernetes
- Mejores prácticas de Kubernetes para mejorar la eficiencia del clúster
- Mejores Prácticas: Cómo Diseñar Aplicaciones para Kubernetes
- Kubernetes Pods: Una introducción
- Kubernetes ReplicaSets: Una breve introducción
- Despliegues de Kubernetes completamente explicados
- Cómo utilizar y gestionar los DaemonSets de Kubernetes
- Cómo funcionan los servicios de Kubernetes
- Uso de Kubernetes Port, TargetPort y NodePort
- Creación y uso de ConfigMaps en Kubernetes
- Introducción a Kubernetes Secrets
- Fundamentos de las redes de Kubernetes
- Explicación de Kubernetes Ingress
- Introducción a las Listas de Helm de Kubernetes
- ¿Qué están el patrón de operador Kubernetes?
- Despliegue de PostgreSQL como un StatefulSet en Kubernetes
- Definición de Recursos Personalizados (CRDs) de Kubernetes Explicada
- 3 Patrones Kubernetes para aplicaciones nativas en la nube
- Explicación de los recursos de cómputo de Kubernetes
- Kubernetes Security for DevOps Pipelines
- Uso de spinnaker con Kubernetes para entrega continua
- Multi-Clústeres Kubernetes: Cómo y por qué utilizarlos
- Monitorización de Kubernetes: Una guía completa
- Kubernetes vs Docker: Una comparación rápida
- Kubernetes vs Docker Swarm: Comparando herramientas de orquestación de contenedores
- Kubernetes vs OpenShift: ¿Cuál es la diferencia?
- Certificaciones Kubernetes: Cómo y por qué Obtén la certificación
Estas publicaciones son mías y no representan necesariamente la posición, estrategias u opinión de BMC.