Kubernetes se ha convertido en la plataforma de orquestación de contenedores más popular en el mundo de la tecnología. Su flexibilidad y escalabilidad han hecho que sea la elección predilecta para implementar aplicaciones en contenedores, pero con esta adopción creciente también ha surgido una preocupación igualmente importante: la seguridad. En este artículo, exploraremos los conceptos clave de seguridad en Kubernetes, abordando temas como la autenticación y autorización, la configuración de políticas de seguridad y el monitoreo de amenazas en entornos de Kubernetes.
Conceptos clave de seguridad en kubernetes
La seguridad en Kubernetes es un tema amplio y multifacético que involucra diversos aspectos. Aquí hay algunos conceptos clave que debemos entender antes de profundizar en las mejores prácticas y medidas de protección.
Autenticación y autorización en clústeres de Kubernetes
Autenticación
La autenticación en Kubernetes se encarga de verificar la identidad de los usuarios y servicios que intentan acceder al clúster. A continuación, algunos métodos comunes de autenticación con ejemplos.
Certificados TLS
Este método utiliza certificados X.509 para autenticar a los usuarios y servicios. Los certificados se almacenan en el sistema y se utilizan para verificar la identidad.
apiVersion: v1
kind: Secret
metadata:
name: my-tls-secret
type: kubernetes.io/tls
data:
tls.crt: <base64-encoded-certificate>
tls.key: <base64-encoded-private-key>
Tokens de servicio
Los tokens de servicio son tokens de autenticación generado por Kubernetes y se utilizan para que los pods autentiquen con el clúster.
apiVersion: v1
kind: ServiceAccount
metadata:
name: my-service-account
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: my-cluster-role-binding
subjects:
- kind: ServiceAccount
name: my-service-account
namespace: default
roleRef:
kind: ClusterRole
name: my-cluster-role
apiGroup: rbac.authorization.k8s.io
Autorización
La autorización en Kubernetes determina qué acciones pueden realizar los usuarios y servicios autenticados. Se basa en roles y permisos.
Por supuesto, profundicemos aún más en los conceptos clave de seguridad en Kubernetes y proporcionemos ejemplos concretos de las mejores prácticas y medidas de protección.
Autenticación y autorización en clústeres de Kubernetes
Autenticación
La autenticación en Kubernetes se encarga de verificar la identidad de los usuarios y servicios que intentan acceder al clúster. A continuación, algunos métodos comunes de autenticación con ejemplos.
- Certificados TLS:
Este método utiliza certificados X.509 para autenticar a los usuarios y servicios. Los certificados se almacenan en el sistema y se utilizan para verificar la identidad.
Ejemplo
apiVersion: v1
kind: Secret
metadata:
name: my-tls-secret
type: kubernetes.io/tls
data:
tls.crt: <base64-encoded-certificate>
tls.key: <base64-encoded-private-key>
- Tokens de Servicio
Los tokens de servicio son tokens de autenticación generados por Kubernetes y se utilizan para que los pods autentiquen con el clúster.
Ejemplo
apiVersion: v1
kind: ServiceAccount
metadata:
name: my-service-account
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: my-cluster-role-binding
subjects:
- kind: ServiceAccount
name: my-service-account
namespace: default
roleRef:
kind: ClusterRole
name: my-cluster-role
apiGroup: rbac.authorization.k8s.io
Autorización
La autorización en Kubernetes determina qué acciones pueden realizar los usuarios y servicios autenticados. Se basa en roles y permisos. Aquí tienes un ejemplo de cómo crear roles y role bindings.
Ejemplo
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: my-role
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list", "create"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: my-role-binding
namespace: default
subjects:
- kind: ServiceAccount
name: my-service-account
namespace: default
roleRef:
kind: Role
name: my-role
apiGroup: rbac.authorization.k8s.io
Políticas de red (Network Policies)
Controlan el tráfico de red entre los pods en el clúster, limitando la comunicación y reduciendo la superficie de ataque.
Ejemplo de Network Policy
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: my-network-policy
spec:
podSelector:
matchLabels:
app: my-app
ingress:
- from:
- podSelector:
matchLabels:
role: db
ports:
- protocol: TCP
port: 3306
Seguridad de contenedores
Garantiza que los contenedores que se ejecutan en los pods sean seguros, mediante el escaneo de imágenes de contenedores en busca de vulnerabilidades conocidas y la limitación de privilegios.
Ejemplo de limitación de recursos
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: nginx
resources:
limits:
cpu: "0.5"
memory: "256Mi"
requests:
cpu: "0.2"
memory: "128Mi"
Autenticación y autorización en clústeres de Kubernetes
Autenticación fuerte
Utiliza métodos sólidos como Certificados TLS o Tokens de Servicio para autenticar usuarios y servicios. Evita métodos de autenticación débil.
Ejemplo de Certificados TLS
apiVersion: v1
kind: Secret
metadata:
name: my-tls-secret
type: kubernetes.io/tls
data:
tls.crt: <base64-encoded-certificate>
tls.key: <base64-encoded-private-key>
Control de acceso basado en roles
Define roles y role bindings para otorgar permisos mínimos necesarios. Sigue el principio de privilegios mínimos.
Ejemplo de Role y Role Binding
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: my-role
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list", "create"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: my-role-binding
namespace: default
subjects:
- kind: ServiceAccount
name: my-service-account
namespace: default
roleRef:
kind: Role
name: my-role
apiGroup: rbac.authorization.k8s.io
Configuración de políticas de seguridad y control de acceso
- Escaneo de Imágenes de contenedores
Antes de implementar imágenes de contenedores, escanea en busca de vulnerabilidades conocidas y toma medidas para remediarlas.
Ejemplo de escaneo con Trivy
trivy image nginx:latest
- Actualizaciones regulares
Mantén actualizado Kubernetes y las imágenes de contenedores para incluir correcciones de seguridad críticas.
Monitoreo y detección de amenazas en entornos de Kubernetes
- Registros y monitoreo de actividad
Utiliza herramientas como Prometheus y Grafana para recopilar y analizar registros de actividad. Configura alertas para detectar anomalías.
Ejemplo de configuración de Prometheus
apiVersion: monitoring.coreos.com/v1
kind: Prometheus
metadata:
name: prometheus
spec:
replicas: 2
- Escenarios de ataque
Crea escenarios de ataque simulados para evaluar la resiliencia de tu clúster y encontrar posibles puntos débiles.
- Detección de intrusiones
Utiliza soluciones como Falco para identificar comportamientos anómalos en el clúster y tomar medidas rápidas en caso de un ataque.
Ejemplo de instalación de Falco en Kubernetes
helm repo add falcosecurity https://falcosecurity.github.io/charts
helm install falco falcosecurity/falco
Conclusión
La seguridad en Kubernetes es fundamental para proteger tus aplicaciones y datos en entornos de contenedores. Implementa medidas de autenticación sólidas, configura políticas de seguridad, controla el acceso y monitorea activamente tu clúster para garantizar un entorno Kubernetes seguro y confiable. Estar al tanto de las amenazas emergentes y usar herramientas de detección de intrusiones te ayudará a mantener la seguridad a lo largo del tiempo. La seguridad en Kubernetes es un esfuerzo continuo y en constante evolución que requiere atención constante.
En Profile estamos especializados en Arquitectura de Software estratégica. ¡Contacta con nosotros/as y conoce a nuestro equipo!
Síguenos en nuestras Redes Sociales y Canal de YouTube para estar al día de las últimas novedades en desarrollo de software y tecnología.