Hola a todos!  Anteriormente hemos hablado de como instalar Kasten K10 en diversas infraestructuras como AWS EKS, Azure AKS, Google GKE, ya sea mediante autenticación basica o mediante tokens.  En un entorno productivo, lo usual es que nos podamos autenticar mediante algun protocolo de autenticación como OIDC, y algún Identity Provider como LDAP, Amazon, Google, etc.  En este post, veremos como habilitar el acceso a Kasten mediante OIDC y Azure AD como Identity Provider, de manera de poder autenticarnos utilizando un usuario de Azure AD.

NOTA: Si bien este procedimiento fue llevado a cabo utilizando Kasten K10 sobre Azure AKS, esta configuración es perfectamente valida para cualquier instancia Kasten K10, independiente de la plataforma Kubernetes en la que haya sido desplegado.

 


Que necesitamos?

Pues para comenzar porsupuesto necesitamos una subscripción de Azure, y un tenant de Azure AD.

Necesitaremos además un App Registration en Azure Active Directory, el cual utilizaremos como cliente OIDC.  En mi caso tengo un App Registration de tipo single-tenant, llamado “pcerda-sp”


Azure – Configuración de App Registration

En este Azure App Registration, debemos obtener el Application ID, el cual es basicamente el OIDC Client ID que utilizaremos posteriormente.

El siguiente paso será crear un Client Secret, que utilizaremos como client secret.  El valor de éste secret deberemos guardarlo para utilizarlo posteriormente

 

Estos valores, Client ID y Client Secret serán utilizados posteriormente por Kasten K10 para interactuar con el Identity Provider, que en este caso es Azure AD.

A continuación lo que haremos es ir a la sección “Authentication” y añadir la URI que utiliza Kasten para recibir y aceptar el Access Token y ID Token (JWT)por parte de Azure, luego que un usuario se haya autenticado exitosamente.  En  mi caso, la URI de Kasten es “https://kastenaks.vlatam.net/k10/auth-svc/v0/odic/redirect”.

Lo siguiente que debemos hacer es configurar los Group Claims.  Por defecto, Azure AD no incluye información de los grupos en los Access Tokens, por lo que deberemos añadirlo a la configuración.  Si nos vamos a la sección “Token Configuration“, podemos añadir un nuevo Claim haciendo click en “Add optional claim” y seleccionando los tipos de grupo que queramos incluir.  En mi caso utilizaré Security Groups.

 

 


Azure – Usuarios y Grupos

Lo siguiente que debemos definir, son los usuarios y grupos de Azure AD que utilizaremos para conectarnos con nuestra instancia de Kasten K10.  En mi caso, utilizaré mi propio usuario de Azure AD, el cual pertenece a un grupo llamado “kasten” como pueden ver en la siguiente imagen.


Azure – Obtener el endpoint para OIDC

El ultimo paso que debemos dar en Azure, será la de obtener la URL del proveedor OIDC que estamos configurando.  Para esto, nos vamos nuevamente a nuestra App, hacemos click en “Endpoints” y copiamos la dirección que aparece en el punto “OpenID Connect metadata document

Abrimos otro tab en nuestro navegador y utilizamos esta URL.  El dato que necesitamos se encuentra en la sección “Issuer”.  La URL que figura en dicho punto es la que utilizaremos como proveedor OIDC.


Configurar Kasten para utilizar OIDC

En este caso, ya tenemos instalada una instancia Kasten K10 sobre Azure AKS, por lo que los siguientes pasos dan por hecho que Kasten está operativo.

Obtenemos la configuración actual de Kasten con el siguiente comando;

Copy to Clipboard

 

Con dicho comando obtendremos un fichero llamado values.yaml, el cual debemos editar como vemos a continuacion:

Copy to Clipboard

 

Los parametros que modificamos corresponden a:

  • clientID: Application ID que obtuvimos previamente
  • clientSecret: Client Secreat creado en la Azure App
  • groupClaim: Nombre del claim en Azure
  • groupPrefix: Prefijo que se le añadirá a los grupos de Azure AD durante la autenticación
  • providerURL: URL del proveedor OIDC que conseguimos previamente
  • redirectURL: URL de nuestra instancia Kasten

 

Guardamos los cambios, y ejecutamos el siguiente comando para aplicar los cambios en nuestra instancia Kasten

Copy to Clipboard

 

 


Configurar Cluster Role Binding

Si nos conectamos a nuestra instancia Kasten, nos podremos autenticar con nuestro usuario de Azure AD, pero aún no hemos configurado ningún rol a los usuarios de Azure AD, por lo que, como vemos en la siguiente imagen, estamos conectados a Kasten pero con acceso limitado.   Lo que debemos hacer en este punto, es copiar el username que figura en Kasten.  Este username es el object ID de nuestro usuario de Azure AD, con el prefijo configurado previamente durante la configuración OIDC para Kasten.

Luego, nos dirigimos al menu Settings > Support y vemos los detalles del usuario.

En las primeras lineas podemos ver:

  • Username: Usuario de Azure AD con el que nos hemos conectado.  En este caso el Token enviado por Azure incluye el Object ID del usuario y le añade el prefijo.
  • Groups: Los grupos de Azure AD a los que pertenece el usuario, con el prefijo correspondiente según la configuracion OIDC que le hemos dado a Kasten previamente.  En este caso el Token enviado por Azure incluye el Object ID de cada grupo y le añade el prefijo.

 

De hecho, si verificamos el AD Group en Azure como lo hicimos antes, podemos ver el Object ID de cada Grupo de Azure AD al cual pertenece el usuario conectado.

Lo que toca pues es simplemente configurar el Cluster Role Binding en Kubernetes, para permitir que nuestro grupo de Azure AD  tenga acceso a nuestra instancia Kasten.

Copy to Clipboard

 

En este caso estamos aplicando el Cluster Role llamado k10-admin, el cual da privilegios de acceso completo en Kasten, como podemos ver en la siguiente imagen.  Porsupuesto, si lo desean, pueden asignar otros roles a los grupos de Azure AD, dependiendo de los requisitos de acceso de los usuarios, de manera de aplicar el control de acceso basado en roles (RBAC).

 

 

Pues eso sería todo, ya con este podemos acceder a nuestra instancia Kasten utilizando usuarios de Azure AD durante la autenticación.   Nos vemos!!!