Seguridad de Kubernetes
La seguridad de Kubernetes es un sistema de código abierto para automatizar la implementación, el escalado y la administración de aplicaciones en contenedores. Es más fácil administrar, asegurar y descubrir contenedores cuando se agrupan en unidades lógicas, y Kubernetes es el sistema de administración de contenedores líder en el mercado actual. Asegurar sus sistemas con Kubernetes requiere comprender cómo funciona el sistema y cuándo y cómo las vulnerabilidades de diferentes tipos pueden ingresar a su sistema al crear, implementar o ejecutar aplicaciones usando Kubernetes.
En términos generales, la seguridad de Kubernetes aborda la seguridad nativa en la nube, en sus clústeres de aplicaciones, en contenedores y en su código. Implica muchos sistemas y procesos entrelazados y superpuestos, como seguir importantes prácticas recomendadas de seguridad física, asegurar el cluster y seguridad de aplicaciones, administrar la seguridad de microservicios, seguir estándares inteligentes de diseño de contenedores y administrar el control de acceso. Esto también implica escanear en busca de vulnerabilidades en tiempo de compilación, cifrado de código, apretones de manos TLS donde sea necesario, asegurar los puertos no utilizados y escanear regularmente todo el sistema en busca de vulnerabilidades que pueden surgir en un entorno de producción.
Riesgos y Desafíos
Las aplicaciones se ejecutan a través de ciclos de compilación, implementación y tiempo de ejecución, y Kubernetes proporciona ventajas intrínsecas de seguridad en cada etapa del ciclo de vida de las aplicaciones. Sin embargo, aún puede plantear muchos desafíos.
Mayor superficie de ataque
Es probable que su sistema utilice o cree innumerables contenedores, y los contenedores están en todas partes. Si bien el uso de contenedores le brinda la capacidad de aprovechar arquitecturas de microservicios y operar con mayor velocidad y mayor portabilidad, su uso también puede crear puntos ciegos de seguridad que exponen su sistema a vulnerabilidades.
Mantener la visibilidad de las operaciones y la seguridad del sistema a medida que implementa más y más contenedores se vuelve cada vez más difícil. Además, también están las tareas de investigar problemas individuales, responderlos o reconfigurar contenedores mal configurados.
Registros e imágenes mal utilizados
¿Qué tan seguras son las imágenes que construyes y los registros en los que las almacenas? ¿Los escanea regularmente? Si no lo hace, puede ser perjudicial para la seguridad de sus aplicaciones y sistemas en todas sus redes, no solo en el entorno de Kubernetes.
Efectos de red
Dado que los contenedores se comunican con otros contenedores y otros puntos finales de la red, una violación en seguridad de contenedores puede extenderse por toda su red, dependiendo del nivel de acceso al sistema que tenga el contenedor violado con el resto de la red.
Abordar con éxito estos desafíos y otros que pueda enfrentar requerirá que integre la seguridad en sus ciclos de compilación, implementación y ejecución. A un nivel muy alto, sus imágenes deben estar libres de vulnerabilidades peligrosas, las implementaciones deben seguir las mejores prácticas de seguridad y sus cargas de trabajo de contenedores deben estar a salvo de las amenazas en tiempo de ejecución.
Mejores Prácticas de Contenedores
En las secciones siguientes, describimos con mayor detalle algunas de las mejores prácticas de Kubernetes que debe seguir para las tres etapas del ciclo de vida del contenedor.
Fase de construcción
En primer lugar, debe asegurar sus imágenes de contenedor. Esto implica primero crear imágenes seguras y luego escanear en busca de vulnerabilidades.
Las mejores prácticas son utilizar imágenes básicas mínimas y evitar el uso de imágenes con shells o administradores de paquetes del sistema operativo; estos pueden traer vulnerabilidades desconocidas a su sistema. Además, evite agregar componentes innecesarios y utilice únicamente imágenes actualizadas. Debe asegurarse de que todas las herramientas, aplicaciones y todas las imágenes estén actualizadas.
El escaneo regular es una parte importante de la seguridad de Kubernetes, así que asegúrese de usar un escáner que pueda identificar vulnerabilidades de imagen, así como vulnerabilidades de paquetes de SO y tiempo de ejecución de terceros. Estos escaneos y comprobaciones de seguridad deben incorporarse y automatizarse como parte de su canalización de integración continua/implementación continua (CI/CD). Por ejemplo, el controlador de validación de admisión en Kubernetes le permite rechazar la creación de la implementación si las imágenes no se escanean antes de la implementación o si las imágenes tienen más de 90 días de antigüedad.
Tenga en cuenta que la mejor política de seguridad es la defensa en profundidad. Por lo tanto, una vulnerabilidad en un área, como en un contenedor, un cluster, la nube o en su código, puede abordarse antes de que tenga impacto en la producción y antes de que pueda llegar a otras partes de su red.
Fase de implementación
Debe configurar de forma segura su infraestructura de Kubernetes antes de implementar las cargas de trabajo. Necesita saber qué está implementando y cómo, y a partir de ahí, puede identificar y responder a posibles amenazas o violaciones de seguridad.
Saber exactamente lo que está implementando requiere una comprensión de:
- Componentes
- Vulnerabilidades conocidas
- Pods que se implementarán
- Todos los clústeres, espacios de nombres y nodos involucrados
- Si se ejecutará con privilegios
- Con qué implementaciones se comunicará
También necesita saber a qué puede acceder y si la implementación ya cumple o infrinja cualquier requerimiento de seguridad o política.
A partir de ahí, puede implementar recomendaciones de fase de implementación. Estos incluyen el uso de espacios de nombres para aislar cargas de trabajo confidenciales para contener posibles ataques, limitar el impacto de cualquier error o acción maliciosa realizada por usuarios autorizados y controlar el tráfico entre pods y clústeres mediante segmentación de red para evitar el movimiento lateral no autorizado a través de contenedores.
Como regla general, siempre debe evaluar los privilegios de acceso de cualquier persona y cualquier cosa en su sistema, incluidos los permisos de acceso de sus contenedores. Sólo otorgue a sus contenedores los privilegios y capacidades que necesita para realizar sus funciones requeridas.
Además, nunca implemente código de una fuente desconocida, lo que en Kubernetes significa usar únicamente imágenes de registros conocidos o aquellos con acceso autorizado. Los recursos relevantes del negocio, como desarrolladores y programadores, deben saber cómo etiquetar las implementaciones con el nombre o alias correctos para que los equipos relevantes puedan abordar los problemas de seguridad de los que son responsables en caso de que surjan.
Fase de tiempo de ejecución
Puede administrar los desafíos de seguridad de Kubernetes obteniendo visibilidad en el entorno de ejecución y detectando y luego respondiendo a las amenazas en tiempo de ejecución a medida que surgen.
Esto implica monitorear la actividad del proceso, las comunicaciones de red entre diferentes contenedores y servicios en contenedores, y las comunicaciones entre contenedores, servicios en contenedores y terceros, clientes o servidores externos.
Al comparar la actividad observada con la esperada, puede identificar y luego detener la actividad sospechosa. Al extender el análisis de vulnerabilidades a implementaciones en ejecución, podrá detectar vulnerabilidades en tiempo de ejecución que no aparecían antes. Muchos controles integrados de Kubernetes, como los sistemas de archivos raíz de solo lectura, pueden prevenir ataques que requieren instalación de software, y debe monitorear el tráfico de red para limitar las comunicaciones innecesarias o no seguras.
Funciones incorporadas
Si bien la seguridad de Kubernetes durante las fases de compilación, implementación y tiempo de ejecución es importante, los problemas de seguridad deben abordarse de manera integral. Esto significa que debe comenzar con la seguridad de la infraestructura y luego escalar su camino hacia arriba o hacia abajo en su red tomando primero una visión más amplia, luego una vista más granular, de clúster/contenedor/código de sus sistemas.
Actualice siempre su Kubernetes a la última versión si es posible, y asegure etcd, que es un almacén de valores clave utilizado por Kubernetes para el acceso a los datos. Asegúrese de que todas las conexiones de los clientes se sirvan únicamente a través de TLS e incrustar activamente la seguridad lo antes posible en el ciclo de vida del contenedor. Además, familiarícese con los controles nativos de Kubernetes.
Los siguientes son ejemplos de características integradas de Kubernetes que pueden optimizar la orquestación de contenedores:
- Agente de políticas abiertas (OPA): OPA unifica la aplicación de políticas mediante un lenguaje declarativo de alto nivel mediante el cual puede especificar la política como código. Hacer esto elimina la carga de la toma de decisiones de políticas de su software. Utilice OPA para aplicar las políticas personalizadas que desee en los objetos de Kubernetes sin tener que volver a compilar o reconfigurar su servidor API de Kubernetes.
- Política de seguridad del pod (PSP): Utilice PSP para definir las condiciones con las que deben ejecutarse pods específicos para que sean aceptados en el sistema. La configuración de seguridad de PSP, aplicada mediante contextos de seguridad, también le permite definir privilegios y controles de acceso para pods específicos.
- Control de acceso basado en roles (RBAC): El RBAC administra las decisiones de autorización. Esto permite a los administradores configurar dinámicamente las políticas de acceso mediante la asignación de roles y permisos para usuarios o conjuntos de usuarios específicos.
- Política de red: Políticas de comunicación que rigen cómo los grupos de pods pueden comunicarse entre sí y con otros endpoints de red.
Puede llevar tiempo aprender cuándo, dónde y cómo usar estas y otras herramientas integradas para aprovechar Kubernetes de la manera correcta. Lo mismo se aplica a obtener una defensa en profundidad correcta, identificar y abordar las vulnerabilidades de seguridad cuando aparecen, asegurar sus clústeres, garantizar la seguridad de los pod y reducir su superficie de ataque, y administrar el tráfico de red. Sin embargo, garantizar la seguridad de Kubernetes es fundamental si desea disfrutar de la escalabilidad, replicabilidad, administración simplificada y rápida implementación de contenedores para los que Kubernetes fue diseñado.
Conclusión
Si está realizando sus incursiones iniciales en Kubernetes, un especialista externo de Kubernetes puede ayudarlo a ponerse en marcha rápidamente con la orquestación de clústeres en función de los tipos de aplicaciones que su organización crea y los tipos de implementaciones que necesita.
Más información
Descubre cómo Segmentación de confianza cero protege las implementaciones de contenedores, incluidas las plataformas Kubernetes y RedHat OpenShift.