
Elastic Stack â un outil reconnu sur le marchĂ© des systĂšmes SIEM (en rĂ©alitĂ©, pas seulement ceux-ci). Il peut collecter de nombreuses donnĂ©es de diffĂ©rentes tailles, qu'elles soient sensibles ou non. Il n'est pas tout Ă fait correct que l'accĂšs aux Ă©lĂ©ments eux-mĂȘmes d'Elastic Stack ne soit pas protĂ©gĂ©. Par dĂ©faut, tous les Ă©lĂ©ments prĂ©configurĂ©s d'Elastic (Elasticsearch, Logstash, Kibana et les collecteurs Beats) fonctionnent avec des protocoles ouverts. De plus, l'authentification est dĂ©sactivĂ©e dans Kibana. Toutes ces interactions peuvent ĂȘtre sĂ©curisĂ©es et dans cet article, nous allons vous expliquer comment le faire. Pour faciliter la comprĂ©hension, nous avons divisĂ© le rĂ©cit en 3 blocs thĂ©matiques :
- ModÚle de rÎle d'accÚs aux données
- Sécurité des données au sein du cluster Elasticsearch
- Sécurité des données en dehors du cluster Elasticsearch
Les détails ci-dessous.
ModÚle de rÎle d'accÚs aux données
Si vous installez Elasticsearch sans le configurer, l'accÚs à tous les index sera ouvert à tous ceux qui le souhaitent. Ou, du moins, à ceux qui peuvent utiliser curl. Pour éviter cela, Elasticsearch propose un modÚle de rÎle accessible à partir de l'abonnement de niveau Basic (qui est gratuit). Schématiquement, cela ressemble à ceci :

Ce qui est montré sur l'image
- Les utilisateurs â ce sont tous ceux qui peuvent s'authentifier en utilisant des identifiants.
- Le rĂŽle â c'est un ensemble de droits.
- Les droits â c'est un ensemble de privilĂšges.
- Les privilĂšges â ce sont des autorisations pour Ă©crire, lire, supprimer, etc. ()
- Les ressources â ce sont des index, des documents, des champs, des utilisateurs et d'autres sujets de stockage (le modĂšle de rĂŽle pour certaines ressources n'est disponible que dans les abonnements payants).
Dans Elasticsearch, par dĂ©faut, il y a , auxquels sont associĂ©s . AprĂšs avoir activĂ© les paramĂštres de sĂ©curitĂ©, ils peuvent ĂȘtre utilisĂ©s immĂ©diatement.
Pour activer la sécurité dans les paramÚtres d'Elasticsearch, il faut ajouter une nouvelle ligne dans le fichier de configuration (par défaut, c'est elasticsearch/config/elasticsearch.yml) :
xpack.security.enabled: trueAprÚs avoir modifié le fichier de configuration, démarrez ou redémarrez Elasticsearch pour que les modifications prennent effet. La prochaine étape consiste à attribuer des mots de passe aux utilisateurs préconfigurés. Nous allons le faire de maniÚre interactive à l'aide de la commande ci-dessous :
[elastic@node1 ~]$ .\/elasticsearch\/bin\/elasticsearch-setup-passwords interactive
Initiation de la configuration des mots de passe pour les utilisateurs réservés elastic, apm_system, kibana, logstash_system, beats_system, remote_monitoring_user.
Vous serez invité à entrer des mots de passe au fur et à mesure de la progression du processus.
Veuillez confirmer que vous souhaitez continuer [y\/N]y
Entrez le mot de passe pour [elastic]:
Réeentrez le mot de passe pour [elastic]:
Entrez le mot de passe pour [apm_system]:
Réeentrez le mot de passe pour [apm_system]:
Entrez le mot de passe pour [kibana]:
Réeentrez le mot de passe pour [kibana]:
Entrez le mot de passe pour [logstash_system]:
Réeentrez le mot de passe pour [logstash_system]:
Entrez le mot de passe pour [beats_system]:
Réeentrez le mot de passe pour [beats_system]:
Entrez le mot de passe pour [remote_monitoring_user]:
Réeentrez le mot de passe pour [remote_monitoring_user]:
Mot de passe changé pour l'utilisateur [apm_system]
Mot de passe changé pour l'utilisateur [kibana]
Mot de passe changé pour l'utilisateur [logstash_system]
Mot de passe changé pour l'utilisateur [beats_system]
Mot de passe changé pour l'utilisateur [remote_monitoring_user]
Mot de passe changé pour l'utilisateur [elastic]
Vérifions :
[elastic@node1 ~]$ curl -u elastic 'node1:9200\/cat\/nodes?pretty'
Entrez le mot de passe de l'hĂŽte pour l'utilisateur 'elastic':
192.168.0.2 23 46 14 0.28 0.32 0.18 dim * node1
Vous pouvez vous fĂ©liciter â les rĂ©glages du cĂŽtĂ© d'Elasticsearch sont effectuĂ©s. Il est maintenant temps de configurer Kibana. Si vous la lancez maintenant, des erreurs apparaĂźtront, donc il est important de crĂ©er un magasin de clĂ©s. Cela se fait en deux commandes (utilisateur kibana et mot de passe saisis lors de la crĂ©ation des mots de passe dans Elasticsearch):
[elastic@node1 ~]$ .\/kibana\/bin\/kibana-keystore add elasticsearch.username
[elastic@node1 ~]$ .\/kibana\/bin\/kibana-keystore add elasticsearch.passwordSi tout est correct, Kibana commencera Ă demander un identifiant et un mot de passe. Dans l'abonnement de niveau Basic, un modĂšle de rĂŽle basĂ© sur des utilisateurs internes est disponible. Ă partir de Gold, il est possible de connecter des systĂšmes d'authentification externes â LDAP, PKI, Active Directory et systĂšmes de Single sign-on.

