Blog ENI : Toute la veille numérique !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
💥 Les 22 & 23 novembre : Accès 100% GRATUIT
à la Bibliothèque Numérique ENI. Je m'inscris !
  1. Livres et vidéos
  2. Prometheus et Grafana
  3. Protection des accès
Extrait - Prometheus et Grafana Surveillez vos applications et composants système
Extraits du livre
Prometheus et Grafana Surveillez vos applications et composants système
2 avis
Revenir à la page d'achat du livre

Protection des accès

Objectifs du chapitre et prérequis

1. Contexte et prérequis

Ce chapitre sera consacré à l’exposition de Prometheus et Grafana au travers d’un proxy inverse ainsi qu’à la mise en place de protections des accès sur une machine virtuelle classique.

Tout comme pour le précédent chapitre, les instructions sont réalisées manuellement. N’hésitez pas à faire appel à un outil d’automatisation comme Ansible pour simplifier les actions.

2. Fichiers téléchargeables

Vous pouvez récupérer les exemples sur le repository GitHub suivant : https://github.com/EditionsENI/prometheus-grafana

Vous pouvez également récupérer ces fichiers dans l’archive chapitre-07.tar.gz depuis la page Informations générales.

Gestion des accès externes

1. Contexte

Prometheus et Grafana sont en place sur une seule et même machine. Ils sont lancés automatiquement au démarrage du système. Toutefois, les utilisateurs doivent connaître l’adresse IP du serveur ainsi que les ports des deux services. Autre aspect : aucun mécanisme de protection n’est en place.

Afin de gérer ces aspects correctement, un serveur Nginx va être ajouté. Ce dernier prendra en charge certains besoins qui ne sont pas gérés nativement par Grafana ou Prometheus, notamment :

  • masquer les ports de service et adresses IP des serveurs,

  • mettre à disposition des entrées DNS pour chacun des services,

  • contrôler les accès aux services,

  • protéger les accès à l’aide du protocole TLS.

Grafana supporte l’utilisation de certificats TLS ainsi que Prometheus depuis la version 2.24. Ces capacités ne seront toutefois pas abordées.

2. Prérequis

Afin de pouvoir mettre en place un mécanisme d’hôte virtuel, l’utilisateur devra être en mesure de créer des entrées DNS. Pour la suite de l’exemple, les entrées DNS prometheus.eni.yannig.ovh et grafana.eni.yannig.ovh prendront en charge l’exposition de Prometheus et Grafana. Elles pointeront toutes les deux vers l’adresse IP de la machine hébergeant Prometheus et Grafana.

En cas de difficulté à obtenir ces entrées, l’utilisateur pourra passer par la modification du fichier /etc/hosts.

L’utilisateur devra être l’administrateur de la machine servant de proxy inverse. Les exemples donnés se feront sur une distribution Ubuntu 20.04 LTS tournant sur architecture AMD64.

3. Installation de Nginx

L’installation de Nginx sur Ubuntu se fait simplement à l’aide de la commande apt suivie du mot-clé install et du paquet à installer (nginx). Afin de ne pas demander de confirmation, l’option -y sera également utilisée.

Autre aspect, la liste des sources logicielles sera mise à jour à l’aide de la commande apt et de l’option update.

Voici les deux commandes complètes précédées de sudo :

$ sudo apt update 
$ sudo apt install nginx -y 

La première commande...

Chiffrement des communications à l’aide de Let’s Encrypt

1. Contexte

L’utilisateur a un accès par entrée DNS. Toutefois, les accès sont ouverts sans chiffrement : n’importe qui peut récupérer les informations qui transitent.

Afin de se prémunir de ce genre d’attaque, il est possible de mettre en place un chiffrement à l’aide du protocole TLS. Pour cela, il faut disposer d’un certificat. Traditionnellement, il est possible d’en obtenir auprès d’organismes spécialisés (Verisign, GlobalSign, etc). Le but du projet Let’s Encrypt est de proposer des certificats gratuitement afin de généraliser l’utilisation d’échanges chiffrés avec notamment la mise en place du protocole HTTPS.

D’après Wikipedia, cette autorité de certification a été créée le 3 décembre 2015. Cette autorité fournit des certificats gratuits X.509 pour le protocole cryptographique TLS.

La création des certificats s’appuie sur un défi basé sur l’exposition de secrets à l’aide des protocoles DNS ou HTTP. Un automate crée ces entrées qui sont ensuite vérifiées par Let’s Encrypt.

Pour plus de détails, consultez l’article Let’s Encrypt de Wikipédia France disponible à l’adresse suivante : https://fr.wikipedia.org/wiki/Let%27s_Encrypt

Cette section n’est pas obligatoire pour la suite. Dans le cas où le serveur Nginx ne pourrait pas être exposé sur Internet, passez directement à la partie sur htpasswd et OAuth2.

2. Mise en place du chiffrement avec Let’s Encrypt

