Introducción
El Control de Acceso Basado en Roles (RBAC) es un mecanismo de seguridad en Kubernetes que permite gestionar el acceso a los recursos del clúster de manera granular. Con RBAC, puedes definir quién puede hacer qué dentro del clúster, asignando permisos específicos a usuarios, grupos o cuentas de servicio.
Conceptos Clave
Antes de profundizar en RBAC, es importante entender algunos conceptos clave:
- Roles: Definen un conjunto de permisos. Los roles pueden ser específicos de un namespace (Role) o globales en el clúster (ClusterRole).
- RoleBindings: Asocian un Role con un usuario, grupo o cuenta de servicio dentro de un namespace.
- ClusterRoleBindings: Asocian un ClusterRole con un usuario, grupo o cuenta de servicio a nivel de clúster.
Estructura de un Role
Un Role en Kubernetes se define mediante un archivo YAML. Aquí hay un ejemplo de un Role que permite listar y obtener pods en un namespace específico:
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: pod-reader
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list"]Explicación del Código
apiVersion: La versión de la API de RBAC.kind: El tipo de recurso, en este caso,Role.metadata: Información sobre el Role, incluyendo el namespace y el nombre.rules: Una lista de reglas que definen los permisos. Cada regla incluye:apiGroups: Los grupos de API a los que se aplican los permisos.resources: Los recursos a los que se aplican los permisos.verbs: Las acciones permitidas (por ejemplo,get,list,create,delete).
Estructura de un RoleBinding
Un RoleBinding asocia un Role con un usuario, grupo o cuenta de servicio. Aquí hay un ejemplo de un RoleBinding que asocia el Role pod-reader con un usuario llamado jane:
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: read-pods
namespace: default
subjects:
- kind: User
name: jane
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: Role
name: pod-reader
apiGroup: rbac.authorization.k8s.ioExplicación del Código
apiVersion: La versión de la API de RBAC.kind: El tipo de recurso, en este caso,RoleBinding.metadata: Información sobre el RoleBinding, incluyendo el nombre y el namespace.subjects: Una lista de sujetos (usuarios, grupos o cuentas de servicio) a los que se aplica el RoleBinding.kind: El tipo de sujeto (por ejemplo,User,Group,ServiceAccount).name: El nombre del sujeto.apiGroup: El grupo de API del sujeto.
roleRef: Referencia al Role que se está asociando.kind: El tipo de Role (por ejemplo,RoleoClusterRole).name: El nombre del Role.apiGroup: El grupo de API del Role.
Estructura de un ClusterRole
Un ClusterRole es similar a un Role, pero se aplica a nivel de clúster. Aquí hay un ejemplo de un ClusterRole que permite listar y obtener pods en todo el clúster:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: cluster-pod-reader
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list"]Estructura de un ClusterRoleBinding
Un ClusterRoleBinding asocia un ClusterRole con un usuario, grupo o cuenta de servicio a nivel de clúster. Aquí hay un ejemplo de un ClusterRoleBinding que asocia el ClusterRole cluster-pod-reader con un usuario llamado jane:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: read-cluster-pods
subjects:
- kind: User
name: jane
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: cluster-pod-reader
apiGroup: rbac.authorization.k8s.ioEjercicio Práctico
Ejercicio 1: Crear un Role y RoleBinding
- Crear un Role: Define un Role que permita listar y obtener servicios (
services) en el namespacedefault.
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: service-reader
rules:
- apiGroups: [""]
resources: ["services"]
verbs: ["get", "list"]- Crear un RoleBinding: Asocia el Role
service-readercon un usuario llamadojohn.
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: read-services
namespace: default
subjects:
- kind: User
name: john
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: Role
name: service-reader
apiGroup: rbac.authorization.k8s.ioSolución
- Role:
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: service-reader
rules:
- apiGroups: [""]
resources: ["services"]
verbs: ["get", "list"]- RoleBinding:
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: read-services
namespace: default
subjects:
- kind: User
name: john
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: Role
name: service-reader
apiGroup: rbac.authorization.k8s.ioErrores Comunes y Consejos
-
Error: No especificar correctamente el
apiGroupenroleRef.- Solución: Asegúrate de que
apiGroupenroleRefcoincida con el grupo de API del Role o ClusterRole.
- Solución: Asegúrate de que
-
Error: Intentar usar un RoleBinding para un ClusterRole.
- Solución: Usa
ClusterRoleBindingpara asociar un ClusterRole.
- Solución: Usa
-
Consejo: Utiliza nombres descriptivos para tus Roles y RoleBindings para facilitar la gestión y el mantenimiento.
Conclusión
El Control de Acceso Basado en Roles (RBAC) es una herramienta poderosa para gestionar la seguridad en Kubernetes. Permite definir permisos específicos para usuarios, grupos y cuentas de servicio, asegurando que solo tengan acceso a los recursos necesarios. En esta sección, hemos cubierto los conceptos básicos de RBAC, incluyendo Roles, RoleBindings, ClusterRoles y ClusterRoleBindings, y hemos proporcionado ejemplos prácticos para ayudarte a implementar RBAC en tu clúster de Kubernetes.
En el próximo tema, exploraremos las Políticas de Seguridad de Pods (Pod Security Policies) y cómo pueden ayudarte a asegurar aún más tu clúster de Kubernetes.
Curso de Kubernetes
Módulo 1: Introducción a Kubernetes
- ¿Qué es Kubernetes?
- Arquitectura de Kubernetes
- Conceptos y Terminología Clave
- Configuración de un Clúster de Kubernetes
- CLI de Kubernetes (kubectl)
Módulo 2: Componentes Principales de Kubernetes
Módulo 3: Gestión de Configuración y Secretos
Módulo 4: Redes en Kubernetes
Módulo 5: Almacenamiento en Kubernetes
Módulo 6: Conceptos Avanzados de Kubernetes
Módulo 7: Monitoreo y Registro
- Monitoreo con Prometheus
- Registro con Elasticsearch, Fluentd y Kibana (EFK)
- Verificaciones de Salud y Sondas
- Servidor de Métricas
Módulo 8: Seguridad en Kubernetes
- Control de Acceso Basado en Roles (RBAC)
- Políticas de Seguridad de Pods
- Seguridad de Red
- Seguridad de Imágenes
Módulo 9: Escalado y Rendimiento
- Autoescalado Horizontal de Pods
- Autoescalado Vertical de Pods
- Autoescalado de Clúster
- Ajuste de Rendimiento
Módulo 10: Ecosistema y Herramientas de Kubernetes
Módulo 11: Estudios de Caso y Aplicaciones del Mundo Real
- Despliegue de una Aplicación Web
- CI/CD con Kubernetes
- Ejecución de Aplicaciones con Estado
- Gestión Multi-Clúster
