Descubre el poder de las CNAPP con nuestra guía
Descubre el poder de las CNAPP con nuestra guía
Los controladores de admisión actúan como "protectores" de los entornos Kubernetes (K8s), al mejorar la seguridad a través del análisis de las solicitudes enviadas al servidor de API. Al garantizar el cumplimiento riguroso de la normativa y la protección frente amenazas potenciales, estos controladores actúan como guardianes del clúster de Kubernetes. Se trata de una protección realmente necesaria, ya que no paran de aparecer nuevas amenazas para las aplicaciones contenedorizadas.
En este artículo, analizaremos en detalle los controladores de admisión de Kubernetes, hablaremos de su importancia, sus mecanismos internos, sus capacidades de escaneo de imágenes y su relevancia en la posición de seguridad de los clústeres de Kubernetes.
¿Qué es un controlador de admisión de Kubernetes?
Los controladores de admisión de Kubernetes monitorizan y regulan las solicitudes dirigidas al servidor de API de Kubernetes. Como se muestra a continuación, tras la autenticación y la autorización, pero antes del almacenamiento definitivo del objetivo, estos complementos actúan como intermediarios e interceptan las solicitudes:
Figura 1: Controladores de admisión (Fuente: Blog de Kubernetes)Los controladores de admisión pueden admitir, denegar o modificar solicitudes en función de ciertas directivas o condiciones predefinidas. Hay dos tipos principales de controladores de admisión:
- Controladores de admisión de validación: se encargan de validar los objetos de las solicitudes, examinar cada solicitud y verificar que cumple con las reglas y requisitos específicos definidos en el controlador.
- Controladores de admisión de mutación: son capaces de modificar los objetos de una solicitud y cambiar sus configuraciones antes de almacenarlos. Este tipo de controladores permiten la gestión automática y la introducción de parámetros del sistema de acuerdo con reglas y directivas predefinidas.
Capacidades fundamentales de los controladores de admisión
Los controladores de admisión son un componente esencial en la arquitectura de Kubernetes; y aunque operen de forma sigilosa en segundo plano, protegen los sistemas al garantizar el cumplimiento de las reglas y directivas de tu organización. Cuando se gestionan entornos de Kubernetes a gran escala, garantizar la seguridad y hacer cumplir las normas puede resultar complejo. Por suerte, los controladores de admisión de Kubernetes pueden ayudarte a conseguirlo del siguiente modo:
1. Mejoran la seguridad en los clústeres de Kubernetes
Los controladores pueden aplicar directivas que limiten las operaciones que pueden realizarse en un clúster, reduciendo así los posibles vectores de ataque. Por ejemplo, pueden evitar que los usuarios ejecuten contenedores privilegiados o utilicen la red y los sistemas de archivos del host, que son vectores comunes de ataques.
2. Garantizan el cumplimiento
Los controladores de admisión son esenciales para garantizar la observancia de directivas de toda la organización: pueden exigir el cumplimiento de convenciones de denominación, límites de recursos y directivas de red. También pueden impedir las implementaciones de pods que no se ajusten a estas normas, garantizando así la coherencia y el cumplimiento de las mejores prácticas.
3. Garantizan la gestión de recursos y la optimización de la asignación
La gestión de recursos es una parte crucial de la administración de los clústeres de Kubernetes. Los controladores de admisión pueden imponer cuotas y límites en la CPU, la memoria y el almacenamiento, con el fin de evitar una situación en la que los contenedores individuales utilicen más recursos del clúster de los que tienen asignados. Esta medida ayuda a mantener la estabilidad y fiabilidad del sistema y fomenta la utilización eficiente de los recursos, lo que también conduce a la optimización de costes.
4. Evitan posibles exploits de escape de contenedores de Kubernetes
Un exploit de escape de contenedores es un problema de seguridad importante para los clústeres de Kubernetes. Se produce cuando un ciberdelincuente logra salir de un contenedor y obtiene acceso no autorizado al sistema host. Los controladores de admisión pueden ayudar a evitar estos exploits al aplicar contextos de seguridad estrictos y la limitación de privilegios de contenedor.
Más información
Descubre las mejores prácticas para mantener tu entorno de Kubernetes a salvo de adversarios.
El funcionamiento de los controladores de admisión
Comprender cómo funcionan los controladores de admisión es vital para aprovechar todo su potencial. Veamos detenidamente cómo interactúan los controladores de admisión con otros componentes de Kubernetes:
Solicitudes y respuestas
Los controladores de admisión revisan solicitudes entrantes al servidor de API y analizan el objeto que la solicitud quiere almacenar en el sistema. Dependiendo de si el controlador es un controlador de validación o de mutación, validará la solicitud en función de un conjunto de reglas (validación) o modificará el objeto de la solicitud (mutación). A continuación, el controlador admite o deniega la solicitud y envía una respuesta al usuario. Si la solicitud es denegada, el usuario recibe un mensaje en el que se explican los motivos.
Cadena de varios controladores de admisión
Los controladores de admisión forman una cadena y se les llama por orden. El orden es fundamental, especialmente cuando, en el mismo clúster, se han configurado controladores de mutación y validación. Por lo general, se llama antes a los controladores de mutación que a los de validación, para que la solicitud pueda modificarse y satisfacer los requisitos antes de la validación. Si un controlador de la secuencia deniega la solicitud, se detiene toda la operación y se envía un error al usuario. Este mecanismo garantiza que se tienen en cuenta todas las reglas definidas antes de aceptar una solicitud.
Controladores de admisión integrados
Kubernetes cuenta con varios controladores de admisión integrados. Por ejemplo, el controlador NamespaceLifecycle rechaza toda las solicitudes enviadas a objetos dentro de un espacio de nombres que están en proceso de terminación. Como su nombre indica, el controlador ResourceQuota impone cuotas que limitan el uso de recursos por espacio de nombres, mientras que el controlador PodSecurityPolicy aplica restricciones de seguridad basadas en el contexto de seguridad solicitado. Para conocer en detalle los controladores de admisión integrados, descubre lo que se proporciona listo para usar, y cómo estos controladores automatizan las operaciones de Kubernetes.
Escaneo de imágenes con controladores de admisión
Las imágenes de contenedor son los componentes básicos de cualquier aplicación contenedorizada, pero estas imágenes pueden contener vulnerabilidades en el código de la aplicación o en sus bibliotecas de sistema subyacentes. Si estas vulnerabilidades no se abordan, pueden ser explotadas por ciberdelincuentes y derivar en accesos no autorizados, en filtraciones de datos o, incluso, en la toma de control del sistema. Por ello, escanear las imágenes de los contenedores en busca de vulnerabilidades conocidas no es solo una buena práctica, sino una necesidad.
Las herramientas de escaneo de imágenes como Clair, Anchore y la plataforma CrowdStrike Falcon® pueden integrarse con los controladores de admisión de Kubernetes para aplicar las directivas de escaneo de imágenes. Estas herramientas escanean las imágenes de contenedores y las comparan con bases de datos de vulnerabilidades para identificar vulnerabilidades conocidas. Los controladores de admisión pueden configurarse para integrarse con estas herramientas, con el objetivo de evitar la implementación de imágenes con vulnerabilidades o que no se hayan escaneado.
En otras palabras, el controlador de admisión rechaza la solicitud de implementación si la imagen no es segura e impide que el contenedor vulnerable se ejecute en un clúster. Este proceso automatizado y obligatorio garantiza que todas las imágenes de contenedores implementadas en el clúster sean seguras y cumplan con las directivas de seguridad.
Desarrollo de controladores personalizados de admisión
Aunque Kubernetes incluye varios controladores de admisión integrados, puede haber situaciones en las que debas aplicar reglas exclusivas de tu organización, como convenciones de denominación específicas, directivas de uso de recursos o directivas de seguridad de pods. Para esos casos, Kubernetes te permite crear tu propio controlador e integrarlo dinámicamente en los clústeres en ejecución.
Mejores prácticas para crear un controlador de admisión
Para crear un controlador de admisión, es necesario escribir un servidor webhook que responda a las solicitudes del servidor de API. Los servidores webhook responden específicamente a las solicitudes de admisión procedentes del servidor de API de Kubernetes, y pueden encargarse de la validación, la mutación o de ambas tareas. A la hora de desarrollar un controlador de admisión, sigue estas mejores prácticas:
1. Define reglas claras
Asegúrate de que las reglas aplicadas por el controlador son claras, están bien documentadas y se comparten con todos los miembros del equipo que interactúan con tu clúster de Kubernetes.
2. Gestiona los errores como es debido
El controlador de admisión debe gestionar los errores con fluidez y no bloquear las operaciones del servidor de API de Kubernetes. Además, debe proporcionar mensajes de error relevantes para que los usuarios entiendan por qué se ha rechazado su solicitud.
3. Protege el webhook
Los webhooks reciben información confidencial del servidor de API, por lo que deben protegerse con TLS. Con un webhook seguro, el servidor de API debe verificar el certificado del webhook antes de enviar cualquier solicitud.
4. Diseña teniendo en cuenta el rendimiento
Las llamadas de los webhooks añaden latencia a las solicitudes del servidor de API. Diseña el controlador de admisión para que ofrezca un alto rendimiento y minimice el tiempo que tarda el webhook en gestionar la solicitud.
5. Prueba exhaustivamente
Prueba el controlador de admisión con varios tipos de solicitudes para asegurarte de que su comportamiento es el esperado. El proceso de pruebas también debe incluir la comprobación de la compatibilidad con las versiones de Kubernetes que estés utilizando.
Monitorización y registro de los controladores de admisión
La monitorización y el registro de Kubernetes proporciona un nivel de visibilidad esencial para entender las decisiones tomadas por los controladores de admisión, detectar posibles problemas, mejorar la posición de seguridad del clúster y garantizar que las directivas se aplican de forma correcta y coherente.
Si bien es cierto que Kubernetes proporciona un registro integrado de las decisiones del controlador de admisión a través de su servidor de API, los logs pueden ser largos y difíciles de analizar. Por suerte, existen herramientas de gestión de logs que los recopilan, filtran y analizan para favorecer su comprensión. Así, herramientas como Fluentd o Logstash recopilan los logs de los clústeres de Kubernetes y los reenvían a una solución de gestión de logs centralizada, como Elasticsearch, o u n servicio de gestión de logs basado en la nube. A continuación, herramientas como Kibana analizan y presentan los datos del log.
En tus logs, busca objetos AdmissionReview que contengan información sobre las decisiones del controlador de admisión. Los tiempos de respuesta del servidor de API te darán una idea de su impacto en el rendimiento. También es recomendable buscar patrones de rechazo de solicitudes, por si un controlador de admisión no está bien configurado o por si algunos de tus usuarios no han entendido bien las reglas establecidas. Debes permanecer atento a cambios repentinos en el volumen o naturaleza de las solicitudes, ya que pueden ser indicativo de un incidente de seguridad.
Más información
Descubre la serie completa de la guía de registro de Kubernetes:
- Parte 1: Conceptos básicos
- Parte 2: Conceptos avanzados
- Parte 3: Centralización de logs de Kubernetes
- Parte 4: Centralización del registro de un clúster de Kubernetes
Saca el máximo partido a los controladores de admisión de Kubernetes
El poder de los controladores de admisión no solo reside en sus capacidades integradas de seguridad y cumplimiento, sino también en su potencial de personalización y ampliación. Animamos a todos los propietarios de clústeres de Kubernetes a profundizar en esta cuestión y a plantearse cómo aprovechar mejor los controladores de admisión en sus entornos.
El controlador de admisión de Kubernetes de CrowdStrike proporciona directivas predefinidas y facilita la gestión de los contenedores, ya que elimina la necesidad de que los usuarios escriban reglas Rego en bruto y evita que se implementen contenedores mal configurados.
Protege el ciclo de vida de los contenedores y gestiona la seguridad de Kubernetes con CrowdStrike
CrowdStrike Falcon® Cloud Security for Containers reduce la complejidad de la seguridad de Kubernetes mediante una interfaz fácil de usar, y ofrece el único controlador de admisión de Kubernetes capaz de identificar y eliminar contenedores vulnerables y evitar que se vuelvan a implementar.
Mejora tu posición de seguridad y la resiliencia de tus clústeres de Kubernetes con CrowdStrike Falcon® Cloud Security. CrowdStrike Falcon, una potente plataforma de seguridad, ofrece capacidades de detección de vulnerabilidades y amenazas, respuesta a incidentes, protección de identidades, observabilidad y seguridad de la nube. Combínala con controladores de admisión para reforzar la seguridad de tus entornos de Kubernetes.