Prise en main de la sécurité Elasticsearch

À partir des versions 6.8 et 7.1 de la Suite Elastic, des fonctionnalités de sécurité sont disponibles gratuitement au niveau de base. Parmi elles, le chiffrement TLS ou encore le contrôle d'accès basé sur les rôles. Dans cet article de blog, nous allons voir comment utiliser ces fonctionnalités pour sécuriser les clusters Elasticsearch.

Pour cela, nous réaliserons un exercice pratique, lors duquel nous créerons et sécuriserons un cluster Elasticsearch à deux nœuds sur une machine locale. Nous configurerons tout d’abord la communication TLS entre les deux nœuds. Ensuite, nous activerons la sécurité de l’instance Kibana qui servira à analyser et à visualiser les données du cluster. Puis, nous configurerons un contrôle d'accès basé sur les rôles dans Kibana. Le but : nous assurer que les utilisateurs puissent accéder uniquement aux données dont ils ont besoin.

La sécurité est un sujet extrêmement vaste sur lequel il y a beaucoup à dire. Toutefois, aujourd’hui, nous étudierons uniquement les points que vous devez connaître pour démarrer. Après la lecture de cet article, nous vous recommandons de consulter notre documentation sur la sécurisation de la Suite Elastic, qui propose des exemples pratiques très utiles. Dernière remarque très rapide : nous nous servirons d’un cluster local lors de cette procédure. En effet, même si les fonctionnalités sont disponibles de base dans les versions 6.8 et 7.1, elles ont toujours été fournies par défaut dans notre solution Elasticsearch Service.

Installation d’Elasticsearch et de Kibana

Pour cet exemple, nous effectuerons l’installation sur un ordinateur portable fonctionnant sous Linux. Adaptez les étapes ci-dessous à votre environnement.

1ère étape : Télécharger Elasticsearch et Kibana

Vous devez commencer par télécharger la version de base d’Elasticsearch et de Kibana (au moins 6.8 ou 7.1). Les fonctionnalités de sécurité ont été ajoutées au niveau de base dans 7.1 et 6.8. Aussi, si vous disposez d’une version antérieure, vous devez effectuer la mise à niveau.

2étape : Extraire Elasticsearch et Kibana

Pour cet exemple, nous avons téléchargé elasticsearch-7.1.0-linux-x86_64.tar.gz et kibana-7.1.0-linux-x86_64.tar.gz. Une fois ces fichiers récupérés, vous devez en extraire le contenu.

3étape : Créer deux nœuds Elasticsearch

Pour créer un cluster à deux nœuds, faites deux copies du répertoire Elasticsearch, l’une appelée master, et l’autre, node. Une fois cette étape terminée, vous disposez des fichiers et dossiers suivants :

elasticsearch-7.1.0                      elasticsearch-7.1.0-node
elasticsearch-7.1.0-linux-x86_64.tar.gz  kibana-7.1.0-linux-x86_64
elasticsearch-7.1.0-master               kibana-7.1.0-linux-x86_64.tar.gz

Configurer TLS et l’authentification

Nous devons tout d’abord générer certains certificats pour que les nœuds puissent communiquer en toute sécurité. Pour cela, vous pouvez vous servir de l’autorité de certification de l’entreprise. Toutefois, pour cette démo, nous utiliserons une commande appelée elasticsearch-certutil, que vous pouvez exécuter sans qu’il y ait la confusion habituelle au niveau des certificats.

1ère étape : TLS sur le nœud maître Elasticsearch, « master »

Vous pouvez exécuter cd dans le répertoire master, puis la commande suivante :

bin/elasticsearch-certutil cert -out config/elastic-certificates.p12 -pass ""

Ouvrez ensuite le fichier config/elasticsearch.yaml dans votre éditeur de texte préféré. Collez les lignes suivantes à la fin du fichier.

xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12

Enregistrez le fichier. Voilà, nous sommes prêts à démarrer avec le nœud maître. Exécutez la commande bin/elasticsearch. Cet exécutable doit continuer à fonctionner. Mettez ce terminal de côté pour l’instant.

2étape : Mots de passe du cluster Elasticsearch

Maintenant que le nœud maître fonctionne, il est temps de définir des mots de passe pour le cluster. Dans un nouveau terminal, nous devons exécuter cd dans le répertoire de notre nœud maître. Ensuite, exécutons la commande bin/elasticsearch-setup-passwords auto. Celle-ci génère des mots de passe aléatoires pour les utilisateurs internes. Si vous le souhaitez, vous pouvez ignorer le paramètre auto pour définir les mots de passe manuellement à l’aide du paramètre interactive. Conservez précieusement ces mots de passe. Nous en aurons à nouveau besoin pour la suite.

3étape : TLS sur le nœud secondaire Elasticsearch, « node »

Ouvrons à présent un autre terminal et exécutons cd dans notre répertoire « node ». Dans cet exemple, nous avons utilisé le nom elasticsearch-7.1.0-node.

Ensuite, rien de plus simple : il suffit de copier tout ce qui se trouve dans le répertoire de configuration « master » dans le répertoire de configuration « node ».

