Comment installer et sécuriser Grafana sur Ubuntu 20.04

L'auteur a choisi le COVID-19 Relief Fund pour recevoir un don dans le cadre du programme Write for DOnations.

Introduction

Grafana est un outil de visualisation et de surveillance de données open-source qui s'intègre à des données complexes provenant de sources telles que Prometheus, InfluxDB, Graphite et ElasticSearch. Grafana vous permet de créer des alertes, des notifications et des filtres ad hoc pour vos données tout en facilitant la collaboration avec vos coéquipiers grâce aux fonctionnalités de partage intégrées.

Dans ce tutoriel, vous allez installer Grafana et le sécuriser avec un certificat SSL et un proxy inverse Nginx. Une fois Grafana mis en place, vous aurez la possibilité de configurer l'authentification des utilisateurs via GitHub, ce qui vous permettra de mieux organiser les autorisations de vos équipes.

Conditions préalables

Pour suivre ce tutoriel, vous aurez besoin de :

  • Un serveur Ubuntu 20.04 configuré en suivant le Guide de configuration initiale du serveur pour Ubuntu 20.04, comprenant un utilisateur non root avec des privilèges sudo et un pare-feu configuré avec ufw.
  • Un nom de domaine entièrement enregistré. Ce tutoriel utilise your_domain tout au long. Vous pouvez acheter un nom de domaine sur Namecheap, en obtenir un gratuitement sur Freenom, ou utiliser le bureau d'enregistrement de domaine de votre choix.
  • Les enregistrements DNS suivants ont été configurés pour votre serveur. Vous pouvez suivre Comment mettre en place un nom d'hôte avec DigitalOcean pour des informations sur la façon de les ajouter.
    • Un enregistrement A avec your_domain pointant sur l'adresse IP publique de votre serveur.
    • Un enregistrement A avec www.your_domain​​​​​​ pointant à l'adresse IP publique de votre serveur.
  • Nginx configuré en suivant le tutoriel Comment installer Nginx sur Ubuntu 20.04, y compris un bloc serveur pour votre domaine.
  • Un bloc serveur Nginx avec Let’s Encrypt configuré, que vous pouvez configurer en suivant Comment sécuriser Nginx avec Let’s Encrypt sur Ubuntu 20.04.
  • En option, pour mettre en place l'authentification GitHub, vous aurez besoin d'un compte GitHub associé à une organisation.

Étape 1 — Installation de Grafana

Au cours de cette première étape, vous allez installer Grafana sur votre serveur Ubuntu 20.04. Vous pouvez installer Grafana soit en le téléchargeant directement à partir de son site web officiel soit en passant par un référentiel APT. Comme un référentiel APT facilite l'installation et la gestion des mises à jour de Grafana, vous utiliserez cette méthode dans ce tutoriel.

Téléchargez la clé GPG de Grafana avec wget, puis acheminez la sortie à apt-key Cela ajoutera la clé à la liste des clés de confiance de votre installation APT, ce qui vous permettra de télécharger et de vérifier le paquet Grafana signé par GPG :

  • wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -

Dans cette commande, l'option -q désactive le message de mise à jour de l'état de wget, et -O génère le fichier que vous avez téléchargé sur le terminal. Ces deux options garantissent que seuls le contenu du fichier téléchargé sont acheminés sur apt-key

Ensuite, ajoutez le référentiel Grafana à vos sources APT :

  • sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main"

Actualisez votre cache APT pour mettre à jour vos listes de paquets :

  • sudo apt update

Vous pouvez maintenant passer à l'installation :

  • sudo apt install grafana

Une fois que Grafana est installé, utilisez systemctl pour démarrer le serveur Grafana :

  • sudo systemctl start grafana-server

Ensuite, vérifiez que Grafana fonctionne en vérifiant l'état du service :

  • sudo systemctl status grafana-server

Vous recevrez un résultat similaire à celui-ci :

Output● grafana-server.service - Grafana instance      Loaded: loaded (/lib/systemd/system/grafana-server.service; disabled; vendor preset: enabled)    Active: active (running) since Thu 2020-05-21 08:08:10 UTC; 4s ago      Docs: http://docs.grafana.org  Main PID: 15982 (grafana-server)     Tasks: 7 (limit: 1137) ... 

