Kubernetes se ha convertido en el estándar de facto para la orquestación de contenedores en entornos de producción, desde startups hasta grandes corporaciones. Sin embargo, su creciente complejidad y la adopción de microservicios distribuidos aumentan la superficie de ataque y los riesgos asociados a una configuración insegura. Los ataques pueden ir desde compromisos de pods individuales hasta la escalada de privilegios en el cluster completo.
Esta guía tiene como objetivo proporcionar un manual avanzado de hardening y detección, combinando teoría, buenas prácticas, ejemplos prácticos y comandos aplicables, pensado para sysadmins, DevSecOps y responsables de seguridad.
Objetivos principales de la guía:
Reducir la superficie de ataque de clusters Kubernetes y nodos asociados.
Implementar políticas de seguridad robustas, tanto a nivel de nodos como de workloads.
Establecer mecanismos de monitorización y detección temprana de incidentes.
Crear un flujo de trabajo reproducible y auditable que pueda adaptarse a entornos de producción críticos.
Alcance de la Parte 1:
Arquitectura segura del cluster.
Hardening de nodos y contenedores.
Configuración de políticas de seguridad básicas y avanzadas.
Buenas prácticas de gestión de imágenes y secretos.
1. Arquitectura Segura de Kubernetes
La arquitectura de Kubernetes es compleja y se divide principalmente en Control Plane y Worker Nodes. Una comprensión profunda de estos componentes es fundamental para implementar medidas de seguridad efectivas.
1.1 Control Plane
El control plane gestiona el estado del cluster y toma decisiones sobre scheduling, escalado y gestión de workloads. Incluye los siguientes componentes:
kube-apiserver: expone la API del cluster y es el punto de entrada para usuarios, controladores y nodos.
etcd: almacén clave-valor que guarda la configuración completa del cluster y secretos.
kube-scheduler: asigna pods a nodos disponibles basándose en recursos y políticas.
kube-controller-manager: ejecuta controladores que mantienen el estado deseado del cluster.
cloud-controller-manager (si aplica): integra Kubernetes con proveedores de nube.
Buenas prácticas de seguridad para el control plane:
Separación física o virtual: ejecuta los componentes del control plane en nodos dedicados, aislados de los workloads.
Firewall y VPN: restringe el acceso a kube-apiserver mediante VPN o bastion hosts.
TLS obligatorio: todas las comunicaciones internas deben usar certificados TLS válidos.
Autenticación robusta: habilitar OIDC, certificados de cliente o autenticación basada en tokens.
Auditoría: habilitar audit logging en kube-apiserver para rastrear cambios y accesos.
Ejemplo de habilitación de audit logging en kube-apiserver:
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: production
name: secret-reader
rules:
- apiGroups: [""]
resources: ["secrets"]
verbs: ["get", "list"]
4. Monitorización Avanzada de Kubernetes
La monitorización no solo sirve para métricas de rendimiento, sino también para detección temprana de incidentes de seguridad, identificación de anomalías y auditoría de cambios críticos.
4.1 Logging Centralizado
Objetivo: recopilar logs de pods, nodos y control plane en un sistema centralizado para análisis y auditoría.
Herramientas recomendadas:
ELK Stack (Elasticsearch, Logstash, Kibana)
Loki + Grafana
Splunk
Ejemplo de configuración con Fluentd para ELK:
apiVersion: v1
kind: ConfigMap
metadata:
name: fluentd-config
namespace: kube-system
data:
fluentd.conf: |
@type tail
path /var/log/containers/*.log
pos_file /var/log/fluentd-containers.log.pos
tag kubernetes.*
format json
@type elasticsearch
host elasticsearch.kube-system.svc.cluster.local
port 9200
logstash_format true
Buenas prácticas:
Normalizar los logs para facilitar búsquedas y alertas.
Configurar retención según normativas y capacidad de almacenamiento.
Separar logs de producción de entornos de desarrollo.
4.2 Métricas y Observabilidad
Prometheus + Grafana: para métricas de CPU, memoria, latencia y tráfico.
Alertmanager: para definir reglas de alerta ante comportamientos sospechosos, como picos inusuales de tráfico o fallos de pods críticos.
Ejemplo de alerta Prometheus para pods que reinician excesivamente:
groups:
- name: pod-restart-alerts
rules:
- alert: PodCrashLooping
expr: increase(kube_pod_container_status_restarts_total[5m]) > 3
for: 10m
labels:
severity: critical
annotations:
summary: "Pod en crashloop"
description: "El pod {{ $labels.pod }} en el namespace {{ $labels.namespace }} ha reiniciado más de 3 veces en los últimos 5 minutos."
5. Detección de Anomalías
La detección avanzada combina eventos del sistema, auditoría y reglas de comportamiento para identificar posibles ataques o incidentes.
5.1 Falco: Runtime Security
Falco: motor de detección de comportamiento anómalo en contenedores y nodos.
Detecta actividades sospechosas como:
Pods ejecutando como root.
Cambios en binarios críticos.
Montajes de dispositivos no permitidos.
Ejecución de comandos en contenedores comprometidos.
Ejemplo de regla Falco para detectar ejecución de bash en pods no autorizados:
- rule: Bash Shell in Pod
desc: Detect bash execution in production pods
condition: evt.type = execve and proc.name = bash and container.id != host
output: "Bash detected in container (user=%user.name container=%container.id)"
priority: WARNING
tags: [container, shell]
5.2 Integración con SIEM
Objetivo: correlacionar eventos de múltiples fuentes para detectar patrones de ataque complejos.
Fuentes de datos: auditd, kube-audit, logs de pods, alertas de Falco o Sysdig.
Herramientas: Wazuh, Splunk, ELK Stack con dashboards personalizados.
Caso práctico:
Detectar acceso a secretos por usuarios no autorizados.
Detectar creación de pods con privilegios elevados.
Alertar cuando un contenedor ejecuta comandos de red sospechosos.
6. Respuesta y Mitigación
La respuesta rápida y organizada reduce el impacto de incidentes en Kubernetes.
Monitorización y alertas: Prometheus + Alertmanager, Grafana, ELK, Loki
9. Ejemplos Prácticos de Scripts y YAML
9.1 Script de auditoría de pods con privilegios
#!/bin/bash
# Audita pods que corren como root o con capacidades elevadas
kubectl get pods --all-namespaces -o json | jq '.items[] | select(.spec.containers[]?.securityContext.runAsNonRoot == false)'
La seguridad en Kubernetes requiere un enfoque defense-in-depth, combinando:
Hardening de nodos y contenedores
Políticas de seguridad estrictas y revisables
Monitorización avanzada y detección de anomalías
Planes de respuesta y recuperación efectivos
Esta guía proporciona un marco completo y profesional para endurecer clusters Kubernetes y detectar incidentes tempranamente. La clave es la automatización, auditoría continua y adaptación a nuevas amenazas, manteniendo al mismo tiempo la operatividad del entorno.