cp ../elasticsearch-7.1.0-master/config/* config/

Nous vous recommandons aussi d’ajouter l’option de configuration node.master: false dans le fichier config/elasticsearch.yml. Nous n’allons pas rentrer dans les détails ici, car ce n’est pas le but. Toutefois, si vous souhaitez en savoir plus, consultez notre documentation sur les clusters. Au lieu de copier les fichiers comme nous l’avons fait, nous pouvons tout simplement copier les fichiers des certificats, puis définir les clés xpack.security.* comme avec le nœud maître.

Ensuite, nous démarrons le nœud secondaire en exécutant la commande bin/elasticsearch. Celui-ci apparaît dans le cluster. Et si nous regardons la fenêtre du terminal du nœud maître, nous constatons qu’un message indique qu’un nœud vient de rejoindre le cluster. Nous avons désormais un cluster à deux nœuds en cours d’exécution.

4étape : Sécurité dans Kibana

La dernière chose qu’il nous reste à faire, c’est de configurer Kibana. Là encore, ouvrez une nouvelle fenêtre de terminal (c’est la dernière, promis !). Nous devons ajouter le mot de passe pour l’utilisateur Kibana. Celui-ci peut être prélevé dans la sortie précédente de la commande setup-passwords.

Exécutez cd dans le répertoire Kibana et ouvrez le fichier config/kibana.yml dans votre éditeur de texte préféré. Repérez les lignes similaires à celles-ci :

#elasticsearch.username: "user"
#elasticsearch.password: "pass"

Supprimez le caractère # au début des lignes des champs username et password. Changez « user » par « kibana » et modifiez « pass » par le mot de passe Kibana indiqué par la commande setup-passwords. Enregistrez le fichier. Désormais, nous pouvons lancer Kibana à l’aide de la commande bin/kibana.

Configuration du contrôle d'accès basé sur les rôles dans Kibana

Pendant que Kibana s’exécute, nous pouvons basculer vers notre navigateur Web et ouvrir http://localhost:5601. Nous sommes invités à nous identifier : nous utilisons le superutilisateur elastic avec le mot de passe indiqué par la commande setup-passwords.

Log into Kibana

Comme il s’agit d’une nouvelle installation, Kibana nous demande si nous souhaitons charger des données échantillon.

Load sample data into Kibana

Pour cet exemple, nous allons charger les données échantillon de vol et de navigateur. Lorsqu’elles sont chargées, cliquez sur l’icône d’engrenage de configuration.

Navigate to management within Kibana

À présent, créons nos rôles. Accédez à l’option Roles (Rôles) et cliquez dessus.

Roles within Kibana

Cliquez sur Create role (Créer un rôle).

Create a new role

Appelons le premier rôle read_logs.

Create the read_logs role

Faites défiler jusqu’à la section relative aux privilèges d’index, et sélectionnez l’index des logs. Attribuez-lui le privilège read (lecture).

Configure role privileges

La section sur les espaces, située en dessous, vous fait de l’œil ? Vous pourrez vous pencher dessus lorsque votre sécurité sera mise en place. Mais dans le cadre de cet article, nous n’allons pas nous y attarder. Pour en savoir plus sur les espaces, qui présentent de grands atouts en termes d’organisation et de sécurisation des données dans Kibana, consultez notre documentation sur les espaces Kibana ou cet article introductif sur Kibana Spaces.

Maintenant, créons un autre rôle appelé read_flight.

Create read_flight role

Attribuons le privilège read (lecture) à l’index des vols.

Configure the role

À présent, nous allons créer deux utilisateurs et leur attribuer ces rôles. Sélectionnez le lien Users (Utilisateurs) à gauche, et cliquez sur le bouton Create new user (Créer un utilisateur).

Create a new user

Appelons cet utilisateur flight_user et définissez le mot de passe. Nous n’avons pas besoin d’entrer le nom complet, ni l’adresse e-mail. Nous devons attribuer notre rôle read_flight, ainsi que le rôle kibana_user, étant donné que cet utilisateur consultera les données dans Kibana.

Create the flight user

Cliquez à nouveau sur le bouton Create, et répétez la procédure pour log_user. Cette fois-ci, nous attribuons les rôles read_logs et kibana_user.

Create the log user

Super, nous en avons fini avec la création des utilisateurs. Maintenant, nous pouvons nous déconnecter de notre session en tant qu’utilisateur elastic.

Logout as elastic

Connectons-nous avec l’utilisateur log_user. Cliquons sur l’icône des tableaux de bord. Nous constatons qu’il y a deux tableaux de bord : l’un pour les vols, et l’autre pour les logs.

Check out your dashboards

Si vous cliquez sur le tableau de bord des logs, vous verrez les données de log de démonstration. Si nous revenons et que nous voulons consulter le tableau de bord de vols, nous pouvons voir le tableau de bord, mais pas les données. C’est là que les espaces Kibana peuvent s’avérer utiles, afin d’optimiser la sécurité pour que seuls certains utilisateurs puissent accéder à des tableaux de bord spécifiques.

Fermons désormais notre session en tant qu’utilisateur log_user, et ouvrons-en une nouvelle avec l’utilisateur flight_user.

Si nous ouvrons le tableau de bord des logs, cette fois-ci, nous ne pouvons pas afficher les données. Nous obtenons même un message d’erreur car Kibana ne peut pas accéder à l’index des logs.

Data restricted by RBAC

En revanche, lorsque nous accédons au tableau de bord des vols, nous pouvons cette fois-ci voir les données de vol.

Data access provided by RBAC

Félicitations ! Vous venez de configurer un cluster à deux nœuds, avec deux utilisateurs disposant de droits d’accès restreints aux données d’index.

Pour conclure

La sécurité de la Suite Elastic est un sujet extrêmement vaste, et nous n’en avons couvert qu’une infime partie dans cet article. Notre but était que vous puissiez vous lancer. Prochainement, nous publierons des articles présentant de nombreuses fonctionnalités de sécurité et leur utilisation. En attendant, voici d’autres documents et articles de blog sur la façon dont la sécurité de la Suite Elastic fonctionne et sur ce que vous pouvez accomplir.

Vous pouvez aussi demander de l’aide sur notre forum public.

Bonne recherche !