Ce résultat contient des informations sur le processus de Grafana, y compris son statut, l'identificateur principal du processus (PID), et plus encore. active (running) montre que le processus fonctionne correctement.

Enfin, activez le service pour démarrer automatiquement Grafana au boot :

  • sudo systemctl enable grafana-server

Vous recevrez le résultat suivant :

OutputSynchronizing state of grafana-server.service with SysV service script with /lib/systemd/systemd-sysv-install. Executing: /lib/systemd/systemd-sysv-install enable grafana-server Created symlink /etc/systemd/system/multi-user.target.wants/grafana-server.service → /usr/lib/systemd/system/grafana-server.service. 

Cela confirme que systemd a créé les liens symboliques nécessaires pour démarrer Grafana automatiquement.

Grafana est maintenant installé et prêt à être utilisé. Ensuite, vous allez sécuriser votre connexion à Grafana avec un proxy inverse et un certificat SSL.

Étape 2 — Configuration du proxy inverse

L'utilisation d'un certificat SSL garantira la sécurisation de vos données en cryptant la connexion à destination et en provenance de Grafana. Mais, pour utiliser cette connexion, vous devrez d'abord reconfigurer Nginx comme proxy inverse pour Grafana.

Ouvrez le fichier de configuration Nginx que vous avez créé lorsque vous avez configuré le bloc serveur Nginx avec Let’s Encrypt dans les Conditions préalables. Vous pouvez utiliser n'importe quel éditeur de texte, mais pour ce tutoriel, nous utiliserons nano :

  • sudo nano /etc/nginx/sites-available/your_domain

Localisez le bloc suivant :

/etc/nginx/sites-available/your_domain

...     location / {         try_files $uri $uri/ =404;     } ... 

Comme vous avez déjà configuré Nginx pour communiquer via SSL et que tout trafic web vers votre serveur passe déjà par Nginx, vous n'avez qu'à indiquer à Nginx de transmettre toutes les requêtes à Grafana, qui fonctionne sur le port 3000 par défaut.

Supprimez la ligne try_files existante dans ce bloc de localisation et remplacez-le par l'option proxy_pass :

/etc/nginx/sites-available/your_domain

