Autorización mediante Roles en Kubernetes/Rancher
Por defecto, Kubernetes maneja el control de acceso mediante Roles (RBAC) el cual permite declarar las acciones que serán permitidas sobre los diferentes recursos o grupos. Un Role contiene las reglas que representan una serie de permisos, estos se asignan o se aplican únicamente sobre un Namespace, de forma que, los permisos aplicados sobre el Namespace X no afectan o no permiten acciones sobre el Namespace Y por ejemplo.
Al contrario, un Cluster Role es independiente del Namespace, el listado de reglas es aplicado a todo el cluster.
Para que un Role tenga efecto, es necesario incluir un RoleBinding que indique sobre que Namespace tendrá efecto y, sobre quién, sea este usuario o Service Account.
En Rancher, existen también Roles que se dividen entre Globales, Cluster y Projects indicando sobre que nivel son aplicadas las reglas. Dependiendo de dónde se crean pueden ser aplicadas a los usuarios por cada Cluster o en cada Proyecto.
Laboratorio: Cluster Roles y Roles
Descripción
La presente guía muestra cómo manejar Cluster Roles y Roles sobre usuarios en específico.
Objetivos
- Crear un Cluster Role de Rancher
- Crear un Role de Kubernetes
- Aplicar el Role hacia un usuario
Antes de comenzar
- Contar con el acceso al ambiente de laboratorio
Inicio de laboratorio
Creación/Configuración usuario de pruebas
-
Ingrese con el usuario admin y la contraseña colocada a este usuario durante la instalación
-
En la esquina superior izquierda, haga clic en ☰
Users & Authentication -
En el menú de navegación izquierdo, haga clic en
Users. -
Haz clic en Create
-
En Username colocar reader
-
En New Password y Confirm Password colocar Developer123
-
Cambiar los Permisos Globales a
User-Base -
Clic en Create
-
Verificar que el nuevo usuario reader aparezca en la lista de usuarios
-
Anote el ID del usuario (se utilizará más adelante)
Creación de Rancher Cluster Role
-
Ingrese con el usuario admin y la contraseña colocada a este usuario durante la instalación
-
En la esquina superior izquierda, haga clic en ☰
Users & Authentication -
En el menú de la izquierda clic en
Roles -
Clic en
Cluster -
Clic en
Create Cluster Role -
De nombre escribir
view-namespaces -
En
Grant Resourcesrellenar de la siguiente maneraVerbs Resource API Groups Non-Resource URLs get, list Namespaces -
Clic en Add
-
Verifique en la lista de Roles que exista el rol
view-namespaces -
En la esquina superior izquierda, haga clic en ☰
cluster-users -
En el menú de la izquierda clic en
RBAC / Cluster Members -
Clic en el botón de la derecha Add
-
En el campo de texto escriba
reader, seleccione el Roleview-namespacesy clic en Create -
Ingrese a Rancher Server Web Console con el usuario reader y la contraseña Developer123
-
En la esquina superior izquierda, haga clic en ☰ Explore Cluster
-
Elija el cluster llamado cluster-users
-
Verifique que únicamente pueda acceder a
Projects/Namespaces
Configuración de Permisos a través de Kubernetes Role
-
Ingrese al CLI del sistema operativo del servidor usado como Bastion con el usuario y la contraseña proporcionados.
-
Ingresar al cluster de Kubernetes utilizando el archivo kubeconfig
export KUBECONFIG=~/rke-cluster-users/kube_config_cluster.yml -
Crear un nuevo namespace llamado example-roles
kubectl create ns example-roles -
Establecer el nuevo namespace por defecto con el contexto actual
kubectl config set-context --current --namespace=example-roles -
Cree un Role que permita ver los Secrets del namespace
kubectl create role secret-reader --verb=get --verb=list --resource=secrets -
Cree un RoleBinding para el usuario
readeren el namespaceexample-roleskubectl create rolebinding list-pods-binding --role=secret-reader --user=<user-id> -
En Rancher Server Web Console ingrese con el usuario
reader -
Vaya hacia ☰
cluster-users -
Luego en Storage - Secrets, y compruebe que puede listar los Secrets del namespace example-roles
-
Si se encuentra en la línea de comandos, es posible verificar los recursos con los siguientes comandos:
Verifique que NO tiene permisos para listar otros recursos (debe dar error)kubectl get secrets --namespace=example-roleskubectl get pods --namespace=example-roles - Es posible realizar la limpieza de los recursos creados anteriormente, eliminando el Namespace
kubectl delete ns example-roles