# Gestion des accès/RBAC Grafana<!-- .element: style="font-size:2em" -->
#### Démo Equipe Monitoring du 13/09/2022
---
# Principe du POC
- On connecte 3 Grafana à Keycloak.<!-- .element: style="font-size:70%" -->
- On crée des utilisateurs avec des rôles Keycloak différents.<!-- .element: style="font-size:70%" -->
- On vérifie dans Grafana quel utilisateur a quel rôle.<!-- .element: style="font-size:70%" -->
- On vérifie les fonctionnalités disponibles dans Grafana selon les rôles.<!-- .element: style="font-size:70%" -->
---
# Comptes utilisateurs
| | grafana-PF1136-1 | grafana-PF1136-2 | grafana-PF1136-3 |
| ------------- | ---------------- | ------------------------- | ------------------------- |
| **pf1136-user-1** | grafana-admin | grafana-viewer | pas de rôle (pas d'accès) |
| **pf1136-user-2** | grafana-viewer | pas de rôle (pas d'accès) | grafana-viewer |
| **pf1136-user-3** | grafana-editor | pas de rôle (pas d'accès) | grafana-bad-role (pas d'accès) |
---
# Configuration Keycloak
Différentes étapes à réaliser dans Keycloak :
- création de clients ;<!-- .element: style="font-size:70%" -->
- création de rôles dans chaque client ;<!-- .element: style="font-size:70%" -->
- créations de mappers dans chaque client ;<!-- .element: style="font-size:70%" -->
- création d'utilisateurs de test ;<!-- .element: style="font-size:70%" -->
- modification *role mapping* pour chaque utilisateur.<!-- .element: style="font-size:70%" -->
---
# Tests d'accès à Grafana
Deux types de tests réalisés :
- accès refusé par Keycloak
- en utilisant la fonctionnalité *authorisation*
- en utilisant l'extension de Keycloak `keycloak-restrict-client-auth`
- accès refusé par Grafana
- en ne donnant aucun rôle Grafana à l'utilisateur connecté
---
# Tests d'accès à Grafana : refus par Keycloak
Fonctionnalité *authorisation* :
- Keycloak vérifie les permissions sur une ressource (policies : user, group, role...) et détermine si l'accès est autorisé ou non ;
- Keycloak indique à Grafana si l'accès est autorisé ou non dans les informations qu'il lui envoie ;
- Grafana (version communautaire) ignore cette information.
Extension Keycloak [sventorben/keycloak-restrict-client-auth](https://github.com/sventorben/keycloak-restrict-client-auth) :
- permet de restreindre l'autorisation des utilisateurs sur les clients ;
- nécessite d'ajouter un fichier à Keycloak puis de lancer un script pour le reconfigurer.
---
# Tests d'accès à Grafana : refus par Grafana
On met `role_attribute_strict=true` dans la configuration de Grafana.
Si l'utilisateur n'a pas de rôle défini dans Keycloak, il n'a pas de rôle dans Grafana.

Donc l'utilisateur se connecte à Grafana mais n'a aucun droit.
---
<!-- .slide: class="prez-slide-tests-roles-grafana" -->
# Tests sur les rôles dans Grafana
<span>Le paramètre `role_attribute_path` de Grafana permet de faire une correspondance entre les rôles dans Keycloak et les rôles dans Grafana.</span><!-- .element: style="font-size:0.6em" -->
```
role_attribute_path = contains(roles[*], 'grafana-admin') && 'Admin'
|| contains(roles[*], 'grafana-editor') && 'Editor'
|| contains(roles[*], 'grafana-viewer') && 'Viewer'
|| 'Reject'
```
| compte | rôle Keycloak | rôle Grafana | Grafana de démo |
| -------- | -------- | -------- | ----- |
| **pf1136-user-1** | grafana-admin | Admin | [Grafana 1](https://grafana.pf-beta.cloudservicesfactory.com/obs-pf1136-1/login) |
| **pf1136-user-3** | grafana-editor | Editor | [Grafana 1](https://grafana.pf-beta.cloudservicesfactory.com/obs-pf1136-1/login) |
| **pf1136-user-2** | grafana-viewer | Viewer | [Grafana 1](https://grafana.pf-beta.cloudservicesfactory.com/obs-pf1136-1/login) [Grafana 3](https://grafana.pf-beta.cloudservicesfactory.com/obs-pf1136-3/login) |
| **pf1136-user-3** | grafana-bad-role | Viewer avec `role_attribute_strict=false`<br />Rejeté avec `role_attribute_strict=true` | [Grafana 3](https://grafana.pf-beta.cloudservicesfactory.com/obs-pf1136-3/login) |
| **pf1136-user-2** | aucun | Viewer avec `role_attribute_strict=false`<br />Rejeté avec `role_attribute_strict=true` | [Grafana 2](https://grafana.pf-beta.cloudservicesfactory.com/obs-pf1136-2/login) |
| **nominatif** | aucun | Viewer avec `role_attribute_strict=false`<br />Rejeté avec `role_attribute_strict=true` | [Grafana 1](https://grafana.pf-beta.cloudservicesfactory.com/obs-pf1136-1/login) |
---
# Fonctionnalités de Grafana selon les rôles
Voir le tableau récapitulatif [Grafana selon les rôles.](https://confluence.corp.cloudwatt.com/pages/viewpage.action?pageId=33878248#Gestiondesacc%C3%A8s/RBACGrafana-Testssurlesfonctionnalit%C3%A9sdeGrafanaselonlesr%C3%B4les)
---
# Conclusion
- Refus d'accès à un Grafana : fonctionnel mais utilisation non instinctive, la solution est plus un moyen de contournement.
- Attribution d'un rôle dans Grafana : fonctionnelle.
- Test seulement sur la fin de la chaîne d'authentification :

<style type="text/css">
p {
font-size: 0.7em;
}
.reveal ul li {
font-size: 0.7em;
}
.reveal ul ul li {
font-size: 0.5em;
}
.reveal section {
text-align: left;
}
}
.reveal h3 {
color: orange;
text-align: center;
border-bottom: 1px solid orange;
font-size: 0.4em;
}
.reveal h1 {
color: orange;
text-align: center;
border-bottom: 1px solid orange;
margin-bottom: 0.4em;
font-size: 1.5em;
}
.reveal table tr th {
font-size: 0.7em;
}
.reveal table tr td {
font-size: 0.5em;
}
.reveal code {
color: aquamarine;
font-size: smaller;
}
.prez-slide-tests-roles-grafana p {
font-size: 0.9em;
margin: 0;
}
.prez-slide-tests-roles-grafana table tr th {
font-size: 0.5em;
}
.prez-slide-tests-roles-grafana table tr td {
font-size: 0.4em;
}
.prez-slide-tests-roles-grafana code {
color: aquamarine;
font-size: 0.6em;
}
.prez-slide-tests-roles-grafana h1 {
font-size: 1.2em;
}
</style>