...     location / {         proxy_pass http://localhost:3000;     } ... 

Ceci fera correspondre le proxy au port approprié. Une fois que vous avez terminé, enregistrez et fermez le fichier en appuyant sur CTRL+X, Y, puis ENTER si vous utilisez nano.

Maintenant, testez les nouveaux paramètres pour vous assurer que tout est configuré correctement :

  • sudo nginx -t

Vous recevrez le résultat suivant :

Outputnginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful 

Enfin, activez les modifications en rechargeant Nginx :

  • sudo systemctl reload nginx

Vous pouvez maintenant accéder à l'écran de connexion Grafana par défaut en pointant votre navigateur web sur https://your_domain. Si vous ne parvenez pas à joindre Grafana, vérifiez que votre pare-feu est configuré pour autoriser le trafic sur le port 443 et ensuite retracez les instructions précédentes.

La connexion à Grafana étant cryptée, vous pouvez maintenant mettre en place des mesures de sécurité supplémentaires, en commençant par changer les identifiants administratifs par défaut de Grafana.

Étape 3 — Mise à jour des identifiants

Comme chaque installation Grafana utilise les mêmes identifiants administratifs par défaut, il est préférable de changer vos informations de connexion dès que possible. Au cours de cette étape, vous allez mettre à jour les identifiants pour améliorer la sécurité.

Commencez par aller sur https://your_domain à partir de votre navigateur web. Cela fera apparaître l'écran de connexion par défaut où vous verrez le logo Grafana, un formulaire vous demandant de saisir une adresse e-mail (ou un nom d'utilisateur) et un mot de passe, un bouton de connexion et un lien Mot de passe oublié ?.

Connexion à Grafana

Entrez admin dans les champs Email ou nom d'utilisateur et Mot de passe puis cliquez sur le Bouton Connexion.

À l'écran suivant, vous serez invité à mieux sécuriser votre compte en changeant le mot de passe par défaut :

Changer de mot de passe

Entrez le mot de passe que vous souhaitez commencer à utiliser dans les champs Nouveau mot de passe et Confirmez le nouveau mot de passe.

À partir de là, vous pouvez cliquer sur Envoyer pour enregistrer les nouvelles informations ou appuyez sur Passer pour sauter cette étape. Si vous sautez, vous serez invité à changer le mot de passe la prochaine fois que vous vous connecterez.

Pour augmenter la sécurité de votre configuration Grafana, cliquez sur Envoyer. Vous accédez au tableau de bord Bienvenue à Grafana :

Tableau de bord d'accueil

Vous avez maintenant sécurisé votre compte en changeant les identifiants par défaut. Ensuite, vous allez apporter des modifications à votre configuration Grafana pour que personne ne puisse créer un nouveau compte Grafana sans votre permission.

Étape 4 — Désactiver les enregistrements et l'accès anonyme à Grafana

Grafana offre des options qui permettent aux visiteurs de créer des comptes d'utilisateurs pour eux-mêmes et de prévisualiser les tableaux de bord sans s'enregistrer. Lorsque Grafana n'est pas accessible via Internet ou lorsque vous travaillez avec des données accessibles au public comme des statuts du service, vous pouvez vouloir autoriser ces fonctionnalités. Cependant, lorsque vous utilisez Grafana en ligne pour travailler avec des données sensibles, l'accès anonyme peut poser un problème de sécurité. Pour résoudre ce problème, modifiez la configuration de Grafana.

Commencez par ouvrir le fichier de configuration principal de Grafana pour l'éditer :

  • sudo nano /etc/grafana/grafana.ini

Localisez la directive suivante allow_sign_up sous le titre [users] :

/etc/grafana/grafana.ini

... [users] # disable user signup / registration ;allow_sign_up = true ... 

Activer cette directive avec true ajoute un bouton Sign up à l'écran de connexion ce qui permet aux utilisateurs de s'enregistrer et d'accéder à Grafana.

Désactiver cette directive avec false supprime le bouton Sign up et renforce la sécurité et la confidentialité de Grafana.

Décommentez cette directive en supprimant le ; au début de la ligne puis en réglant l'option sur false :

/etc/grafana/grafana.ini

... [users] # disable user signup / registration allow_sign_up = false ... 

Ensuite, localisez la directive enabled suivante sous le titre [auth.anonymous] :

/etc/grafana/grafana.ini

... [auth.anonymous] # enable anonymous access ;enabled = false ... 

Définir enabled sur true donne aux utilisateurs non enregistrés accès à vos tableaux de bord; définir cette option sur false limite l'accès du tableau de bord aux utilisateurs enregistrés seulement.

Décommentez cette directive en supprimant le ; au début de la ligne puis en réglant l'option sur false.

/etc/grafana/grafana.ini

... [auth.anonymous] # enable anonymous access enabled = false ... 

Sauvegardez le fichier et quittez votre éditeur de texte.

Pour activer les changements, redémarrez Grafana :

  • sudo systemctl restart grafana-server

Vérifiez que tout fonctionne en vérifiant le statut service de Grafana :

  • sudo systemctl status grafana-server

Comme auparavant, le résultat fera rapport que Grafana est actif (en cours d'exécution).

Maintenant, pointez votre navigateur web sur https://your_domain. Pour revenir à l'écran d'inscription, amenez votre curseur sur votre avatar en bas à gauche de l'écran et cliquez sur l'option Déconnexion qui apparaît.

Une fois que vous vous êtes déconnecté, vérifiez qu'il n'y a pas de bouton Sign up et que vous ne pouvez pas vous connecter sans saisir des identifiants de connexion.

À ce stade, Grafana est entièrement configuré et prêt à être utilisé. Ensuite, vous pouvez simplifier le processus de connexion pour votre organisation en vous authentifiant via GitHub.

(Facultatif) Étape 5 — Configuration d'une application GitHub OAuth

Pour une approche alternative a l'ouverture de session, vous pouvez configurer Grafana pour une authentification via GitHub, ce qui permet un accès à tous les membres des organisations GitHub autorisées. Cela peut s'avérer particulièrement utile lorsque vous souhaitez autoriser plusieurs développeurs à collaborer et accéder aux mesures sans avoir à créer des identifiants spécifiques à Grafana.

Commencez par vous connecter à un compte GitHub associé à votre organisation puis naviguez sur votre page profil GitHub à l'adresse https://github.com/settings/profile.

Changez le contexte de paramétrage en cliquant sur votre nom dans la partie gauche de l'écran, puis en sélectionnant votre organisation dans le menu déroulant. Cela changera le contexte des paramètres personnels aux paramètres de l'organization.

À l'écran suivant, vous verrez votre profil d'organisation où vous pouvez changer des paramètres comme votre nom d'affichage de l'organization, votre Email d'organisation et votre URL d'organisation.

Comme Grafana utilise OAuth — une norme ouverte ouvert permettant à des tiers distants d'accéder à des ressources locales — ; pour authentifier des utilisateurs via GitHub, vous devrez créer une nouvelle application OAuth dans GitHub.

Cliquez sur le lien OAuth Apps sous Paramètres du développeur sur le côté inférieur gauche de l'écran.

Si vous n'avez pas encore d'applications OAuth associées à votre organisation sur GitHub, vous serez informé qu'il n'y a pas d'applications détenue par votre organisation. Sinon, vous verrez une liste des applications OAuth déjà connectées à votre compte.

Cliquez sur le bouton New OAuth App pour continuer.

À l'écran suivant, remplissez les détails suivants sur votre installation Grafana :

  • Nom de l'application – Cela vous permet de distinguer vos différentes applications OAuth les unes des autres.
  • URL de la page d'accueil – Cela indique à GitHub où trouver Grafana. Tapez https://your_domain dans ce champ, en remplaçant your_domain par votre domaine.
  • Description de l'application – Ceci fournit une description de l'objet de votre application OAuth.
  • URL de callback de l'application – Il s'agit de l'adresse où les utilisateurs seront envoyés une fois authentifiés avec succès. Pour Grafana, ce champ doit être défini sur https://your_domain/login/github.

Gardez à l'esprit que les utilisateurs de Grafana qui se connectent via GitHub verront les valeurs que vous avez saisies dans les trois premiers champs précédents, alors assurez-vous de saisir quelque chose de significatif et approprié.

Une fois terminé, le formulaire ressemblera à ceci :

GitHub Register OAuth Application

Cliquez sur le bouton vert Enregistrer l'application

Vous allez maintenant être redirigé vers une page contenant l’ID Client et le secret Client associé à votre nouvelle application OAuth. Notez les deux valeurs, car vous devrez les ajouter au fichier de configuration principal de Grafana pour compléter la configuration.

Avertissement : Veillez à garder votre ID Client et votre secret Client dans un endroit sécurisé et non public, car ils peuvent être utilisés comme base d'une attaque.

Avec votre application GitHub OAuth créée, vous êtes maintenant prêt à reconfigurer Grafana pour utiliser GitHub pour l'authentification.

(Facultatif) Étape 6 — Configuration de Grafana comme application GitHub OAuth

Pour terminer l'authentification GitHub pour votre configuration Grafana, vous allez maintenant apporter quelques modifications à vos fichiers de configuration Grafana.

Pour commencer, ouvrez le fichier de configuration principal de Grafana.

  • sudo nano /etc/grafana/grafana.ini

Localisez le titre [auth.github] et décommentez cette section en supprimant le ; au début de chaque ligne sauf ;allowed_domains = et ;team_ids =, qui ne sera pas modifié dans ce tutoriel.

Ensuite, procédez aux modifications suivantes :

  • Définissez enabled et allow_sign_up sur true. Cela activera l'Authentification GitHub et permettra aux membres de l'organisation autorisée de créer eux-mêmes des comptes. Notez que ce paramètre est différent de la propriété allow_sign_up sous [users] que vous avez changé à l’étape 4.
  • Définissez client_id et client_secret sur les valeurs que vous avez obtenues lors de la création de votre application GitHub OAuth.
  • Définissez allowed_organizations sur le nom de votre organisation pour vous assurer que seuls les membres de votre organisation peuvent s'inscrire et se connecter à Grafana.

La configuration complète ressemblera à ceci :

/etc/grafana/grafana.ini

... [auth.github] enabled = true allow_sign_up = true client_id = your_client_id_from_github client_secret = your_client_secret_from_github scopes = user:email,read:org auth_url = https://github.com/login/oauth/authorize token_url = https://github.com/login/oauth/access_token api_url = https://api.github.com/user ;allowed_domains = ;team_ids = allowed_organizations = your_organization_name ... 

Vous avez maintenant dit à Grafana tout ce dont elle a besoin de savoir sur GitHub. Pour terminer la configuration, vous devrez activer les redirections derrière un proxy inverse. Cela set fait en réglant une valeur root_url sous le titre [serveur].

/etc/grafana/grafana.ini

... [server] root_url = https://your_domain ... 

Sauvegardez votre configuration et fermez le fichier.

Ensuite, redémarrez Grafana pour activer les changements :

  • sudo systemctl restart grafana-server

Enfin, vérifiez que le service est opérationnel.

  • sudo systemctl status grafana-server

La sortie indiquera que le service est actif (en cours d'exécution).

Maintenant, testez votre nouveau système d'authentification vous rendant sur https://your_domain. Si vous êtes déjà connecté à Grafana, passez votre souris sur l'avatar dans le coin inférieur gauche de l'écran, puis cliquez sur Déconnexion dans le menu secondaire qui apparaît à côté de votre nom.

Sur la page de connexion vous verrez une nouvelle section sous le bouton Connexion original qui comprend un bouton Connexion avec GitHub avec le logo GitHub.

Page de connexion Grafana avec GitHub

Cliquez sur le bouton Connexion avec GitHub pour être redirigé vers GitHub, où vous allez vous connecter à votre compte GitHub et confirmerez votre intention d’autoriser Grafana.

Cliquez sur le bouton vert Autoriser your_github_organization.

Remarque : assurez-vous que votre compte GitHub soit membre de votre organisation approuvée et que votre adresse électronique Grafana correspond à votre adresse électronique GitHub. Si vous essayez de vous authentifier avec un compte GitHub qui n'est pas membre de votre organisation approuvée, vous obtiendrez un message Login Failed vous disant l'Utilisateur n'est pas membre de l'une des organisations requises.

Vous allez maintenant être connecté à votre compte Grafana existant. Si un compte Grafana n'existe pas encore pour l'utilisateur sous lequel vous vous êtes connecté, Grafana créera un nouveau compte utilisateur avec des autorisations Viewer, afin que les nouveaux utilisateurs ne puissent utiliser que les tableaux de bord existants.

Pour changer les autorisations par défaut pour les nouveaux utilisateurs, ouvrez le fichier de configuration principal de Grafana pour l'éditer.

  • sudo nano /etc/grafana/grafana.ini

Localisez la directive auto_assign_org_role sous le titre [users], et décommentez le paramètre en supprimant le ; au début de la ligne.

Définissez la directive sur l'une des valeurs suivantes :

  • Viewer — ne peut utiliser que les tableaux de bord existants
  • Editor — peut utiliser, modifier et ajouter des tableaux de bord
  • Admin — a la permission de tout faire

Ce tutoriel réglera l'assigner automatique sur Viewer :

/etc/grafana/grafana.ini

... [users] ... auto_assign_org_role = Viewer ... 

Une fois que vous avez enregistré vos modifications, fermez le fichier et redémarrez Grafana :

  • sudo systemctl restart grafana-server

Vérifiez l'état du service :

  • sudo systemctl status grafana-server

Comme auparavant, le statut lira actif (en cours d'exécution).

À ce stade, vous avez entièrement configuré Grafana pour autoriser des membres de votre organisation GitHub à s'enregistrer et utiliser votre installation Grafana.

Conclusion

Dans ce tutoriel, vous avez installé, configuré et sécurisé Grafana, et vous avez également appris à autoriser les membres de votre organisation à s'authentifier via GitHub.

Pour étendre votre installation Grafana actuelle, consultez la liste des tableaux de bord et des plugins officiels et de la communauté. Pour en savoir plus sur l'utilisation de Grafana en général, consultez la documentation officielle de Grafana, ou consultez nos autres tutoriels de surveillance.