Keycloak: Autenticación de usuarios en AWS vía SAML

En este post, vamos a ver como utilizar Keycloak como IDP para AWS autenticando los usuarios mediante el protocolo SAML. Esto es muy interesante para no tener que gestionar usuarios locales de AWS, si no que todos ellos pertenezcan a un servicio de gestión de usuarios externos, por ejemplo Google, Active directory, LDAP… Del modo que cuando se de de baja el usuario, pierda el acceso al resto de plataformas.

La implementación es bastante sencilla. Solo necesitaremos un Keycloak y una cuenta de AWS con acceso de Administrador.

Keycloak

Crear un Cliente nuevo

Crear un cliente nuevo para la conexión contra AWS en el Realm AWS que habremos creado previamente.

Antes que nada, hay que descargar el XML de AWS desde aquí.

Una vez creado el cliente, hay que configurarlo

Hay que editar los siguientes parámetros:
Base URL: /auth/realms/<REALM>/protocol/saml/clients/amazon-aws
IDP Initiated SSO URL Name: amazon-aws

Una vez hecho esto, hay que darle a Save y deshabilitar el parámetro Full Scoped Allowed en la pestaña de Scope del cliente

Descargar metadata de SAML

Ahora, vamos a descargar el metadata del endopoint de SAML para posteriormente añadirla en AWS.

Lo que nos de, tenemos que guardarlo en un fichero que se llame AWS-Keycloak.xml

AWS

Crear el identity provider

Para esto, tenemos que ir AWS a la sección de IAM y a Identity providers

  • Seleccionar el provider de tipo SAML
  • Darle un nombre
  • Seleccionar el XML que previamente nos hemos descargado de Keycloak

Una vez creado, si accedemos a el nos dará la siguiente información

Aquí es importante el ARN del provider que lo necesitaremos luego.

Roles

Ahora, vamos a generar el role que utilizaremos para conectarnos a AWS. En este caso, será un role de solo lectura. Esto también está en la sección de IAM

Y como hemos hecho antes con el identity provider, nos tenemos que quedar con el ARN

Keycloak

Roles

Ahora, vamos a añadir en el Client que hemos creado, un role nuevo. Aquí se pueden añadir tantos como se quieran (siempre que se hayan creado en AWS). A la hora de autenticarnos, nos pedirá que role queremos seleccionar.

El nombre del role tiene que ser de la siguiente forma: ARN_DEL_ROLE,ARN_DEL_IDENTITY_PROVIDER

Mappers

Para este cliente, hay que crear 3 Mappers diferentes

Mapper 1

  • Name: Session Role
  • Mapper Type: Role list
  • Role attribute name: https://aws.amazon.com/SAML/Attributes/Role
  • Friendly Name: Session Role
  • SAML Attribute NameFormat: Basic

Mapper 2

  • Name: Session Name
  • Mapper Type: User Property
  • Property: username
  • Friendly Name: Session Name
  • SAML Attribute Name: https://aws.amazon.com/SAML/Attributes/RoleSessionName
  • SAML Attribute NameFormat: Basic

Mapper 3

  • Name: Session Duration
  • Mapper Type: Hardcoded attribute
  • Friendly Name: Session Duration
  • SAML Attribute Name: https://aws.amazon.com/SAML/Attributes/SessionDuration
  • SAML Attribute NameFormat: Basic
  • Attribute value: 3600

Groups

Vamos a crear un grupo nuevo para que todos los usuarios que se añadan a este, tengan los permisos del role que hemos creado.

Y mappeamos el role que hemos creado antes.

Usuarios

Vamos a generar un usuario de pruebas para ver que todo funciona correctamente

Una vez creado el usuario, hay que ir a la pestaña de Groups y añadir el grupo que hemos creado

Y por último, añadirle una contraseña

Test

Para probar que todo funciona correctamente, tenemos que abrir la siguiente URL que nos llevará al login de Keycloak y este nos redirigirá a la consola de AWS

https://<KEYCLOAK_URL>/auth/realms/<REALM>/protocol/saml/clients/amazon-aws

Example:
https://keycloak.example.com/auth/realms/AWS/protocol/saml/clients/amazon-aws

Y nos autenticará con el usuario de Keycloak:

En el caso de que se hayan añadido mas de un role, al iniciar sesión con el usuario, nos dirá cual seleccionar:

 

Y en el caso de que tengamos roles con diferentes cuentas, nos saldrá algo así:

Bibliografía

https://medium.com/@karanbir.tech/aws-connect-saml-based-identity-provider-using-keycloak-9b3e6d0111e6


Also published on Medium.

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *