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.io
Explicació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,Role
oClusterRole
).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.io
Ejercicio 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-reader
con 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.io
Solució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.io
Errores Comunes y Consejos
-
Error: No especificar correctamente el
apiGroup
enroleRef
.- Solución: Asegúrate de que
apiGroup
enroleRef
coincida 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
ClusterRoleBinding
para 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