Elastic sous clé : activation des options de sécurité du cluster Elasticsearch pour un accès de l'intérieur et de l'extérieur

Elastic sous clé : activation des options de sécurité du cluster Elasticsearch pour un accès de l'intérieur et de l'extérieur

Elastic Stack est un outil bien connu sur le marché des systèmes SIEM (en fait, pas seulement). Il peut collecter de nombreuses données de différentes tailles, à la fois sensibles et peu sensibles. Ce n'est pas tout à fait correct si l'accès aux éléments Elastic Stack eux-mêmes n'est pas protégé. Par défaut, tous les éléments Elastic prêts à l'emploi (collecteurs Elasticsearch, Logstash, Kibana et Beats) s'exécutent sur des protocoles ouverts. Et dans Kibana lui-même, l'authentification est désactivée. Toutes ces interactions peuvent être sécurisées et dans cet article nous vous expliquerons comment procéder. Pour plus de commodité, nous avons divisé le récit en 3 blocs sémantiques :

  • Modèle d'accès aux données basé sur les rôles
  • Sécurité des données au sein d'un cluster Elasticsearch
  • Sécuriser les données en dehors d'un cluster Elasticsearch

Détails sous la coupe.

Modèle d'accès aux données basé sur les rôles

Si vous installez Elasticsearch et ne le réglez d'aucune façon, l'accès à tous les index sera ouvert à tous. Eh bien, ou ceux qui peuvent utiliser curl. Pour éviter cela, Elasticsearch dispose d'un modèle disponible à partir d'un abonnement Basic (qui est gratuit). Schématiquement, cela ressemble à ceci :

Elastic sous clé : activation des options de sécurité du cluster Elasticsearch pour un accès de l'intérieur et de l'extérieur

Qu'y a-t-il sur la photo

  • Les utilisateurs sont toutes les personnes pouvant se connecter à l'aide de leurs informations d'identification.
  • Un rôle est un ensemble de droits.
  • Les droits sont un ensemble de privilèges.
  • Les privilèges sont des autorisations d'écriture, de lecture, de suppression, etc. (Liste complète des privilèges)
  • Les ressources sont des index, des documents, des champs, des utilisateurs et d'autres entités de stockage (le modèle de rôle de certaines ressources n'est disponible qu'avec des abonnements payants).

Par défaut, Elasticsearch a utilisateurs de la boîte, auquel ils sont attachés rôles de boîte. Une fois que vous avez activé les paramètres de sécurité, vous pouvez commencer à les utiliser immédiatement.

