Protéger son cluster Elasticsearch avec Jetty

Tuesday, Apr 10, 2012 | 2 minute read

David Pilato

Nativement, Elasticsearch expose l’ensemble de ses services sans aucune authentification et donc une commande du type curl -XDELETE http://localhost:9200/myindex peut faire de nombreux dégâts non désirés.

De plus, si vous développez une application JQuery avec un accès direct depuis le poste client à votre cluster Elasticsearch, le risque qu’un utilisateur joue un peu avec votre cluster est grand !

Alors, pas de panique… La société Sonian Inc. a open sourcé son plugin Jetty pour Elasticsearch pour notre plus grand bonheur 😉

Principe

Le principe consiste à rajouter une surcouche Jetty à Elasticsearch, sous forme de plugin.

Il ne reste plus qu’à restreindre certaines URL et certaines méthodes (DELETE par exemple) à certains utilisateurs.

Guide d’installation

Pour installer le plugin, connectez vous à votre serveur hébergeant Elasticsearch et allez dans le répertoire d’installation :

cd /usr/local/elasticsearch/elasticsearch-0.19.2/

Installez le plugin (vérifiez la compatibilité entre la version du plugin et celle de votre noeud) :

sudo bin/plugin -install sonian/elasticsearch-jetty/0.19.2
- Installing sonian/elasticsearch-jetty/0.19.2...
Trying https://github.com/downloads/sonian/elasticsearch-jetty/elasticsearch-jetty-0.19.2.zip...
Downloading .......................................................................................................................................................................DONE
Installed jetty

Récupérez le fichier de configuration de jetty proposé par Sonian en exemple :

sudo curl https://raw.github.com/sonian/elasticsearch-jetty/master/config/jetty.xml -o config/jetty.xml

Idem pour le fichier avec les logins / password :

sudo curl https://raw.github.com/sonian/elasticsearch-jetty/master/config/realm.properties -o config/realm.properties

Il faut ensuite modifier la configuration Elasticsearch et ajouter la ligne suivante dans config/elasticsearch.yml :

sudo vi config/elasticsearch.yml
# Jetty Plugin
http.type: com.sonian.elasticsearch.http.jetty.JettyHttpServerTransportModule

Les petits gars de Sonian ayant très bien fait leur boulot, les protections nécessaires sont déjà en place avec le fichier config/jetty.xml très complet.

Modifiez les valeurs par défaut de login/password dans config/realm.properties :

superuser: YOURSUPERUSERPASSWORD,admin,readwrite
user: USERPASSWORD,readwrite

Redémarrez Elasticsearch. Si vous l’avez installé en tant que service :

sudo service elasticsearch restart

Et voilà ! Impossible de faire des commandes du type :

curl http://localhost:9200/_refresh
# 401 Unauthorized

Mais avec authentification, ça passe :

curl -u user:USERPASSWORD http://localhost:9200/_refresh
# {"ok":true,"_shards":{"total":23,"successful":23,"failed":0}}

© 2010 - 2025 David Pilato

🌱 Generated from 🇫🇷 with ❤️ on Sat Jan 11, 2025 at 08:22:25 UTC
Powered by Hugo with theme Dream.

Who am I?

Developer | Evangelist at elastic and creator of the Elastic French User Group . Frequent speaker about all things Elastic, in conferences, for User Groups and in companies with BBL talks . In my free time, I enjoy coding and DeeJaying , just for fun. Living with my family in Cergy, France.

Details

I discovered Elasticsearch project in 2011. After contributed to the project and created open source plugins for it, David joined elastic the company in 2013 where he is Developer and Evangelist. He also created and still actively managing the French spoken language User Group. At elastic, he mainly worked on Elasticsearch source code, specifically on open-source plugins. In his free time, he likes talking about elasticsearch in conferences or in companies (Brown Bag Lunches AKA BBLs ). He is also author of FSCrawler project which helps to index your pdf, open office, whatever documents in elasticsearch using Apache Tika behind the scene.

Visited countries

You can see here the countries I have visited so far. Most of them are for business purpose but who said you can not do both: business and leisure?

38 countries visited

Social Links