Sichern von elasticsearch

Sichern von elasticsearch

Obwohl Elasticsearch in seiner installierten Form äußerst anfällig für Angriffe ist, herrscht diesbezüglich offenbar ein erheblicher Mangel an Informationen.

Meine größte Angst bei der Verwendung besteht darin, dass ich als Laie keine Ahnung von den möglichen Schwachstellen habe und nicht weiß, wie ich sie schließen kann.

Kann mir jemand eine Methode erklären, Elasticsearch zu sperren, sodass ich Folgendes in einer sicheren Umgebung tun kann:

  • Mehrere Indizes pro Benutzer. Angenommen, ich kann dies im Voraus für sie erstellen. Ein Benutzer sollte nicht in der Lage sein, Vorgänge an den Indizes anderer Benutzer auszuführen, außer möglicherweise diese abzufragen, wenn ihm die Berechtigung erteilt wurde. (Möglicherweise eine Art geheimer Schlüssel in der URL für jeden Benutzer?)

  • Benutzer können nach Belieben Objekte zu ihren Indizes hinzufügen und daraus löschen, ihren Index jedoch nicht löschen.

  • Eine Art Beschränkung der Speichergröße für den Benutzer, sodass er den Dienst im Fehlerfall nicht überlasten kann.

Ich gehe davon aus, dass einiges davon auf Anwendungsebene erledigt werden muss und ich kann nicht von Ihnen erwarten, dass Sie das für mich schreiben. Die Standardkonfiguration ist jedoch viel zu offen und selbst wenn ich eine benutzerdefinierte API-Schicht dafür bereitstelle, könnte jemand diese leicht umgehen und direkt mit dem Server kommunizieren.

Antwort1

Meiner Meinung nach besteht die einzige Möglichkeit, ES in der von Ihnen geforderten Weise zu sichern darin, es hinter einer anderen Anwendungsschicht zu sperren und diese Schicht den https/SSL-Transport, die Authentifizierung und die Autorisierungskontrolle handhaben zu lassen.

Auf der ES-Seite wurde ein Jetty ES-Sicherheits-Plugin entwickelt. Ich weiß nicht, ob es erfolgreich war. Als ich ES zum ersten Mal bereitgestellt habe, stand das Plugin kurz vor der Veröffentlichung, also sehen Sie es sich an:

ES JETTY PLUGIN

Antwort2

Ich schätze, Sie müssten einen HTTP-Proxy dazwischen mit all dieser „Geschäftslogik“ erstellen und ElasticSearch nur vom lokalen Host aus Zugriff gewähren. Auf diese Weise wird der direkte Zugriff auf ES blockiert und Sie können alle gewünschten Richtlinien festlegen und durchsetzen (juhu! ;)

„Selbst wenn ich eine benutzerdefinierte API-Schicht dafür bereitstelle, könnte jemand diese leicht umgehen“: Das ist nicht möglich, wenn ES nur Verbindungen vom lokalen Host akzeptiert.

Ich glaube nicht, dass Speichernutzungsbeschränkungen möglich sind. Vielleicht könnten Sie Abfragen innerhalb der Proxy-Ebene vorab genehmigen?

Antwort3

Ich habe etwas Ähnliches gemacht, indem ich Nginx vor ES laufen ließ. Es ist möglich, in Nginx eine „Autorisierung“ basierend auf den Schlüsselwörtern in der URL einzurichten. Siehe den in diesem Dokument definierten Anwendungsfall:http://www.elasticsearch.org/blog/playing-http-tricks-nginx/

Antwort4

Ich habe Elasticsearch an einen OpenVPN-Tunnel gebunden:

In /etc/elasticsearch/elasticsearch.yml:

network.host: 172.16.xxx.xxx

Wobei 172.16.xxx.xxx die von OpenVPN zugewiesene IP-Adresse ist.

verwandte Informationen