Tema 15

15. Seguridad de workloads: service accounts, límites, aislamiento, sidecars y service mesh

Un workload seguro no depende solo de una imagen sin vulnerabilidades. También requiere identidad mínima, límites de recursos, aislamiento, comunicación controlada, secretos bien entregados y observabilidad durante la ejecución.

Objetivo Proteger aplicaciones en ejecución dentro del cluster
Enfoque Identidad, recursos, aislamiento, sidecars y service mesh
Resultado Reducir movimiento lateral e impacto de workloads comprometidos

15.1 Introducción

Un workload es una carga de trabajo que ejecuta una aplicación o componente dentro de la plataforma. En Kubernetes suele materializarse como pods gestionados por deployments, statefulsets, daemonsets, jobs u otros controladores.

La seguridad de workloads se centra en cómo se ejecuta la aplicación: con qué identidad, qué permisos tiene, qué recursos consume, qué secretos recibe, con quién se comunica y qué ocurre si se compromete.

El objetivo es diseñar workloads que puedan operar con el menor privilegio posible y que, ante un fallo o ataque, no comprometan todo el cluster.

15.2 Qué protege la seguridad de workloads

La seguridad de workloads une controles de aplicación, contenedor, Kubernetes y red. No reemplaza el hardening del cluster, sino que lo aplica al nivel donde vive cada servicio.

  • Identidad del pod y permisos asociados.
  • Acceso a secretos, configmaps, volúmenes y APIs.
  • Comunicación entre servicios y namespaces.
  • Límites de CPU, memoria y almacenamiento.
  • Separación entre workloads críticos y no críticos.
  • Comportamiento de sidecars e init containers.
  • Cifrado, autenticación y autorización entre servicios.
Un workload comprometido no debería tener permisos, red ni secretos suficientes para convertirse en compromiso del cluster completo.

15.3 Service accounts por workload

Cada workload debería usar una service account específica. Usar la service account default dificulta aplicar mínimo privilegio y complica auditoría.

Práctica Riesgo Enfoque recomendado
Service account default Permisos genéricos y baja trazabilidad Crear identidad por aplicación o componente
Permisos amplios Lectura de secretos o modificación de recursos innecesaria RBAC mínimo por namespace y acción
Token montado sin uso Credencial disponible para un atacante Deshabilitar montaje automático si no se necesita
Identidad compartida Dificultad para atribuir acciones Separar por servicio, ambiente y propósito

15.4 Identidad de workload hacia cloud

Muchas aplicaciones en Kubernetes necesitan acceder a servicios cloud: colas, bases, almacenamiento, KMS o secretos. La práctica insegura es montar claves estáticas dentro del pod.

El enfoque preferible es usar identidad de workload integrada con el proveedor cloud. Así el pod obtiene credenciales temporales asociadas a su service account y rol autorizado.

Beneficios:

  • Evita claves permanentes dentro de secretos Kubernetes.
  • Asocia permisos cloud a una identidad específica.
  • Facilita rotación y revocación.
  • Mejora auditoría entre acciones cloud y workloads.
  • Reduce impacto si se filtra una variable o volumen.

15.5 Límites y requests

Requests y limits definen cuánto recurso necesita y puede consumir un contenedor. Son controles de disponibilidad y también de seguridad, porque reducen el impacto de abuso o fallas.

Control Función Riesgo si falta
CPU request Reserva esperada para scheduling Ubicación ineficiente o degradación
CPU limit Máximo de CPU permitida Consumo excesivo por bug o abuso
Memory request Memoria esperada para ejecutar Scheduling incorrecto
Memory limit Máximo de memoria permitida OOM o afectación a otros workloads
Ephemeral storage Uso de almacenamiento temporal Llenado de disco del nodo

15.6 Aislamiento entre workloads

El aislamiento busca que workloads de distinto riesgo no compartan demasiados recursos o permisos. Puede aplicarse en varias capas.

  • Namespace: organiza recursos y aplica RBAC, cuotas y políticas.
  • Nodos dedicados: separan workloads sensibles o regulados.
  • Taints y tolerations: controlan qué pods pueden programarse en nodos específicos.
  • Node selectors y affinity: ubican workloads según criterios controlados.
  • RuntimeClass: permite usar runtimes con mayor aislamiento si están disponibles.
  • Network policies: limitan comunicación entre servicios.

15.7 Afinidad, anti-afinidad y nodos dedicados

La ubicación de workloads influye en seguridad y disponibilidad. No siempre conviene que servicios críticos compartan nodo con workloads experimentales o de menor confianza.

Usos comunes:

  • Separar workloads con datos sensibles en nodos dedicados.
  • Evitar que réplicas críticas queden en el mismo nodo.
  • Aislar controladores de seguridad o networking.
  • Reservar nodos para workloads con requisitos especiales.
  • Aplicar taints para impedir scheduling accidental.
La separación por namespace no siempre alcanza. Para workloads críticos puede ser necesario aislar también por nodo, red, identidad y política.

15.8 Sidecars

Un sidecar es un contenedor auxiliar que corre en el mismo pod que la aplicación principal. Puede aportar proxy, logging, seguridad, sincronización de secretos o funciones de service mesh.

Riesgos de sidecars:

  • Comparten red y, a veces, volúmenes con la aplicación.
  • Pueden manejar tráfico sensible.
  • Agregan superficie de ataque y dependencias.
  • Pueden requerir permisos adicionales.
  • Errores en el sidecar pueden afectar disponibilidad de la aplicación.

