Skip to content

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

  1. Ingrese con el usuario admin y la contraseña colocada a este usuario durante la instalación

  2. En la esquina superior izquierda, haga clic en ☰ Users & Authentication

  3. En el menú de navegación izquierdo, haga clic en Users.

  4. Haz clic en Create

  5. En Username colocar reader

  6. En New Password y Confirm Password colocar Developer123

  7. Cambiar los Permisos Globales a User-Base

  8. Clic en Create

  9. Verificar que el nuevo usuario reader aparezca en la lista de usuarios

  10. Anote el ID del usuario (se utilizará más adelante)

Creación de Rancher Cluster Role

  1. Ingrese con el usuario admin y la contraseña colocada a este usuario durante la instalación

  2. En la esquina superior izquierda, haga clic en ☰ Users & Authentication

  3. En el menú de la izquierda clic en Roles

  4. Clic en Cluster

  5. Clic en Create Cluster Role

  6. De nombre escribir view-namespaces

  7. En Grant Resources rellenar de la siguiente manera

    Verbs Resource API Groups Non-Resource URLs
    get, list Namespaces
  8. Clic en Add

  9. Verifique en la lista de Roles que exista el rol view-namespaces

  10. En la esquina superior izquierda, haga clic en ☰ cluster-users

  11. En el menú de la izquierda clic en RBAC / Cluster Members

  12. Clic en el botón de la derecha Add

  13. En el campo de texto escriba reader, seleccione el Role view-namespaces y clic en Create

  14. Ingrese a Rancher Server Web Console con el usuario reader y la contraseña Developer123

  15. En la esquina superior izquierda, haga clic en ☰ Explore Cluster

  16. Elija el cluster llamado cluster-users

  17. Verifique que únicamente pueda acceder a Projects/Namespaces

Configuración de Permisos a través de Kubernetes Role

  1. Ingrese al CLI del sistema operativo del servidor usado como Bastion con el usuario y la contraseña proporcionados.

  2. Ingresar al cluster de Kubernetes utilizando el archivo kubeconfig

    export KUBECONFIG=~/rke-cluster-users/kube_config_cluster.yml
    

  3. Crear un nuevo namespace llamado example-roles

    kubectl create ns example-roles
    

  4. Establecer el nuevo namespace por defecto con el contexto actual

    kubectl config set-context --current --namespace=example-roles
    

  5. Cree un Role que permita ver los Secrets del namespace

    kubectl create role secret-reader --verb=get --verb=list --resource=secrets
    

  6. Cree un RoleBinding para el usuario reader en el namespace example-roles

    kubectl create rolebinding list-pods-binding --role=secret-reader --user=<user-id>
    

  7. En Rancher Server Web Console ingrese con el usuario reader

  8. Vaya hacia ☰ cluster-users

  9. Luego en Storage - Secrets, y compruebe que puede listar los Secrets del namespace example-roles

  10. Si se encuentra en la línea de comandos, es posible verificar los recursos con los siguientes comandos:

    kubectl get secrets --namespace=example-roles
    
    Verifique que NO tiene permisos para listar otros recursos (debe dar error)
    kubectl get pods --namespace=example-roles
    

  11. Es posible realizar la limpieza de los recursos creados anteriormente, eliminando el Namespace
    kubectl delete ns example-roles