a. Principe de génération des certificats avec Let’s Encrypt

L’obtention des certificats auprès de Let’s Encrypt se fait à l’aide du protocole ACME (abréviation en anglais pour Automatic Certificate Management Environment, soit littéralement « environnement de gestion automatique de certificats »).

Ce protocole de création de certificats a été développé par l’Internet Security Research Group (ISRG) afin de fournir des certificats à un coût très faible. Il se base sur la publication...

Contrôle des accès sur Grafana

1. Contexte

L’accès à Grafana est maintenant chiffré. Toutefois, tout le monde peut y accéder sans aucune restriction. Grafana dispose de mécanismes pour gérer les accès :

  • Par définition d’utilisateur dans la console de Grafana.

  • En se branchant sur un annuaire LDAP d’entreprises.

  • En utilisant un mécanisme d’authentification de type OAuth2.

2. Définition d’utilisateurs dans Grafana

a. Origine du besoin

Lors de la mise en place de Grafana, il est tout à fait acceptable d’utiliser le compte administrateur. Toutefois, pour donner des accès, il est préférable de créer des comptes disposant de droits restreints.

Dans ce qui va suivre, le lecteur abordera une technique permettant d’inviter des utilisateurs à se connecter via un mécanisme d’e-mail.

b. Création de comptes locaux

 Ouvrez l’interface de Grafana en utilisant le compte d’administration. Ouvrez ensuite la page des utilisateurs en passant la souris au-dessus de l’icône configuration (icône images/roue.PNG sur la gauche de l’écran) puis en cliquant sur le lien Users.

 Dans l’écran des utilisateurs, cliquez sur le bouton bleu Invite en haut à droite.

 Sur l’écran qui apparaît, renseignez les champs suivants :

L’adresse e-mail de l’utilisateur (ex : nicolas.gaetan@lacompta.fr).

Le nom de l’utilisateur (ex : Nicolas Gaetan).

Le rôle de l’utilisateur : Viewer.

images/08EP04.png

Création d’un compte utilisateur dans l’interface de Grafana

 Désactivez également l’envoi d’e-mail puis cliquez sur le bouton bleu Submit

L’écran contenant la liste des utilisateurs doit à nouveau apparaître. Par défaut, l’utilisateur n’apparaît pas. Afin de l’afficher, cliquez sur le bouton Pending Invites (1). Cette fois-ci, l’utilisateur nouvellement créé apparaît.

 Cliquez sur bouton Copy Invite. Cette opération copie l’invitation dans le presse-papiers de l’utilisateur. Elle doit se présenter sous la forme suivante :

https://localhost:3000/invite/vg72tKFJuee8YO2jjqH9eECb2uo5 

Récupérez cette adresse...

Contrôle des accès sur Prometheus

1. Contexte

Grafana dispose de mécanismes natifs pour gérer les accès à l’aide d’un annuaire d’entreprises LDAP ou à l’aide du protocole OAuth2.

Pour Prometheus, les choses sont un peu plus compliquées dans la mesure où ce dernier n’offre aucun moyen de restriction. Dans ce qui va suivre, l’utilisateur va aborder comment mettre en place des mécanismes de restriction des accès à l’aide de Nginx.

Pour la suite, il n’est pas nécessaire d’avoir activé le protocole HTTPS. L’utilisateur devra toutefois adapter en conséquence les exemples du livre.

2. Contrôle des accès par mot de passe/htpasswd

a. Principe de fonctionnement

L’utilitaire htpasswd est couramment utilisé pour le contrôle d’accès par mot de passe. Pour mémoire, ce mécanisme - hérité du serveur HTTP Apache - permet de protéger les accès à un site à l’aide d’un nom d’utilisateur et d’un mot de passe stockés dans un fichier.

L’alimentation de ce fichier peut se faire à l’aide de l’outil htpasswd. Utilisez les options -nb suivies d’un nom d’utilisateur et d’un mot de passe afin de générer une ligne valide.

Voici ci-dessous un exemple de lancement permettant de créer l’entrée de l’utilisateur yannig :

$ htpasswd -nb yannig mon-super-mot-de-passe-super-secret 

La commande renverra quelque chose de similaire à la sortie suivante :

yannig:$apr1$xxxxx$Axxxxxxxxxxxxxxxxx/xxx 

Récupérez le contenu de la sortie et alimentez le contenu du fichier /etc/nginx/prometheus.htpasswd.

Dans le cas de la création de plusieurs utilisateurs, séparez chaque entrée par un retour à la ligne.

b. Configuration de l’accès à Prometheus

Le fichier de mots de passe est prêt. Reste à configurer l’entrée de Prometheus dans Nginx pour le prendre en compte.

Cette modification se fait en utilisant les champs suivants dans la section server :

  • auth_basic suivi d’une indication sur l’élément à accéder (exemple : « Prometheus Login »).

  • auth_basic_user_file...