Kasten RBAC Multi-Tenant Multi-Cluster Keycloak – 3

Y seguimos con este excelente tema que estamos revisando, en el post anterior revisamos todo lo relacionado a la configuración de clusterroles, roles, bindings para Kasten K10, creando cluster roles para Administradores y para Operadores de un cluster en particular. En este ultimo post veremos la configuración de roles, clusterroles, bindings con Kasten K10 Multi-Cluster Manager y por supuesto con Keycloak para la gestion de Usuarios y Grupos.

Configuración Kasten K10 Multi-Cluster Keycloak

*** La idea de esta serie es explicar como generar los grupos, roles, clusterroles y demás recursos asociados a RBAC, sin la necesidad de estar modificando directamente en el cluster de kubernetes los permisos de usuario durante el tiempo, así toda la gestión de creación de usuario, grupos, asignación de grupos se realiza en Keycloak. ***

***La configuración de OpenID con Kasten K10 Multi-Cluster Manager es casi idéntica a la de Kasten K10, ya que se necesitan los mismos pasos para habilitar la autenticación, los repetiré en este post, en caso de que hayas llegado directo aquí.***

Debemos conectarnos al cluster primario de Kubernetes donde se encuentra instalado Kasten K10 Multi-Cluster Manager y procederemos a la configuración de autenticación con Keycloak, pero antes, necesitamos extraer el “Secret” desde nuestro “Client” kasten en el menú “Credentials” reemplazando en la variable “auth.oidcAuth.clientSecret”, (reemplazar SuperDuperClientSecret) y por supuesto reemplazando los valores por tus datos de DNS o IP, ejecutando el siguiente comando (por seguridad elimine parte del secret):

helm upgrade k10 kasten/k10 --namespace=kasten-io --set auth.oidcAuth.enabled=true --set auth.oidcAuth.providerURL="https://auth.24xsiempre.com/auth/realms/kasten" --set auth.oidcAuth.redirectURL="https://kasten.24xsiempre.com/" --set auth.oidcAuth.scopes="groups profile email" --set auth.oidcAuth.groupClaim="groups" --set auth.oidcAuth.prompt="login" --set auth.oidcAuth.clientID="kasten" --set auth.oidcAuth.clientSecret="SuperDuperClientSecret" --set auth.oidcAuth.usernameClaim="email" --reuse-values --set externalGateway.create=true

Ahora veremos que significa cada uno de estas variables:

  • –set auth.oidcAuth.enabled=true / Habilitamos autenticación OpenID
  • –set auth.oidcAuth.providerURL=”https://auth.24xsiempre.com/auth/realms/kasten” / Url para Autenticarse
  • –set auth.oidcAuth.redirectURL=”https://kasten.24xsiempre.com/” / Url de aplicacion K10
  • –set auth.oidcAuth.scopes=”groups profile email” / Client Scopes para validar
  • –set auth.oidcAuth.groupClaim=”groups” / Nombre del grupo de Client Scope
  • –set auth.oidcAuth.prompt=”login” / Mensaje de Login
  • –set auth.oidcAuth.clientID=”kasten” / Nombre del Cliente en el Realm creado.
  • –set auth.oidcAuth.clientSecret=”SuperDuperClientSecret” / Secret del cliente
  • –set auth.oidcAuth.usernameClaim=”email” / En caso de autenticacion de email
  • –reuse-values / Reusa valores ya configurados
  • –set externalGateway.create=true / Reconfigura servicio gateway en K10 para acceder remoto

Un dato importante si ya tienes configurado un método de autenticación para Kasten, es mejor desactivarlo y luego ejecutar el comando anterior en caso de error.

Acceso Usuarios

Como ya tenemos todo configurado, la creación del usuario que realizamos en el post anterior, solo nos queda ingresar a la interfaz web de keycloak y asegurarnos que tenga estos permisos el usuario:

  • Usuario: kastenadmin
  • Password: SuperDuperPassword o la que se haya aplicado
  • Grupo: k10:admins

Luego solo ingresaremos a la Url de Kasten en mi caso https://kasten.24xsiempre.com/k10/#/ y nos redirigirá a el formulario de ingreso de Keycloak en el realm de Kasten, ingresamos las credenciales:

Y podremos observar que tenemos un ingreso exitoso y con todos los permisos ya que pertenecemos al grupo “k10:admins” y no tuvimos que editar ningún ClusterRole o Roles.