Un sidecar debe tener imagen confiable, permisos mínimos, límites de recursos y monitoreo igual que cualquier otro contenedor.

15.9 Init containers

Los init containers se ejecutan antes de los contenedores principales. Sirven para preparar archivos, esperar dependencias o realizar inicialización. Como pueden acceder a volúmenes compartidos, deben controlarse con cuidado.

Buenas prácticas:

  • Usar imágenes mínimas y confiables.
  • Evitar credenciales permanentes.
  • No modificar archivos sensibles sin necesidad.
  • Aplicar límites de recursos.
  • Registrar errores de inicialización.
  • Evitar lógica compleja que oculte fallas de despliegue.

15.10 Service mesh

Un service mesh agrega una capa de comunicación entre servicios, normalmente mediante proxies sidecar o componentes de dataplane. Puede ofrecer mTLS, control de tráfico, observabilidad y políticas de autorización.

Capacidades típicas:

  • Cifrado mTLS entre servicios.
  • Identidad de servicio.
  • Autorización entre workloads.
  • Control de tráfico, retries, timeouts y circuit breaking.
  • Métricas, trazas y logs de comunicación.
  • Políticas por namespace, servicio o identidad.

15.11 mTLS entre servicios

mTLS permite que dos servicios se autentiquen mutuamente y cifren comunicación. En un service mesh, los certificados suelen emitirse y rotarse automáticamente.

Beneficio Qué aporta Cuidado necesario
Confidencialidad Cifra tráfico entre servicios Validar cobertura real del mesh
Autenticidad Verifica identidad de servicio Proteger autoridad certificadora del mesh
Autorización Permite reglas por identidad No confiar solo en nombres de red
Rotación Certificados de corta duración Monitorear expiración y errores de emisión

15.12 Autorización entre servicios

Una vez que los servicios tienen identidad, se pueden definir políticas de autorización: qué servicio puede llamar a cuál, usando qué método, ruta o puerto.

Ejemplos:

  • El frontend puede llamar a la API pública, pero no a la base de datos.
  • El servicio de pagos solo acepta llamadas desde la API de órdenes.
  • El servicio administrativo requiere identidad específica y namespace autorizado.
  • Los jobs batch no pueden llamar servicios interactivos salvo excepción.

Estas reglas reducen movimiento lateral y complementan network policies.

15.13 Manejo de secretos en workloads

Los secretos deben entregarse al workload de forma controlada y con el menor alcance posible. No todos los contenedores del pod necesitan acceder a los mismos secretos.

Controles recomendados:

  • Montar solo secretos necesarios para cada aplicación.
  • Separar secretos por ambiente y namespace.
  • Evitar variables de entorno para secretos muy sensibles si pueden filtrarse en dumps o diagnósticos.
  • Usar gestores externos cuando se requiera rotación o auditoría fuerte.
  • Evitar compartir volúmenes con secretos entre contenedores que no los necesitan.

15.14 Observabilidad del workload

La observabilidad permite detectar problemas de seguridad y operación. Un workload seguro debe producir señales útiles sin exponer datos sensibles.

Se recomienda capturar:

  • Logs estructurados sin secretos ni datos sensibles innecesarios.
  • Métricas de errores, latencia, consumo y reinicios.
  • Trazas entre servicios críticos.
  • Eventos de autenticación y autorización de aplicación.
  • Alertas por comportamiento anómalo o tráfico inesperado.
  • Información de imagen, versión y configuración desplegada.

15.15 Errores frecuentes

  • Usar la misma service account para muchos workloads.
  • Montar tokens de Kubernetes en pods que no usan la API.
  • No definir límites de recursos.
  • Colocar workloads críticos y experimentales en los mismos nodos sin criterio.
  • Agregar sidecars sin evaluar permisos, recursos y superficie de ataque.
  • Activar service mesh sin políticas de autorización reales.
  • Enviar secretos o datos sensibles a logs.
  • Confiar en mTLS sin controlar quién está autorizado a comunicarse.
La seguridad del workload se degrada cuando identidad, red, recursos y secretos se tratan como detalles operativos en lugar de controles de seguridad.

15.16 Lista de verificación

  • ¿Cada workload usa una service account específica?
  • ¿Se deshabilita el token automático si el pod no usa la API?
  • ¿Los permisos cloud se entregan mediante identidad de workload?
  • ¿Los pods tienen requests, limits y límites de almacenamiento temporal?
  • ¿Los workloads críticos tienen aislamiento adecuado por namespace, nodo y red?
  • ¿Los sidecars tienen permisos, límites y escaneo propio?
  • ¿El service mesh aplica mTLS y autorización, no solo observabilidad?
  • ¿Los logs evitan secretos y datos sensibles?

15.17 Qué debes recordar de este tema

  • La identidad del workload es un control de seguridad central.
  • Los límites de recursos reducen riesgo de fallas y abuso.
  • El aislamiento debe considerar namespace, nodo, red, permisos y datos.
  • Los sidecars y service mesh agregan capacidades, pero también superficie de ataque.
  • mTLS debe combinarse con autorización explícita entre servicios.

15.18 Conclusión

La seguridad de workloads conecta identidad, permisos, recursos, red, secretos y observabilidad. Cuando estos controles se diseñan juntos, un servicio comprometido tiene menos capacidad de escalar, moverse lateralmente o afectar a otros componentes.

En el próximo tema estudiaremos DevSecOps: integración de seguridad en el ciclo de vida de desarrollo.