Pour activer la sécurité dans les paramètres d'Elasticsearch, vous devez l'ajouter au fichier de configuration (par défaut, il s'agit de elasticsearch/config/elasticsearch.yml) nouvelle ligne:

xpack.security.enabled: true

Après avoir modifié le fichier de configuration, lancez ou redémarrez Elasticsearch pour que les modifications prennent effet. L'étape suivante consiste à attribuer des mots de passe aux utilisateurs de la box. Faisons-le de manière interactive en utilisant la commande ci-dessous :

[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-setup-passwords interactive
Initiating the setup of passwords for reserved users elastic,apm_system,kibana,logstash_system,beats_system,remote_monitoring_user.
You will be prompted to enter passwords as the process progresses.
Please confirm that you would like to continue [y/N]y


Enter password for [elastic]:
Reenter password for [elastic]:
Enter password for [apm_system]:
Reenter password for [apm_system]:
Enter password for [kibana]:
Reenter password for [kibana]:
Enter password for [logstash_system]:
Reenter password for [logstash_system]:
Enter password for [beats_system]:
Reenter password for [beats_system]:
Enter password for [remote_monitoring_user]:
Reenter password for [remote_monitoring_user]:
Changed password for user [apm_system]
Changed password for user [kibana]
Changed password for user [logstash_system]
Changed password for user [beats_system]
Changed password for user [remote_monitoring_user]
Changed password for user [elastic]

vérifier:

[elastic@node1 ~]$ curl -u elastic 'node1:9200/_cat/nodes?pretty'
Enter host password for user 'elastic':
192.168.0.2 23 46 14 0.28 0.32 0.18 dim * node1

Vous pouvez vous féliciter - les paramètres du côté Elasticsearch sont terminés. Il est maintenant temps de configurer Kibana. Si vous l'exécutez maintenant, des erreurs apparaîtront, il est donc important de créer un magasin de clés. Cela se fait en deux commandes (utilisateur Kibana et le mot de passe saisi lors de l'étape de création du mot 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. L'abonnement Basic comprend un modèle basé sur les utilisateurs internes. À partir de Gold, vous pouvez connecter des systèmes d'authentification externes : LDAP, PKI, Active Directory et systèmes d'authentification unique.

Elastic sous clé : activation des options de sécurité du cluster Elasticsearch pour un accès de l'intérieur et de l'extérieur

Les droits d'accès aux objets dans Elasticsearch peuvent également être limités. Cependant, pour faire de même pour les documents ou les champs, il vous faudra un abonnement payant (ce luxe commence avec le niveau Platinum). Ces paramètres sont disponibles dans l'interface Kibana ou via API de sécurité. Vous pouvez consulter le menu Dev Tools déjà familier :

Créer un 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" : "Alexander Pushkin",
  "email" : "[email protected]",
  "metadata" : {
    "hometown" : "Saint-Petersburg"
  }
}

Sécurité des données au sein d'un cluster Elasticsearch

Lorsqu'Elasticsearch s'exécute dans un cluster (ce qui est courant), les paramètres de sécurité au sein du cluster deviennent importants. Pour une communication sécurisée entre les nœuds, Elasticsearch utilise le protocole TLS. Pour mettre en place une interaction sécurisée entre eux, vous avez besoin d'un certificat. Nous 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, dans le répertoire /../elasticsearch les archives apparaîtront elastic-stack-ca.zip. A l'intérieur, vous trouverez un certificat et une clé privée avec des extensions crt и key respectivement. Il est conseillé de les placer sur une ressource partagée, qui doit être accessible depuis tous les nœuds du cluster.

Chaque nœud a désormais besoin de ses propres certificats et clés privées basés sur ceux du répertoire partagé. Lors de l'exécution de la commande, il vous sera demandé de définir un mot de passe. Vous pouvez ajouter des options supplémentaires -ip et -dns pour une vérification complète des nœuds en interaction.

[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-certutil cert --ca-cert /shared_folder/ca/ca.crt --ca-key /shared_folder/ca/ca.key

Suite à l'exécution de la commande, nous recevrons 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

Ajoutez un mot de passe au certificat au 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

Déjà connu elasticsearch.yml Il ne reste plus qu'à ajouter des lignes avec les données du 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

Nous lançons tous les nœuds Elasticsearch et exécutons boucle. 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é : le filtrage des adresses IP (disponible dans les abonnements à partir du niveau Gold). Vous permet de créer des listes blanches d'adresses IP à partir desquelles vous êtes autorisé à accéder aux nœuds.

Sécuriser les données en dehors d'un cluster Elasticsearch

Hors du cluster, cela signifie connecter des outils externes : Kibana, Logstash, Beats ou autres clients externes.

Elastic sous clé : activation des options de sécurité du cluster Elasticsearch pour un accès de l'intérieur et de l'extérieur

Pour configurer la prise en charge de https (au lieu de http), ajoutez de nouvelles lignes à 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

Parce que Le certificat est protégé par mot de passe, ajoutez-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 avoir ajouté les clés, les nœuds Elasticsearch sont prêts à se connecter via https. Ils peuvent désormais être lancés.

L'étape suivante consiste à créer une clé pour connecter Kibana et à l'ajouter à la configuration. Sur la base du certificat qui se trouve déjà 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 avec la configuration Kibana :

[elastic@node1 ~]$ unzip elasticsearch/certificate-bundle.zip -d kibana/config

Les clés sont là, il ne reste donc plus qu'à changer la configuration de Kibana pour qu'il commence à les utiliser. Dans le fichier de configuration kibana.yml, remplacez http par https et ajoutez des lignes avec les paramètres de connexion SSL. Les trois dernières lignes configurent une communication 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, le paramétrage est complété et l'accès aux données du cluster Elasticsearch est crypté.

Si vous avez des questions sur les capacités d'Elastic Stack sur les abonnements gratuits ou payants, la surveillance des tâches ou la création d'un système SIEM, laissez une demande à formulaire de rétroaction sur notre site.

Plus de nos articles sur Elastic Stack sur Habré :

Comprendre l'apprentissage automatique dans la Suite Elastic (alias Elasticsearch, alias ELK)

Dimensionnement d'Elasticsearch

Source: habr.com

Ajouter un commentaire