En esta segunda parte de la serie sobre seguridad en Kubernetes, veremos cómo proteger la primera capa, la nube, para asegurar nuestras aplicaciones. En la primera entrada, aprendimos que necesitamos un modelo de seguridad en capas, también conocido como 4Cs por sus cuatro capas: cloud, clúster, contenedores y código. Ahora nos enfocaremos en la capa de la nube explicando detalladamente su protección.
La capa de la nube, dependiendo del contexto en que estemos, puede llamarse también capa de infraestructura. El contexto, y por lo tanto el nombre, cambia según dónde nuestro cluster corre, las formas más comunes son:
a) De forma manejada por algún servicio en la nube pública como EKS, AKS, o GKE
b) Sobre maquinas virtuales de servicios de nube
c) Sobre servidores on-premise administrados directamente por nosotros
En los dos primeros casos sería más común referirse a la primera capa como nube. En el tercer caso, sería más común que se llamara capa de infraestructura. En cada caso pueden haber ciertas recomendaciones que no apliquen o varíen.
Si usas un proveedor de servicios en la nube pública (AWS, GCP, Azure, etc.) debes tener en cuenta que estos servicios cuentan con un modelo de seguridad compartido. Lo cual significa que, en general, los proveedores se encargan de proteger su infraestructura física y tú te encargas de proteger lo que ocurra dentro de su infraestructura.
Te recomiendo consultar el apartado de seguridad en la documentación del proveedor que uses para tener mayor claridad sobre tus responsabilidades.
Puedes encontrar acá los apartados de seguridad de:
Si, por el contrario, manejas todos tus servidores por tu cuenta de forma on-premise, la protección de la infraestructura tanto física (control de accesos, redes internas, mantenimientos, backups, etc.), como de las aplicaciones de tu clúster, será tu responsabilidad.
En este blog no veremos cómo proteger la infraestructura física porque se nos haría muy largo; pero, si te interesa aprender sobre esto, un buen lugar para empezar es nuesto Curso Básico de Seguridad Informática para Empresas.
Aunque el principal objetivo de este curso no es protección de servidores, te enseñaré sobre diferentes tipos de amenazas y los controles más comunes para protegerte de estas, los cuales facilmente se puden aplicar a tus servidores on-premise.
Existen varias prácticas recomendadas que puedes seguir para asegurarte de que tu capa de nube esté protegida y tu clúster esté a salvo de posibles amenazas. Estas son las principales:
Uno de los pasos más importantes que puedes tomar para proteger tu capa de nube es asegurarte de que solo usuarios autorizados tengan acceso a tu clúster. Esto significa implementar mecanismos de autenticación fuertes, como la autenticación en dos pasos, y establecer controles de acceso estrictos que determinen quién puede acceder a qué recursos dentro de tu clúster.
Este tipo de controles se engloban en algo conocido como IAM (Identity and Access Management) y aquí te dejo varios recursos de Platzi para aprender cómo configurar esto en los principales provedores de servicios en la nube.
Otra práctica recomendada es encriptar cualquier dato sensible almacenado en tu capa de nube. Esto puede ayudar a proteger contra posibles violaciones y asegurarte de que tus datos no sean accesibles a partes no autorizadas.
Cuando sea posible, es bueno encriptar los discos duros de las maquinas donde corren los nodos, en especial donde se encuentre el etcd (banco de datos de Kubernetes).
Si usas un servicio de Kubernetes manejado, usualmente el provedor se encargará de este paso por ti. Si, de lo contrario, manejas tu clúster sobre instancias de computo, puedes consultar la siguiente sección.
Para aprender cómo puedes aplicar cifrado sobre las instancias de computo de los principales provedores de servicios en la nube puedes consultar:
- Proteger los datos en Amazon EC2
- En GCP, Compute Engine encripta de forma predeterminada todos los datos. Pero, si quieres administrar tus llaves de cifrado, puedes consultar el siguiente articulo de la documentación oficial Encripta discos con claves de encriptación proporcionadas por el cliente.
- En Azure, puedes consultar Escenarios de Azure Disk Encryption en máquinas virtuales Linux.
Mantener tu sistema actualizado con los últimas parches y actualizaciones es crucial para la seguridad. Asegúrate de revisar regularmente y aplicar las actualizaciones de los sistemas operativos que usen tus instancias de computo; así como de las aplicaciones que corren en tus servidores.
Este paso puede variar dependiendo del sistema operativo que utilices, pero los principales son:
sudo apt update && sudo apt upgrade
para Ubuntu o Debian.sudo yum update
para distribuciones de Red Hat como CentOS.sudo zypper update && sudo zypper up
para OpenSUSE.sudo pacman -Syu
para Arch Linux.
Monitorizar y auditar regularmente tu sistema te puede ayudar a identificar posibles problemas de seguridad y tomar medidas para abordarlos antes de que se conviertan en un problema. Considera implementar herramientas y procesos para monitorizar y auditar la salud de tus instancias de computo.
Puedes consultar la documentación de cada provedor y aprender cómo monitorizar cada uno de tus servicios
Finalmente, asegúrate de utilizar redes y conexiones seguras cuando accedas a tu capa de nube y clúster de Kubernetes. Esto puede ayudar a prevenir que posibles atacantes accedan a tu sistema a través de conexiones inseguras.
Para realizar esto, es recomendado restringir el acceso de red a tus instancias de computo de la siguiente forma:
Se debe restringir todo acceso público desde Internet al plano de control de Kubernetes.
Esto es restringir, mediante el uso de listas de control de acceso o firewall, el acceso a los nodos del plano de control y, en especial, a los puertos donde corren servicios sensibles de Kubernetes como lo son:
Puerto | Protocolo | Servicio |
---|---|---|
6443 | TCP | Kubernetes API Server |
2379-2380 | TCP | etcd server client API |
10250 | TCP | Kubelet API |
10251 | TCP | kube-scheduler |
10252 | TCP | kube-controller-manager |
10255 | TCP | Read-Only Kubelet API |
Similar al punto anterior, se deben restringir las conexiones que puedan recibir los nodos trabajadores mediante el uso de listas de control de acceso o firewall.
Lo ideal es que solo puedan recibir conexiones desde los nodos del plano de control y limitar lo máximo posible el acceso público a internet. Los principales puertos donde corren servicios en estos nodos son:
Puerto | Protocolo | Servicio |
---|---|---|
10250 | TCP | Kubelet API |
10255 | TCP | Read-Only Kubelet API |
30000-32767 | TCP | NodePort Services |
Se debe limitar en lo posible el acceso SSH a los nodos del clúster para reducir el riesgo de un acceso no autorizado al host de los nodos. Si se requiere una conexión directa, se debe usar kubectl exec
.
Puedes aprender a configurar estas restricciones de red en AWS configurando grupos de seguridad en tus instancias EC2 con nuestro Curso Práctico de AWS: Cómputo con EC2. También puedes configurar más opciones de red configurando una VPC con nuestro Curso de Introducción a AWS: Redes, Gobernanza y Machine Learning.
Si usas GCP, puedes aprender a configurar tu VPC y redes con nuestro Curso de Máquinas Virtuales con Google Cloud Platform.
Para Azure, puedes consultar la Clase de Seguridad de nuestro Curso de Introducción a la Nube con Azure o la documentación oficial sobre Azure Firewall.
Siguiendo estas prácticas recomendadas, puedes ayudar a asegurar que tu capa de nube esté protegida y que tu clúster de Kubernetes esté a salvo de posibles amenazas.
Cómo proteger tus aplicaciones en Kubernetes fue la primera entrada de esta serie de blogs sobre seguridad en Kubernetes. Allí exploramos en un alto nivel las 4Cs de la seguridad de K8s y ahora aprendimos con mayor detalle cómo proteger la primera capa del modelo de seguridad. Espera en siguientes entradas recomendaciones sobre cómo proteger las capas de Clúster, Contenedores y Código.
¡Ya puedes ver las siguientes entradas de esta serie!
De igual forma, te vuelvo a invitar a que conozcas nuestro curso de Kubernetes. Donde aprenderás los principales aspectos sobre Kubernetes. Al igual que siempre es recomendado revisar la documentación oficial de K8s sobre seguridad para aprender todos los conceptos a mayor profundidad.
Por último, me gustaría oír de ti. Puedes dejar en los comentarios ¿qué otras prácticas has implementado para proteger la capa de nube de Kubernetes? O si hay algún tema especifico del cual te gustaría que hablara en las siguientes entradas de esta serie de blogs, igual eres bienvenido a dejarlo en los comentarios.