Elastic sous clé : activons les options de sécurité du cluster Elasticsearch pour un accÚs interne et externe

Elastic sous clé : activons les options de sécurité du cluster Elasticsearch pour un accÚs interne et externe

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 :

Elastic sous clé : activons les options de sécurité du cluster Elasticsearch pour un accÚs interne et externe

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. (Liste complĂšte des privilĂšges)
  • 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 des utilisateurs prĂ©configurĂ©s, auxquels sont associĂ©s des rĂŽles prĂ©configurĂ©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: true

AprÚ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.password

Si 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.

Elastic sous clé : activons les options de sécurité du cluster Elasticsearch pour un accÚs interne et externe

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 Security API. 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 --pem

AprĂš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/config

Ajoutons 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_password

Dans 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.p12

Lanç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 - node1

Il 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.

Elastic sous clé : activons les options de sécurité du cluster Elasticsearch pour un accÚs interne et externe

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.p12

Puisque 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_password

AprĂš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 --pem

Il 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/config

Les 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.crt

Ainsi, 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 à formulaire de contact sur notre site.

Voici d'autres articles sur Elastic Stack sur Habr :

Comprendre le Machine Learning dans Elastic Stack (également connu sous le nom d'Elasticsearch, ou ELK)

Dimensionnement d'Elasticsearch

Source : habr.com

Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster