Grafana Grafana

Configurer l'authentification et les accès par la configuration

Configurez la connexion, OAuth et le mappage des rôles dans grafana.ini, et gérez utilisateurs et équipes comme du code.

12 min Intermédiaire

Qui peut se connecter, et avec quel rôle, fait partie de la plateforme et mérite autant que les tableaux de bord d’être sous gestion de versions. L’essentiel se trouve dans grafana.ini. Le reste, comme les utilisateurs, les équipes et les comptes de service, n’a pas de format de fichier de provisionnement ; ce guide montre donc aussi comment les gérer comme du code. Les noms d’options ci-dessous correspondent à la référence de configuration de Grafana, mais vérifiez-les dans defaults.ini pour votre version avant de vous y fier.

Paramètres de base

[users]
allow_sign_up = false          # pas d'auto-inscription
auto_assign_org = true
auto_assign_org_role = Viewer  # rôle par défaut des nouveaux utilisateurs

[auth]
disable_login_form = false     # passez à true une fois le SSO fonctionnel et le formulaire inutile

[auth.anonymous]
enabled = false

Gardez allow_sign_up = false sauf si vous voulez délibérément une instance ouverte. Si vous activez l’accès anonyme, donnez-lui le rôle le moins privilégié possible :

[auth.anonymous]
enabled = true
org_role = Viewer

Authentification unique avec generic OAuth

Tout fournisseur OpenID Connect ou OAuth 2 peut être branché dans le fichier. Les secrets viennent de l’environnement :

[server]
root_url = https://grafana.example.com/

[auth.generic_oauth]
enabled = true
name = Company SSO
allow_sign_up = true
client_id = grafana
client_secret = ${OAUTH_CLIENT_SECRET}
scopes = openid profile email groups
auth_url = https://sso.example.com/oauth2/authorize
token_url = https://sso.example.com/oauth2/token
api_url = https://sso.example.com/oauth2/userinfo
login_attribute_path = preferred_username
email_attribute_path = email
role_attribute_path = contains(groups[*], 'grafana-admins') && 'Admin' || contains(groups[*], 'grafana-editors') && 'Editor' || 'Viewer'

À savoir :

  • L’URI de redirection du fournisseur est <root_url>login/generic_oauth, donc root_url doit être exact.
  • role_attribute_path est une expression JMESPath évaluée sur le jeton ou le userinfo de l’utilisateur. Elle associe les groupes du fournisseur d’identité aux rôles Grafana (Admin, Editor, Viewer), de sorte que les changements de rôle se font dans le fournisseur d’identité, pas dans Grafana.
  • allow_sign_up signifie ici « créer un utilisateur Grafana à la première connexion SSO », ce que vous voulez même lorsque [users] allow_sign_up est à false.
  • Des sections dédiées existent pour les fournisseurs courants ([auth.github], [auth.google], [auth.azuread], [auth.gitlab], et d’autres), et SAML et LDAP sont disponibles dans Grafana Enterprise et Grafana Cloud. LDAP lit aussi un fichier ldap.toml distinct.

Une fois le SSO opérationnel, définissez disable_login_form = true et gardez le compte admin uniquement comme accès de secours (break-glass), ou laissez le formulaire activé mais protégez-le par des règles réseau.

Rôles et ce que les fichiers ne peuvent pas définir

Grafana a des rôles d’organisation (Admin, Editor, Viewer), et le RBAC ajoute des rôles fins dans Enterprise et Cloud. Ces ressources n’ont aucun format de fichier de provisionnement dans Grafana open source :

RessourceComment la gérer comme du code
UtilisateursCréation via le SSO, ou l’API Admin dans un script d’amorçage
Équipes et appartenance aux équipesTerraform (grafana_team), l’API, ou la synchronisation d’équipes depuis le fournisseur d’identité
OrganisationsTerraform (grafana_organization) ou l’API
Comptes de service et jetonsTerraform (grafana_service_account, grafana_service_account_token) ou l’API
Permissions des dossiers et des tableaux de bordTerraform (grafana_folder_permission, grafana_dashboard_permission), l’Operator ou l’API

Le guide Terraform montre le modèle. Pour une petite installation, un script ponctuel qui appelle l’API HTTP avec un identifiant admin, conservé dans le dépôt et exécuté en CI, est une alternative raisonnable.

Amorcer des comptes de service pour l’automatisation

Des outils comme Terraform, l’Operator et la CI ont besoin d’une identité non humaine. Créez un compte de service une seule fois, avec le rôle le plus bas qui fonctionne, et stockez son jeton comme secret :

# créer le compte de service (API Admin, authentification basique)
curl -s -X POST -u admin:$GRAFANA_ADMIN_PASSWORD \
  -H 'Content-Type: application/json' \
  -d '{"name":"terraform","role":"Admin"}' \
  http://localhost:3000/api/serviceaccounts

# créer un jeton pour ce compte, avec l'id renvoyé ci-dessus
curl -s -X POST -u admin:$GRAFANA_ADMIN_PASSWORD \
  -H 'Content-Type: application/json' \
  -d '{"name":"terraform-token"}' \
  http://localhost:3000/api/serviceaccounts/<id>/tokens

Le jeton n’est affiché qu’une fois. Placez-le directement dans votre magasin de secrets, et définissez une expiration ou faites-le tourner selon un calendrier.

Paramètres de durcissement à commiter

[security]
cookie_secure = true
cookie_samesite = lax
disable_gravatar = true
allow_embedding = false

[auth]
login_maximum_lifetime_duration = 30d
login_maximum_inactive_lifetime_duration = 7d

Relisez-les à chaque mise à niveau, et gardez-les identiques entre les environnements sauf lorsqu’une valeur diffère réellement, comme root_url.

Vérifier sans l’interface

curl -s -u admin:$GRAFANA_ADMIN_PASSWORD http://localhost:3000/api/admin/settings | jq '."auth.generic_oauth" | {enabled, name}'
curl -s -u admin:$GRAFANA_ADMIN_PASSWORD http://localhost:3000/api/users | jq '.[] | {login, isAdmin}'
curl -s -u admin:$GRAFANA_ADMIN_PASSWORD http://localhost:3000/api/teams/search | jq '.teams[].name'

Pour la liste complète des options par fournisseur, consultez la documentation d’authentification de Grafana.

Guides populaires