Keycloak – configuration et usage

Keycloak est un logiciel à code source ouvert permettant d’instaurer une méthode d’authentification unique à travers la gestion par identité et par accès. Il est idéal pour fédérer vos sources d’authentification.

Ajout des administrateurs keycloak depuis Active Directory

Tout d’abord, on va accorder l’authentification admin pour un groupe donné. Pour cela, on doit utiliser le « realm » master et leur accorder le rôle « admin » sur le groupe souhaité.

On va se connecter à la console d’Administration de votre keycloak avec le compte « admin » local que vous avez créé lors de l’installation :

Dans « User Federation », on ajoute un nouveau provider.

On ajoute les paramètres pour interroger votre serveur Active Directory comme le sAMAccountName (en fonction de votre configuration AD) et votre domaine interne AD en question où répondent vos serveurs Active Directory. Dans notre exemple, on ne va prendre que les utilisateurs présents dans l’OU « Comptes Administrateurs » :

Après avoir validé et sauver les paramètres, on clique ensuite sur « Synchronize all users » en bas de la page :

On va maintenant « mapper » les groupes du domaine, pour cela on clique sur l’onglet « Mappers » :

Puis on clique sur « Create » pour créer un nouveau mapper. On va indiquer les paramètres nécessaires à la récupération de l’ensemble des groupes AD. La possibilité d’avoir plusieurs groupes parents n’étant pas possible sous keycloak, je vous conseille de désactiver l’option « Preserve Group Inheritance » sinon vous aurez un message du type « Group ‘Exchange Servers’ detected to have multiple parents. . This is not allowed in Keycloak. » :

Une fois la configuration sauvegardée, vous pouvez lancer la synchronisation des groupes en cliquant sur « Sync LDAP Groups To Keycloak » :

Ajout du rôle « admin » au groupe AD souhaité

Toujours dans le realm « master », il suffit d’aller dans « Manage » Puis « Groups », de sélectionner le groupe voulu (ici « Administrateurs ») puis dans « Role Mappings », de sélectionner le rôle « admin » :

Vous pourrez alors vous connecter avec un des membres de ce groupe à la console d’administration :

Ajout nouveau REALM pour votre domaine

Pour ajouter une fédération d’identité sur votre domaine pour vos utilisateurs, on va créer un nouveau realm du nom de votre domaine (votredomaine.fr par exemple) :

Ajout des sources d’authentification (providers)

Une fois le domaine créé, on fait la même chose que précédemment, c’est à dire ajouter les providers et les groupes. Par exemple pour Active Directory :

On ajoute aussi le mapper de groupe comme indiqué précédemment. Et c’est tout, vous avez une fédération d’identié potentiellement fonctionnelle sur votre domaine !

Cas d’usage simple : ajout authentification pour grafana

On va aller dans « Clients » puis créer un nouveau client « grafana » :

Client ID: grafana.votredomaine.fr
Client Protocol: openid-connect
Root URL: http://grafana.votredomaine.fr
Access Type: confidentials // The OAuth client must use a client id and secret.
Root URL: ${authBaseUrl}
Valid Redirect URIs: https://grafana.votredomaine.fr/login/generic_oauth
Base URL: /login/generic_oauth
Vider Admin URL and Web Origins.

Ensuite on va aller dans « Credentials » et copier le secret généré et l’enregistrer quelque part, vous en aurez besoin côté grafana :

Pour obtenir les informations de vos « endpoints » pour le realm en question, vous pouvez les retrouver dans les liens « OpenID Endpoint Configuration » et « SAML 2.0 Identity Provider Metadata » dans « Realm Settings » :

Configuration dans grafana (grafana.ini)

On va indiquer les paramètres nécessaires dans /etc/grafana/grafana.ini :

[auth.generic_oauth]
enabled = true
name = keycloak
client_id = grafana
client_secret = EUEvxt2IY7VSNfOMoYA7qGeeCOyALSw3
scopes = profile
auth_url = https://keycloak.votredomaine.fr/realms/votredomaine.fr/protocol/openid-connect/auth
token_url = https://keycloak.votredomaine.fr/realms/votredomaine.fr/protocol/openid-connect/token
api_url = https://keycloak.votredomaine.fr/realms/votredomaine.fr/protocol/openid-connect/userinfo
;allowed_domains =
tls_skip_verify_insecure = true

Après avoir ajouté les paramètres en question dans le fichier de configuration de grafana, on redémarre le service :

systemctl restart grafana-server

Vous pouvez alors vous connecter sous grafana avec votre nouveau provider « keycloak » :

Ce n’est qu’un exemple basique, on peut faire des choses bien plus complexes comme ajouter des roles et des mappers pour associer des groupes ou des utilisateurs aux différents rôles disponibles dans grafana : viewer, editor et admin.