Les droits d'accĂšs aux objets au sein d'Elasticsearch peuvent Ă©galement ĂȘtre restreints. Cependant, pour faire de mĂȘme pour les documents ou les champs, un abonnement payant est requis (ce luxe commence au niveau Platinum). Ces rĂ©glages sont accessibles via l'interface Kibana ou via le . Vous pouvez vĂ©rifier Ă travers le menu Dev Tools dĂ©jĂ connu :
Création de rÎle
PUT \/_security\/role\/ruslan_i_ludmila_role
{
"cluster": [],
"indices": [
{
"names": [ "ruslan_i_ludmila" ],
"privileges": ["read", "view_index_metadata"]
}
]
}Création d'un utilisateur
POST \/_security\/user\/pushkin
{
"password" : "nataliaonelove",
"roles" : [ "ruslan_i_ludmila_role", "kibana_user" ],
"full_name" : "Alexandre Pouchkine",
"email" : "pushkin@lyceum.edu",
"metadata" : {
"hometown" : "Saint-Pétersbourg"
}
}Sécurité des données au sein du cluster Elasticsearch
Lorsque Elasticsearch fonctionne dans un cluster (ce qui est courant), les rĂ©glages de sĂ©curitĂ© au sein du cluster deviennent importants. Pour une interaction sĂ©curisĂ©e entre les nĆuds, Elasticsearch utilise le protocole TLS. Pour configurer une interaction sĂ©curisĂ©e entre eux, un certificat est nĂ©cessaire. GĂ©nĂ©rons un certificat et une clĂ© privĂ©e au format PEM :
[elastic@node1 ~]$ .\/elasticsearch\/bin\/elasticsearch-certutil ca --pemAprĂšs avoir exĂ©cutĂ© la commande ci-dessus, un fichier sera créé dans le rĂ©pertoire /../elasticsearch archive elastic-stack-ca.zip. Ă l'intĂ©rieur, vous trouverez le certificat et la clĂ© privĂ©e avec les extensions crt et key respectivement. Il est conseillĂ© de les placer sur une ressource partagĂ©e accessible depuis tous les nĆuds du cluster.
Pour chaque nĆud, il est maintenant nĂ©cessaire d'avoir ses propres certificats et clĂ©s privĂ©es basĂ©s sur ceux qui se trouvent dans le rĂ©pertoire partagĂ©. Lors de l'exĂ©cution de la commande, il vous sera demandĂ© de spĂ©cifier un mot de passe. Vous pouvez ajouter des options supplĂ©mentaires âip et âdns pour une vĂ©rification complĂšte des nĆuds interagissant.
[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-certutil cert --ca-cert /shared_folder/ca/ca.crt --ca-key /shared_folder/ca/ca.keyà l'issue de l'exécution de la commande, nous obtiendrons un certificat et une clé privée au format PKCS#12, protégés par un mot de passe. Il ne reste plus qu'à déplacer le fichier généré p12 dans le répertoire de configuration :
[elastic@node1 ~]$ mv elasticsearch/elastic-certificates.p12 elasticsearch/configAjoutons le mot de passe au certificat dans le format p12 dans le keystore et le truststore sur chaque nĆud :
[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_passwordDans le déjà connu elasticsearch.yml il ne reste plus qu'à ajouter les lignes contenant les informations sur le certificat :
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.p12Lançons tous les nĆuds Elasticsearch et exĂ©cutons curl. Si tout a Ă©tĂ© fait correctement, une rĂ©ponse avec plusieurs nĆuds sera renvoyĂ©e :
[elastic@node1 ~]$ curl node1:9200/_cat/nodes -u elastic:password
172.18.0.3 43 75 4 0.00 0.05 0.05 dim * node2
172.18.0.4 21 75 3 0.00 0.05 0.05 dim - node3
172.18.0.2 39 75 4 0.00 0.05 0.05 dim - node1Il existe une autre option de sĂ©curitĂ© â filtrage des adresses IP (disponible dans les abonnements Ă partir du niveau Gold). Cela permet de crĂ©er des listes blanches d'adresses IP Ă partir desquelles les accĂšs aux nĆuds sont autorisĂ©s.
Sécurité des données en dehors du cluster Elasticsearch
Hors du cluster signifie se connecter Ă des outils externes : Kibana, Logstash, Beats ou d'autres clients externes.

Pour configurer le support https (au lieu de http), ajoutons de nouvelles lignes dans elasticsearch.yml :
xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.keystore.path: elastic-certificates.p12
xpack.security.http.ssl.truststore.path: elastic-certificates.p12Puisque le certificat est protĂ©gĂ© par un mot de passe, ajoutons-le au keystore et au truststore sur chaque nĆud :
[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-keystore add xpack.security.http.ssl.keystore.secure_password
[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-keystore add xpack.security.http.ssl.truststore.secure_passwordAprĂšs l'ajout des clĂ©s, les nĆuds Elasticsearch sont prĂȘts Ă se connecter via https. Vous pouvez maintenant les dĂ©marrer.
L'étape suivante consiste à créer une clé pour connecter Kibana et à l'ajouter à la configuration. Sur la base du certificat déjà placé dans le répertoire partagé, nous allons générer un certificat au format PEM (PKCS#12 Kibana, Logstash et Beats ne le supportent pas encore) :
[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-certutil cert --ca-cert /shared_folder/ca/ca.crt --ca-key /shared_folder/ca/ca.key --pemIl ne reste plus qu'à décompresser les clés créées dans le dossier de configuration de Kibana :
[elastic@node1 ~]$ unzip elasticsearch/certificate-bundle.zip -d kibana/configLes clés sont là , il ne reste plus qu'à modifier la configuration de Kibana pour qu'elle les utilise. Dans le fichier de configuration kibana.yml, nous changeons http en https et ajoutons les lignes avec les paramÚtres de connexion SSL. Les trois derniÚres lignes configurent l'interaction sécurisée entre le navigateur de l'utilisateur et Kibana.
elasticsearch.hosts: ["https://${HOSTNAME}:9200"]
elasticsearch.ssl.certificateAuthorities: /shared_folder/ca/ca.crt
elasticsearch.ssl.verificationMode: certificate
server.ssl.enabled: true
server.ssl.key: /../kibana/config/instance/instance.key
server.ssl.certificate: /../kibana/config/instance/instance.crtAinsi, les paramÚtres sont effectués et l'accÚs aux données dans le cluster Elasticsearch est chiffré.
Si vous avez des questions sur les fonctionnalités d'Elastic Stack dans les abonnements gratuits ou payants, ou sur les tùches de surveillance ou de création de systÚmes SIEM, laissez une demande à sur notre site.
Voici d'autres articles sur Elastic Stack sur Habr :
Source : habr.com
