Parte: 10 — Seguridad en la nube y contenedores · Fuente: Martin & Hausenblas, "Hacking Kubernetes" (O'Reilly) y documentación oficial de Kubernetes ⏱️ Duración estimada: 120 min · Nivel: Intermedio
Comprender la arquitectura de Kubernetes desde la perspectiva de la seguridad: los componentes del plano de control (API server, etcd, scheduler, controller manager) y del plano de datos (kubelet, kube-proxy, container runtime), cómo se comunican y dónde están sus superficies de ataque. Es la base para el hardening y los ataques de la clase siguiente.
Al finalizar, el alumno podrá:
| # | Tema | Por qué importa |
|---|---|---|
| 1 | Plano de control vs plano de datos | Separa cerebro y músculo del clúster |
| 2 | API server como punto central | Todo pasa por él; es el objetivo principal |
| 3 | etcd | Almacena TODO el estado, incluidos Secrets |
| 4 | kubelet | Agente por nodo; su API es un vector clásico |
| 5 | Flujo authn → authz → admission | Cómo se autoriza cada acción |
| 6 | RBAC y ServiceAccounts | Identidad y permisos dentro del clúster |
| 7 | Namespaces y NetworkPolicy | Aislamiento lógico y de red |
# Crear un clúster de laboratorio con kind
kind create cluster --name lab
# Ver los componentes del plano de control
kubectl get pods -n kube-system
# Inspeccionar el flujo de autorización de una acción
kubectl auth can-i create pods --as system:serviceaccount:default:default
kind create cluster y examina los pods de kube-system (API server, etcd, scheduler, controller-manager, kube-proxy, CoreDNS).kubectl auth can-i --list con distintas identidades para ver qué puede hacer cada una.app y despliega un pod; observa el ServiceAccount por defecto y su token montado.kubectl apply: cliente → API server → authn → authz (RBAC) → admission → etcd → controladores → kubelet.Despliega un clúster de laboratorio y produce un mapa de su superficie de ataque: componentes, puertos que exponen, identidad que usan y qué protege cada control (RBAC, admission, NetworkPolicy).
Criterio de aceptación: el mapa lista API server, etcd, kubelet y scheduler con su puerto y riesgo; identifica el flujo authn→authz→admission; y señala al menos tres controles con el objeto Kubernetes que los implementa.
| Síntoma / mensaje | Causa y cómo arreglar |
|---|---|
| "Pensé que namespace = aislamiento fuerte" | Los namespaces separan nombres, no red ni kernel; añade NetworkPolicy y RBAC. |
| Token de ServiceAccount montado sin necesidad | Riesgo si el pod se compromete; usa automountServiceAccountToken: false. |
| etcd accesible sin TLS | Exposición total del estado; exige TLS mutuo y restringe el acceso. |
Forbidden al aplicar un manifiesto |
RBAC deniega la acción; ajusta el Role/Binding de la identidad. |
| kubelet API abierta en 10250 | Permite exec en pods; exige autenticación y autorización webhook. |
❓ ¿Por qué el API server es el objetivo principal de un atacante? Porque es la única puerta a todo el clúster: quien lo controla puede crear pods, leer Secrets y moverse a los nodos. Por eso su autenticación, RBAC y admission control son la defensa central.
❓ ¿Qué pasa si un atacante lee etcd directamente? Obtiene todo el estado, incluidos los Secrets (por defecto solo en base64, no cifrados). Por eso se recomienda cifrado en reposo de etcd y acceso restringido con TLS mutuo.
❓ ¿RBAC está activo por defecto? En clústeres modernos sí, pero muchas instalaciones dejan roles amplios o ServiceAccounts con permisos excesivos. RBAC solo protege si se configura con privilegio mínimo.
Clase 227 — Seguridad de contenedores: Docker