<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Antoine BLONDEAU, Author at Clever Cloud</title>
	<atom:link href="https://www.clever.cloud/fr/blog/author/antoine-blondeauclever-cloud-com/feed/" rel="self" type="application/rss+xml" />
	<link></link>
	<description>From Code to Product</description>
	<lastBuildDate>Tue, 05 Aug 2025 09:39:45 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://cdn.clever-cloud.com/uploads/2023/03/cropped-cropped-favicon-32x32.png</url>
	<title>Antoine BLONDEAU, Author at Clever Cloud</title>
	<link></link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Comment déployer Keycloak sur Clever Cloud ?</title>
		<link>https://www.clever.cloud/fr/blog/fonctionnalites/2022/05/11/comment-deployer-keycloak-sur-clever-cloud/</link>
		
		<dc:creator><![CDATA[Antoine BLONDEAU]]></dc:creator>
		<pubDate>Wed, 11 May 2022 06:43:59 +0000</pubDate>
				<category><![CDATA[Fonctionnalités]]></category>
		<category><![CDATA[Engineering]]></category>
		<category><![CDATA[Features]]></category>
		<category><![CDATA[fonctionnalité]]></category>
		<guid isPermaLink="false">https://www.clever-cloud.com/?p=6249</guid>

					<description><![CDATA[<p><img width="1400" height="540" src="https://cdn.clever-cloud.com/uploads/2022/04/banniere-keycloak.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="banniere keycloak" decoding="async" fetchpriority="high" srcset="https://cdn.clever-cloud.com/uploads/2022/04/banniere-keycloak.png 1400w, https://cdn.clever-cloud.com/uploads/2022/04/banniere-keycloak-300x116.png 300w, https://cdn.clever-cloud.com/uploads/2022/04/banniere-keycloak-1024x395.png 1024w, https://cdn.clever-cloud.com/uploads/2022/04/banniere-keycloak-768x296.png 768w, https://cdn.clever-cloud.com/uploads/2022/04/banniere-keycloak-1368x528.png 1368w" sizes="(max-width: 1400px) 100vw, 1400px" /></p><!-- wp:html -->
<div style="background: #ffffff; padding: 1.5rem; border: 1px solid #deddee; border-radius: 4px; margin: auto auto 2rem auto; max-width: var(--wp--style--global--content-size, 710px);">
<div style="display: flex; align-items: center; gap: 1rem; margin-bottom: 1rem;"><span style="font-size: 2rem;">⚡</span>
<h4 style="margin: 0; color: #333; font-weight: bold;">Mise à jour disponible</h4>
</div>
<p><strong>Le processus a été simplifié!</strong> Découvrez notre nouvel add-on Keycloak, facile à déployer, bourré de fonctionnalités.</p>
<div class="push-documentation__content"><a class="button --white-border" href="https://www.clever.cloud/developers/doc/addons/keycloak/">🚀 Découvrez l'add-on Keycloak</a></div>
</div>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Keycloak est un moyen moderne et efficace de gérer les identités et les accès. Il permet l'authentification unique, la fédération d'utilisateurs à travers plusieurs annuaires d'utilisateurs. Il est également compatible avec les protocoles d'authentification standard comme OpenID Connect, OAuth2 ou SAML. Tous les détails sont disponibles <a href="https://www.keycloak.org/" target="_blank" rel="noreferrer noopener">sur son site</a>. Dans ce blogpost, nous verrons les étapes du déploiement de Keycloack et Grafana sur Clever Cloud.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Comment déployer Keycloak ?</h2>
<!-- /wp:heading -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Setup</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Keycloak est écrit en Java, et fournit un fichier JAR dans sa version, ce qui signifie que nous allons utiliser <a href="https://www.clever.cloud/developers/deploy/application/java/java-jar/" target="_blank" rel="noreferrer noopener">un runtime JAVA avec un déploiement JAR</a>. Il nécessite également une <a href="https://www.postgresql.org/" target="_blank" rel="noreferrer noopener">base de données PostgreSQL</a>, ce qui signifie que nous allons déployer un <a href="https://www.clever.cloud/developers/deploy/addon/postgresql/postgresql/">addon PostgreSQL</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="lang-bash"># Get lastest Keycloak release
wget https://github.com/keycloak/keycloak/releases/download/17.0.1/keycloak-17.0.1.zip

# Extract the archive
unzip keycloak-17.0.1.zip

# Go to the folder
cd keycloak-17.0.1

# Create the jar application
clever create --type jar keycloak-server
export KEYCLOAK_DOMAIN=$(clever domain | xargs)

# Create the PG addon
clever addon create postgresql-addon --plan s_sml --addon-version 10 keycloak-postgres

# Link the addon
clever service link-addon keycloak-postgres</code></pre>
<!-- /wp:html -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Configurer</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Pour l'instant, nous allons configurer Keycloak en utilisant des variables d'environnement. Notez que vous pouvez également configurer Keycloak via son CLI ou via un fichier, comme indiqué dans sa <a href="https://www.keycloak.org/server/configuration" target="_blank" rel="noreferrer noopener">documentation</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:quote -->
<blockquote class="wp-block-quote"><!-- wp:paragraph -->
<p><strong>Note</strong> : Pour la configuration via des variables d'environnement, le modèle à utiliser est <code>KC_</code> et le nom en majuscule de toute clé de configuration, séparés par des caractères de soulignement.</p>
<!-- /wp:paragraph --></blockquote>
<!-- /wp:quote -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="lang-bash"># Export env for templating purpose
export $(clever env | sed '/^#/d;s/\"//g')

clever env set CC_JAR_PATH lib/quarkus-run.jar
clever env set CC_JAVA_VERSION 11
clever env set CC_RUN_COMMAND "bin/kc.sh start --auto-build"

clever env set KC_DB postgres
clever env set KC_DB_USERNAME $POSTGRESQL_ADDON_USER
clever env set KC_DB_PASSWORD $POSTGRESQL_ADDON_PASSWORD
clever env set KC_DB_URL "jdbc:postgresql://$POSTGRESQL_ADDON_HOST:$POSTGRESQL_ADDON_PORT/$POSTGRESQL_ADDON_DB"
clever env set KC_HOSTNAME $KEYCLOAK_DOMAIN
clever env set KC_HTTP_ENABLED true
clever env set KC_PROXY passthrough
clever env set KC_PROXY_ADDRESS_FORWARDING true</code></pre>
<!-- /wp:html -->

<!-- wp:quote -->
<blockquote class="wp-block-quote"><!-- wp:paragraph -->
<p><strong>Note: </strong>Envisagez de configurer KC_DB_POOL_MAX_SIZE (Le nombre maximum de connections parallèles a la base de donnée) avec une valeur basse (la valeur par défault est de 100) en fonction de la taille de la base de donnée que vous avez commandé plus tôt. Vous pouvez trouver les limites de connection par taille de base de donnée <a href="https://www.clever.cloud/pricing/#databases">ici</a>. Si vous avez choisi la taille S_SML comme précisé plus tôt dans la commande fournie, vous pouvez ignorer ce message. vous pouvez aussi configurer plus finement le groupe de connection a la base de donnée en utilisant les variable DB_POOL_INITIAL_SIZE et KC_DB_POOL_MIN_SIZE</p>
<!-- /wp:paragraph --></blockquote>
<!-- /wp:quote -->

<!-- wp:paragraph -->
<p>Vous devez maintenant définir <code>KEYCLOAK_ADMIN</code> et <code>KEYCLOAK_ADMIN_PASSWORD</code> :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="lang-bash">clever env set KEYCLOAK_ADMIN &lt;choose an admin username&gt;
clever env set KEYCLOAK_ADMIN_PASSWORD &lt;choose an admin password&gt;</code></pre>
<!-- /wp:html -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Déployer</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Déployer Keycloak sur Clever Cloud :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="lang-bash"># Init a git repository
git init

# Add your files
git add .

# Create the first commit
git commit -m "clever init"

# Deploy the application
clever deploy

# Open Keycloak in your browser
clever open</code></pre>
<!-- /wp:html -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Valider la configuration</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Vous pouvez suivre la documentation de Keycloak <a href="https://www.keycloak.org/getting-started/getting-started-zip#_create_a_realm" target="_blank" rel="noreferrer noopener">en commençant ici</a> pour vous assurer que Keycloak fonctionne comme prévu. Elle vous guidera à travers la création d'un realm (tenant), la création d'un utilisateur et la création/test d'un client.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Créer une configuration initiale de Keycloak</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Dans l'interface utilisateur de Keycloak, assurez-vous de créer un realm appelé "myrealm" (survolez "Master" dans le coin supérieur gauche). Assurez-vous que le realm "<code>myrealm</code>" est sélectionné.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Ensuite, allez dans <strong><em>Utilisateurs &gt; Ajouter un utilisateur</em></strong>. Remplissez les champs Nom d'utilisateur, Email, Prénom et Nom de famille, puis cliquez sur Enregistrer.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Dans l'onglet "credentials" de l'utilisateur, ajoutez le mot de passe de votre choix et <strong>désélectionnez "Temporary", le mot de passe défini</strong>.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>C'est fait ! </p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Un scénario du monde réel</h2>
<!-- /wp:heading -->

<!-- wp:image {"id":6184,"sizeSlug":"full","linkDestination":"none","align":"center"} -->
<figure class="wp-block-image aligncenter size-full"><img src="https://cdn.clever-cloud.com/uploads/2022/04/giphy-1-1.webp" alt="" class="wp-image-6184"/></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>Voyons comment nous pouvons utiliser Keycloak dans le monde réel : comme proxy SSO pour Grafana, en utilisant Oauth 2.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Configurer Grafana sur Clever Cloud</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Si vous avez besoin d'un guide détaillé sur la façon d'utiliser ou de déployer Grafana, veuillez lire <a href="https://www.clever.cloud/fr/blog/features/2021/10/28/grafana-pour-des-metriques-d-applications/">cet article</a>. </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Utilisons <a href="https://github.com/CleverCloud/grafana-example">l'exemple Grafana</a> sur le dépôt Github de Clever Cloud.</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="lang-bash"># Clone the repository
git clone https://github.com/CleverCloud/grafana-example.git

# Enter the directory
cd grafana-example

# Create a NodeJS Application
clever create --type node grafana
export GRAFANA_DOMAIN=$(clever domain | xargs)

# Configure Grafana
clever env set GRAFANA_VERSION 8.5.2
clever env set GRAFANA_PLUGINS "grafana-worldmap-panel"
clever env set GF_PLUGIN_DIR ./data/plugins

clever env set GF_SERVER_HTTP_PORT 8080
clever env set GF_SERVER_ROOT_URL "https://$GRAFANA_DOMAIN"</code></pre>
<!-- /wp:html -->

<!-- wp:quote -->
<blockquote class="wp-block-quote"><!-- wp:paragraph -->
<p><strong>Note</strong> : Dans cette section, vous devez définir vous-même la variable <code>GRAFANA_SHA_256</code>. Vous pouvez trouver la <code>SHA256SUM</code> nécessaire <a href="https://grafana.com/grafana/download/8.5.2?pg=get&amp;plcmt=selfmanaged-box1-cta1&amp;edition=oss" target="_blank" rel="noreferrer noopener">ici</a>, à côté de "Standalone Linux Binaries".</p>
<!-- /wp:paragraph --></blockquote>
<!-- /wp:quote -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="lang-bash">clever env set GRAFANA_SHA_256 &lt;SHA256SUM&gt;</code></pre>
<!-- /wp:html -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Configurer Keycloak pour OAuth 2</h3>
<!-- /wp:heading -->

<!-- wp:quote -->
<blockquote class="wp-block-quote"><!-- wp:paragraph -->
<p><strong>Note</strong> : dans cette section, vous devez remplacer <code>$GRAFANA_DOMAIN</code> par la valeur que vous avez exportée dans la dernière section. Vous pouvez trouver cette valeur en exécutant la commande suivante : <code>clever domain</code>.</p>
<!-- /wp:paragraph --></blockquote>
<!-- /wp:quote -->

<!-- wp:paragraph -->
<p>Dans l'interface utilisateur de Keyloak, allez dans <strong><em>Configurer &gt; Clients &gt; Créer</em></strong>.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Créez un nouveau client avec ces configurations :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="lang-bash">Client ID: $GRAFANA_DOMAIN
Client Protocol: openid-connect
Root URL: https://$GRAFANA_DOMAIN</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Effectuez ensuite ces configurations :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="lang-bash">Access Type: confidentials // The OAuth client must use a client id and secret.
Root URL: ${authBaseUrl}
Valid Redirect URIs: https://$GRAFANA_DOMAIN/login/generic_oauth
Base URL: /login/generic_oauth</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Effacez <strong>Admin URL</strong> et <strong>Web Origins</strong>.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Cliquez sur enregistrer et ouvrez l'onglet <strong>Credentials</strong>. Copiez le secret dans une note séparée, nous en aurons besoin dans les deuxième et troisième parties de ce tutoriel.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Ouvrez l'onglet <strong>Rôles</strong> et cliquez sur <strong>Ajouter un rôle</strong>. Créez un nouveau rôle avec le nom admin. Ce rôle définit le niveau d'accès pour Grafana.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Allez sur l'onglet <strong>Scope</strong> et définissez <strong>Full Scope Allowed</strong> sur OFF. Nous ne voulons pas partager d'autres détails sur le royaume dans le jeton client.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Ensuite, nous allons configurer un mappeur client pour la propriété roles. Nous devons nous assurer que Grafana peut extraire le rôle d'accès à partir du jeton JWT. Ouvrez l'onglet <strong>Mappers</strong> et cliquez sur <strong>Create</strong>. Créez une entrée avec ces options :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="lang-bash"> 
Nom : Roles
Mapper Type : Rôle client utilisateur
ID du client : $GRAFANA_DOMAIN
Nom de la réclamation token : roles
Type JSON de la réclamation : string
</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Enfin, attribuez le rôle client à votre utilisateur Keycloak : <strong><em>Allez dans Utilisateurs &gt; Afficher tous les utilisateurs</em></strong> et cliquez sur l'ID de votre <strong>utilisateur</strong>. Cliquez sur l'onglet <strong>Role Mapping</strong>, puis dans le sélecteur <strong>Client Roles</strong>, sélectionnez <strong><code>$GRAFANA_DOMAIN</code></strong>. Dans la section <strong>Available Roles</strong>, sélectionnez admin et cliquez sur <strong>Add selected</strong>.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Configurer Grafana pour OAuth 2</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Configurez les variables d'environnement appropriées</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="lang-bash"># Configure appropriate env vars
clever env set GF_SERVER_DOMAIN $GRAFANA_DOMAIN
clever env set GF_SERVER_ROOT_URL "https://$GRAFANA_DOMAIN"
clever env set GF_AUTH_GENERIC_OAUTH_ENABLED true
clever env set GF_AUTH_GENERIC_OAUTH_NAME Keycloak
clever env set GF_AUTH_GENERIC_OAUTH_ALLOW_SIGN_UP true
clever env set GF_AUTH_GENERIC_OAUTH_CLIENT_ID $GRAFANA_DOMAIN

clever env set GF_AUTH_GENERIC_OAUTH_SCOPES profile
clever env set GF_AUTH_GENERIC_OAUTH_AUTH_URL "https://$KEYCLOAK_DOMAIN/realms/myrealm/protocol/openid-connect/auth"
clever env set GF_AUTH_GENERIC_OAUTH_TOKEN_URL "https://$KEYCLOAK_DOMAIN/realms/myrealm/protocol/openid-connect/token"
clever env set GF_AUTH_GENERIC_OAUTH_API_URL "https://$KEYCLOAK_DOMAIN/realms/myrealm/protocol/openid-connect/userinfo"
clever env set GF_AUTH_GENERIC_OAUTH_ROLE_ATTRIBUTE_PATH "contains(roles[*], 'admin') &amp;&amp; 'Admin' || contains(roles[*], 'editor') &amp;&amp; 'Editor' || 'Viewer'"</code></pre>
<!-- /wp:html -->

<!-- wp:quote -->
<blockquote class="wp-block-quote"><!-- wp:paragraph -->
<p><strong>Note</strong> : Dans cette section, vous devez définir vous-même <code>GF_AUTH_GENERIC_OAUTH_CLIENT_SECRET</code>, en utilisant la valeur dans Keycloak UI, sous <code>Client &gt; $GRAFANA_URL &gt; Credentials</code></p>
<!-- /wp:paragraph --></blockquote>
<!-- /wp:quote -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="lang-bash">clever env set GF_AUTH_GENERIC_OAUTH_CLIENT_SECRET &lt;KEYCLOAK_CLIENT_SECRET&gt;</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Vous pouvez maintenant déployer Grafana :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="lang-bash"> 
# Deploy grafana
clever deploy

# Open grafana and try the Login with Keycloak button !
clever open
</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Maintenant, cliquez sur login with Keycloak, et utilisez le nom d'utilisateur et le mot de passe que vous avez définis pour l'utilisateur que vous avez créé plus tôt dans Keycloak.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>En utilisant la même procédure décrite précédemment pour créer le premier utilisateur, vous pouvez maintenant créer d'autres utilisateurs et rôles. Créez les rôles "éditeur" et/ou "visualisateur" et attribuez-les à vos nouveaux utilisateurs dans Keycloak. Essayez de vous connecter avec ceux-ci sur Grafana et vous verrez que les rôles sont propagés à Grafana.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Sources :</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li><a href="https://janikvonrotz.ch/2020/08/27/grafana-oauth-with-keycloak-and-how-to-validate-a-jwt-token/">https://janikvonrotz.ch/2020/08/27/grafana-oauth-with-keycloak-and-how-to-validate-a-jwt-token/</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><span style="color: initial;"><a href="https://www.keycloak.org/getting-started/getting-started-zip">https://www.keycloak.org/getting-started/getting-started-zip</a></span></li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->]]></description>
										<content:encoded><![CDATA[<p><img width="1400" height="540" src="https://cdn.clever-cloud.com/uploads/2022/04/banniere-keycloak.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="banniere keycloak" decoding="async" srcset="https://cdn.clever-cloud.com/uploads/2022/04/banniere-keycloak.png 1400w, https://cdn.clever-cloud.com/uploads/2022/04/banniere-keycloak-300x116.png 300w, https://cdn.clever-cloud.com/uploads/2022/04/banniere-keycloak-1024x395.png 1024w, https://cdn.clever-cloud.com/uploads/2022/04/banniere-keycloak-768x296.png 768w, https://cdn.clever-cloud.com/uploads/2022/04/banniere-keycloak-1368x528.png 1368w" sizes="(max-width: 1400px) 100vw, 1400px" /></p><!-- wp:html -->
<div style="background: #ffffff; padding: 1.5rem; border: 1px solid #deddee; border-radius: 4px; margin: auto auto 2rem auto; max-width: var(--wp--style--global--content-size, 710px);">
<div style="display: flex; align-items: center; gap: 1rem; margin-bottom: 1rem;"><span style="font-size: 2rem;">⚡</span>
<h4 style="margin: 0; color: #333; font-weight: bold;">Mise à jour disponible</h4>
</div>
<p><strong>Le processus a été simplifié!</strong> Découvrez notre nouvel add-on Keycloak, facile à déployer, bourré de fonctionnalités.</p>
<div class="push-documentation__content"><a class="button --white-border" href="https://www.clever.cloud/developers/doc/addons/keycloak/">🚀 Découvrez l'add-on Keycloak</a></div>
</div>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Keycloak est un moyen moderne et efficace de gérer les identités et les accès. Il permet l'authentification unique, la fédération d'utilisateurs à travers plusieurs annuaires d'utilisateurs. Il est également compatible avec les protocoles d'authentification standard comme OpenID Connect, OAuth2 ou SAML. Tous les détails sont disponibles <a href="https://www.keycloak.org/" target="_blank" rel="noreferrer noopener">sur son site</a>. Dans ce blogpost, nous verrons les étapes du déploiement de Keycloack et Grafana sur Clever Cloud.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Comment déployer Keycloak ?</h2>
<!-- /wp:heading -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Setup</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Keycloak est écrit en Java, et fournit un fichier JAR dans sa version, ce qui signifie que nous allons utiliser <a href="https://www.clever.cloud/developers/deploy/application/java/java-jar/" target="_blank" rel="noreferrer noopener">un runtime JAVA avec un déploiement JAR</a>. Il nécessite également une <a href="https://www.postgresql.org/" target="_blank" rel="noreferrer noopener">base de données PostgreSQL</a>, ce qui signifie que nous allons déployer un <a href="https://www.clever.cloud/developers/deploy/addon/postgresql/postgresql/">addon PostgreSQL</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="lang-bash"># Get lastest Keycloak release
wget https://github.com/keycloak/keycloak/releases/download/17.0.1/keycloak-17.0.1.zip

# Extract the archive
unzip keycloak-17.0.1.zip

# Go to the folder
cd keycloak-17.0.1

# Create the jar application
clever create --type jar keycloak-server
export KEYCLOAK_DOMAIN=$(clever domain | xargs)

# Create the PG addon
clever addon create postgresql-addon --plan s_sml --addon-version 10 keycloak-postgres

# Link the addon
clever service link-addon keycloak-postgres</code></pre>
<!-- /wp:html -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Configurer</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Pour l'instant, nous allons configurer Keycloak en utilisant des variables d'environnement. Notez que vous pouvez également configurer Keycloak via son CLI ou via un fichier, comme indiqué dans sa <a href="https://www.keycloak.org/server/configuration" target="_blank" rel="noreferrer noopener">documentation</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:quote -->
<blockquote class="wp-block-quote"><!-- wp:paragraph -->
<p><strong>Note</strong> : Pour la configuration via des variables d'environnement, le modèle à utiliser est <code>KC_</code> et le nom en majuscule de toute clé de configuration, séparés par des caractères de soulignement.</p>
<!-- /wp:paragraph --></blockquote>
<!-- /wp:quote -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="lang-bash"># Export env for templating purpose
export $(clever env | sed '/^#/d;s/\"//g')

clever env set CC_JAR_PATH lib/quarkus-run.jar
clever env set CC_JAVA_VERSION 11
clever env set CC_RUN_COMMAND "bin/kc.sh start --auto-build"

clever env set KC_DB postgres
clever env set KC_DB_USERNAME $POSTGRESQL_ADDON_USER
clever env set KC_DB_PASSWORD $POSTGRESQL_ADDON_PASSWORD
clever env set KC_DB_URL "jdbc:postgresql://$POSTGRESQL_ADDON_HOST:$POSTGRESQL_ADDON_PORT/$POSTGRESQL_ADDON_DB"
clever env set KC_HOSTNAME $KEYCLOAK_DOMAIN
clever env set KC_HTTP_ENABLED true
clever env set KC_PROXY passthrough
clever env set KC_PROXY_ADDRESS_FORWARDING true</code></pre>
<!-- /wp:html -->

<!-- wp:quote -->
<blockquote class="wp-block-quote"><!-- wp:paragraph -->
<p><strong>Note: </strong>Envisagez de configurer KC_DB_POOL_MAX_SIZE (Le nombre maximum de connections parallèles a la base de donnée) avec une valeur basse (la valeur par défault est de 100) en fonction de la taille de la base de donnée que vous avez commandé plus tôt. Vous pouvez trouver les limites de connection par taille de base de donnée <a href="https://www.clever.cloud/pricing/#databases">ici</a>. Si vous avez choisi la taille S_SML comme précisé plus tôt dans la commande fournie, vous pouvez ignorer ce message. vous pouvez aussi configurer plus finement le groupe de connection a la base de donnée en utilisant les variable DB_POOL_INITIAL_SIZE et KC_DB_POOL_MIN_SIZE</p>
<!-- /wp:paragraph --></blockquote>
<!-- /wp:quote -->

<!-- wp:paragraph -->
<p>Vous devez maintenant définir <code>KEYCLOAK_ADMIN</code> et <code>KEYCLOAK_ADMIN_PASSWORD</code> :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="lang-bash">clever env set KEYCLOAK_ADMIN &lt;choose an admin username&gt;
clever env set KEYCLOAK_ADMIN_PASSWORD &lt;choose an admin password&gt;</code></pre>
<!-- /wp:html -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Déployer</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Déployer Keycloak sur Clever Cloud :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="lang-bash"># Init a git repository
git init

# Add your files
git add .

# Create the first commit
git commit -m "clever init"

# Deploy the application
clever deploy

# Open Keycloak in your browser
clever open</code></pre>
<!-- /wp:html -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Valider la configuration</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Vous pouvez suivre la documentation de Keycloak <a href="https://www.keycloak.org/getting-started/getting-started-zip#_create_a_realm" target="_blank" rel="noreferrer noopener">en commençant ici</a> pour vous assurer que Keycloak fonctionne comme prévu. Elle vous guidera à travers la création d'un realm (tenant), la création d'un utilisateur et la création/test d'un client.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Créer une configuration initiale de Keycloak</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Dans l'interface utilisateur de Keycloak, assurez-vous de créer un realm appelé "myrealm" (survolez "Master" dans le coin supérieur gauche). Assurez-vous que le realm "<code>myrealm</code>" est sélectionné.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Ensuite, allez dans <strong><em>Utilisateurs &gt; Ajouter un utilisateur</em></strong>. Remplissez les champs Nom d'utilisateur, Email, Prénom et Nom de famille, puis cliquez sur Enregistrer.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Dans l'onglet "credentials" de l'utilisateur, ajoutez le mot de passe de votre choix et <strong>désélectionnez "Temporary", le mot de passe défini</strong>.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>C'est fait ! </p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Un scénario du monde réel</h2>
<!-- /wp:heading -->

<!-- wp:image {"id":6184,"sizeSlug":"full","linkDestination":"none","align":"center"} -->
<figure class="wp-block-image aligncenter size-full"><img src="https://cdn.clever-cloud.com/uploads/2022/04/giphy-1-1.webp" alt="" class="wp-image-6184"/></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>Voyons comment nous pouvons utiliser Keycloak dans le monde réel : comme proxy SSO pour Grafana, en utilisant Oauth 2.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Configurer Grafana sur Clever Cloud</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Si vous avez besoin d'un guide détaillé sur la façon d'utiliser ou de déployer Grafana, veuillez lire <a href="https://www.clever.cloud/fr/blog/features/2021/10/28/grafana-pour-des-metriques-d-applications/">cet article</a>. </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Utilisons <a href="https://github.com/CleverCloud/grafana-example">l'exemple Grafana</a> sur le dépôt Github de Clever Cloud.</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="lang-bash"># Clone the repository
git clone https://github.com/CleverCloud/grafana-example.git

# Enter the directory
cd grafana-example

# Create a NodeJS Application
clever create --type node grafana
export GRAFANA_DOMAIN=$(clever domain | xargs)

# Configure Grafana
clever env set GRAFANA_VERSION 8.5.2
clever env set GRAFANA_PLUGINS "grafana-worldmap-panel"
clever env set GF_PLUGIN_DIR ./data/plugins

clever env set GF_SERVER_HTTP_PORT 8080
clever env set GF_SERVER_ROOT_URL "https://$GRAFANA_DOMAIN"</code></pre>
<!-- /wp:html -->

<!-- wp:quote -->
<blockquote class="wp-block-quote"><!-- wp:paragraph -->
<p><strong>Note</strong> : Dans cette section, vous devez définir vous-même la variable <code>GRAFANA_SHA_256</code>. Vous pouvez trouver la <code>SHA256SUM</code> nécessaire <a href="https://grafana.com/grafana/download/8.5.2?pg=get&amp;plcmt=selfmanaged-box1-cta1&amp;edition=oss" target="_blank" rel="noreferrer noopener">ici</a>, à côté de "Standalone Linux Binaries".</p>
<!-- /wp:paragraph --></blockquote>
<!-- /wp:quote -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="lang-bash">clever env set GRAFANA_SHA_256 &lt;SHA256SUM&gt;</code></pre>
<!-- /wp:html -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Configurer Keycloak pour OAuth 2</h3>
<!-- /wp:heading -->

<!-- wp:quote -->
<blockquote class="wp-block-quote"><!-- wp:paragraph -->
<p><strong>Note</strong> : dans cette section, vous devez remplacer <code>$GRAFANA_DOMAIN</code> par la valeur que vous avez exportée dans la dernière section. Vous pouvez trouver cette valeur en exécutant la commande suivante : <code>clever domain</code>.</p>
<!-- /wp:paragraph --></blockquote>
<!-- /wp:quote -->

<!-- wp:paragraph -->
<p>Dans l'interface utilisateur de Keyloak, allez dans <strong><em>Configurer &gt; Clients &gt; Créer</em></strong>.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Créez un nouveau client avec ces configurations :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="lang-bash">Client ID: $GRAFANA_DOMAIN
Client Protocol: openid-connect
Root URL: https://$GRAFANA_DOMAIN</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Effectuez ensuite ces configurations :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="lang-bash">Access Type: confidentials // The OAuth client must use a client id and secret.
Root URL: ${authBaseUrl}
Valid Redirect URIs: https://$GRAFANA_DOMAIN/login/generic_oauth
Base URL: /login/generic_oauth</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Effacez <strong>Admin URL</strong> et <strong>Web Origins</strong>.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Cliquez sur enregistrer et ouvrez l'onglet <strong>Credentials</strong>. Copiez le secret dans une note séparée, nous en aurons besoin dans les deuxième et troisième parties de ce tutoriel.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Ouvrez l'onglet <strong>Rôles</strong> et cliquez sur <strong>Ajouter un rôle</strong>. Créez un nouveau rôle avec le nom admin. Ce rôle définit le niveau d'accès pour Grafana.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Allez sur l'onglet <strong>Scope</strong> et définissez <strong>Full Scope Allowed</strong> sur OFF. Nous ne voulons pas partager d'autres détails sur le royaume dans le jeton client.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Ensuite, nous allons configurer un mappeur client pour la propriété roles. Nous devons nous assurer que Grafana peut extraire le rôle d'accès à partir du jeton JWT. Ouvrez l'onglet <strong>Mappers</strong> et cliquez sur <strong>Create</strong>. Créez une entrée avec ces options :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="lang-bash"> 
Nom : Roles
Mapper Type : Rôle client utilisateur
ID du client : $GRAFANA_DOMAIN
Nom de la réclamation token : roles
Type JSON de la réclamation : string
</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Enfin, attribuez le rôle client à votre utilisateur Keycloak : <strong><em>Allez dans Utilisateurs &gt; Afficher tous les utilisateurs</em></strong> et cliquez sur l'ID de votre <strong>utilisateur</strong>. Cliquez sur l'onglet <strong>Role Mapping</strong>, puis dans le sélecteur <strong>Client Roles</strong>, sélectionnez <strong><code>$GRAFANA_DOMAIN</code></strong>. Dans la section <strong>Available Roles</strong>, sélectionnez admin et cliquez sur <strong>Add selected</strong>.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Configurer Grafana pour OAuth 2</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Configurez les variables d'environnement appropriées</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="lang-bash"># Configure appropriate env vars
clever env set GF_SERVER_DOMAIN $GRAFANA_DOMAIN
clever env set GF_SERVER_ROOT_URL "https://$GRAFANA_DOMAIN"
clever env set GF_AUTH_GENERIC_OAUTH_ENABLED true
clever env set GF_AUTH_GENERIC_OAUTH_NAME Keycloak
clever env set GF_AUTH_GENERIC_OAUTH_ALLOW_SIGN_UP true
clever env set GF_AUTH_GENERIC_OAUTH_CLIENT_ID $GRAFANA_DOMAIN

clever env set GF_AUTH_GENERIC_OAUTH_SCOPES profile
clever env set GF_AUTH_GENERIC_OAUTH_AUTH_URL "https://$KEYCLOAK_DOMAIN/realms/myrealm/protocol/openid-connect/auth"
clever env set GF_AUTH_GENERIC_OAUTH_TOKEN_URL "https://$KEYCLOAK_DOMAIN/realms/myrealm/protocol/openid-connect/token"
clever env set GF_AUTH_GENERIC_OAUTH_API_URL "https://$KEYCLOAK_DOMAIN/realms/myrealm/protocol/openid-connect/userinfo"
clever env set GF_AUTH_GENERIC_OAUTH_ROLE_ATTRIBUTE_PATH "contains(roles[*], 'admin') &amp;&amp; 'Admin' || contains(roles[*], 'editor') &amp;&amp; 'Editor' || 'Viewer'"</code></pre>
<!-- /wp:html -->

<!-- wp:quote -->
<blockquote class="wp-block-quote"><!-- wp:paragraph -->
<p><strong>Note</strong> : Dans cette section, vous devez définir vous-même <code>GF_AUTH_GENERIC_OAUTH_CLIENT_SECRET</code>, en utilisant la valeur dans Keycloak UI, sous <code>Client &gt; $GRAFANA_URL &gt; Credentials</code></p>
<!-- /wp:paragraph --></blockquote>
<!-- /wp:quote -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="lang-bash">clever env set GF_AUTH_GENERIC_OAUTH_CLIENT_SECRET &lt;KEYCLOAK_CLIENT_SECRET&gt;</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Vous pouvez maintenant déployer Grafana :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="lang-bash"> 
# Deploy grafana
clever deploy

# Open grafana and try the Login with Keycloak button !
clever open
</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Maintenant, cliquez sur login with Keycloak, et utilisez le nom d'utilisateur et le mot de passe que vous avez définis pour l'utilisateur que vous avez créé plus tôt dans Keycloak.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>En utilisant la même procédure décrite précédemment pour créer le premier utilisateur, vous pouvez maintenant créer d'autres utilisateurs et rôles. Créez les rôles "éditeur" et/ou "visualisateur" et attribuez-les à vos nouveaux utilisateurs dans Keycloak. Essayez de vous connecter avec ceux-ci sur Grafana et vous verrez que les rôles sont propagés à Grafana.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Sources :</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li><a href="https://janikvonrotz.ch/2020/08/27/grafana-oauth-with-keycloak-and-how-to-validate-a-jwt-token/">https://janikvonrotz.ch/2020/08/27/grafana-oauth-with-keycloak-and-how-to-validate-a-jwt-token/</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><span style="color: initial;"><a href="https://www.keycloak.org/getting-started/getting-started-zip">https://www.keycloak.org/getting-started/getting-started-zip</a></span></li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