Para confirmar los permisos, es posible validarlos gráficamente ya sea viendo “permissions” “unrestricted” o entrando al cluster primario, luego “Cluster Settings” , después “Support” y por ultimo clic en “View Current User Details” y podrás visualizar todos los permisos de ese usuario y al grupo que pertenece:

Creación de Roles de Acceso en Kasten K10 Multi-Cluster Manager

Como vimos anteriormente, tenemos configurado el cluster primario de Kasten K10. Ahora configuraremos los roles necesarios asociados a grupos para acceder a Kasten K10 Multi-Cluster Manager

Usuario Administrador

Importante señalar que K10 Multi-Cluster Manager esta pensado solo para administradores, es posible dar acceso a un usuario regular sin permisos de administración sobre Multi-Cluster Manager, aun así, como vimos en el post anterior, es posible dar acceso completo a un usuario al cluster protegido por K10 inclusive si esta usando recursos o distribuciones de Multi-Cluster Manager

Al usar Multi-Cluster Manager es posible administrar los usuarios con Keycloak. Como mencione anteriormente para la administración es necesario pertenecer al grupo “k10:admins”

Y si validamos acceso:

Ahora, necesito acceso a K10 Multi-Cluster Manager como usuario sin la posibilidad de modificar configuraciones globales.

Usuario Operador

Por lo general siempre es necesario un usuario con permisos limitados a nivel de K10 Multi-Cluster Manager, recordando siempre, que es posible asignar un rol de operación directo a un grupo de usuarios para Kasten K10 sin la necesidad de acceder al Multi-Cluster Manager, por tanto, en Keycloak cambiaremos el grupo del usuario “kastenadmin” a “k10:mc-user”

Si validamos acceso obtendremos el siguiente error:

El error anterior es por que no se a generado el RoleBinding para el grupo “k10:mc-user”, por tanto lo realizaremos de la siguiente forma:

kubectl create rolebinding k10-mc-user-demo --clusterrole=k10-mc-user \
    --namespace=kasten-io-mc \
    --group=k10:mc-user

Validaremos la creacion del RoleBinding:

kubectl get rolebindings -n kasten-io-mc

Y validamos acceso a Kasten:

Como vemos en la imagen anterior, no tiene acceso al cluster “qadesarrollo” y tampoco puede visualizar los recursos del cluster primario. Es una buena practica en caso de otorgar acceso al K10 Multi-Cluster Manager, restringir la administración del cluster primario, ya que en este cluster se concentra la configuración centralizada de todos los recursos.

Asignación K10ClusterRoles en Multi-Cluster Manager

Como ya realizamos el binding del grupo a nivel de clusterrole, necesitamos permitir acceso al usuario a la administración de un cluster de preferencia, por tanto, con un usuario administrador, que pertenezca al grupo “k10:admins”, agregaremos al usuario “kastenadmin” a un K10ClusterRole para que pueda administrar un cluster.

Al generar el K10ClusterRole, indicamos que es administrador del cluster “qadesarrollo”, recuerda que existen 3 K10ClusterRoles que puedes asignar al usuario “k10-multi-cluster-admin”, “k10-multi-cluster-basic”, “k10-multi-cluster-config-view” y si validamos acceso nuevamente observaremos que ya tiene los permisos necesarios:

Conclusiones y Recomendaciones

Como vimos en esta serie de 3 posts, es posible utilizar todo el RBAC para acceder con permisos granulares a los recursos de Kasten K10 y Kasten K10 Multi-Cluster Manager, inclusive siendo administrados los cluster centralizadamente, es posible generar acceso directo al cluster deseado por algún cliente o usuario de Kasten sin la necesidad de acceso al Multi-Cluster, es por ellos que siempre se recomienda utilizar una solución de SSO, como en este caso Keycloak o la de tu preferencia ya que el protocolo OpenID es estandard. Como recomendación, siempre utilizar el principio de menor privilegio posible e ir otorgando permisos de acuerdo a la necesidad de la operación, como también, generar los ClusterRoles específicos para luego solo agregar grupos de usuarios.

Demo Kasten K10

Si por cualquier motivo, necesitas probar este tipo de acceso, he dejado la plataforma operativa en el laboratorio, para que cualquier usuario se registre y pueda acceder al K10 Multi-Cluster Manager y poder jugar con el ambiente de pruebas, para hacer el registro y conseguir acceso solo debes ingresar en:

https://kasten.24xsiempre.com

Y Hacer clic en “Registrate” / “Register”

Al registrarte, pedirá verificación del correo y luego ya tendrás acceso al laboratorio. 🙂