Kubernetes aportó flexibilidad, pero también un nuevo conjunto de vectores de ataque. La seguridad debe integrarse en el proceso, desde la creación de la imagen hasta la ejecución en el clúster.
Principales capas de seguridad
- Supply-Chain, buscando vulnerabilidades en imágenes Docker].
- Control de acceso (RBAC), permisos mínimos por cuenta de servicio.
- Políticas de red,
NetworkPolicypara aislar pods. - Runtime Security, Falco, OPA Gatekeeper para detectar comportamientos anómalos.
- Seguridad de datos, Secretos cifrados con KMS, cifrado de volúmenes.
Lista de verificación de seguridad de Kubernetes
- [] Habilite PodSecurityPolicy o Pod Security Standards.
- [] Defina Roles y RoleBindings con el principio de privilegio mínimo.
- [] Aplique NetworkPolicy para limitar el tráfico dentro del espacio de nombres.
- Escanee imágenes con Trivy o Clair en CI.
- Implementar OPA Gatekeeper para políticas de validación.
- [] Configurar Falco para monitorear llamadas al sistema sospechosas.
- [] Rotar Secretos regularmente.
- [] Auditar registros de API Server con política de auditoría.
Ejemplo de RBAC restringido
apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: namespace: prod name: read-only-role rules: - apiGroups: [""] resources: ["pods", "services", "configmaps"] verbs: ["get", "list", "watch"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: read-only-binding namespace: prod subjects: - kind: ServiceAccount name: app-sa namespace: prod roleRef: kind: Role name: read-only-role apiGroup: rbac.authorization.k8s.io
Políticas de red simples
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: deny-all-except-frontend namespace: prod spec: podSelector: {} policyTypes: - Ingress - Egress ingress: - from: - podSelector: matchLabels: app: frontend
Escaneo de imágenes en CI
## .gitlab-ci.yml stages: - scan - build - deploy scan_image: stage: scan image: aquasec/trivy:latest script: - trivy image --severity HIGH,CRITICAL myapp:latest
Monitoreo del tiempo de ejecución con Falco
apiVersion: apps/v1 kind: DaemonSet metadata: name: falco namespace: kube-system spec: selector: matchLabels: app: falco template: metadata: labels: app: falco spec: containers: - name: falco image: falcosecurity/falco:latest securityContext: privileged: true volumeMounts: - name: devfs mountPath: /host/dev - name: procfs mountPath: /host/proc - name: sysfs mountPath: /host/sys volumes: hostPath: path: /proc - name: sysfs hostPath: path: /sys
Conclusión
La seguridad en Kubernetes es un proceso continuo. Al aplicar capas de defensa, desde la creación de imágenes hasta las políticas de tiempo de ejecución, se reduce drásticamente la superficie de ataque y se aumenta la confianza en los entornos de producción.
¿Qué prácticas de seguridad ha adoptado ya en su clúster? ¡Comparte en los comentarios!
Lea también
- Confianza cero: implementación de seguridad de acceso granular en entornos distribuidos
- Autorización y Permisos en Aplicaciones: Control de Acceso Seguro
- Autorización y permisos - Fundamentos de mejores prácticas
- Protección contra fuga de datos: Guía de seguridad
- Seguridad de aplicaciones: Guía de protección móvil
- HashiCorp Vault: Gestión segura de secretos en aplicaciones
