Authentifizierung in Elasticsearch

76

Wie definiere ich den Sicherheitszugriff in Elasticsearch? Ich habe das Elasticsearch-Head-Plugin, aber Ihr Zugriff erfordert keine Sicherheit.

Bruce
quelle

Antworten:

63

Das in dieser Antwort erwähnte Plugin wird nicht mehr aktiv unterstützt.


In Elasticsearch gibt es keine integrierte Zugriffskontrolle. Sie müssten also einen Reverse-Proxy einrichten (hier ist ein Blog-Beitrag zum Einrichten von Nginx), eines der Elasticsearch-Plugins von Drittanbietern wie https://github.com/Asquera/elasticsearch-http-basic verwenden oder das verwenden offizielles Sicherheits-Plugin Shield .

imotov
quelle
Vielen Dank für den Hinweis. Irgendwelche Erfahrungen mit elasticsearch-http-basic? Gut oder schlecht?
Robert Reiz
Ein Reverse-Proxy wie nginx bietet Ihnen mehr Sicherheitsoptionen, einschließlich SSL-Unterstützung.
Andrew
4
Hier ist auch das Kochbuch für ElasticSearch, das eine einfache Möglichkeit bietet, ElasticSearch mit einem Reverse-Proxy unter Verwendung von Nginx zu installieren. github.com/elasticsearch/cookbook-elasticsearch
Tom Rogers
Einige Sicherheitsfunktionen sind ab den Versionen 6.8.0 und 7.1.0 kostenlos . Lesen Sie mehr: elastic.co/blog/security-for-elasticsearch-is-now-free
Aaron_ab
11

<shamelessPlug>

Entschuldigung, aber ich habe ernsthafte Zweifel an all diesen Plugins und Proxys, die nur versuchen, Abfragen mit schlampigen regulären Ausdrücken auf HTTP-Ebene zu erfassen.

Werden Sie die gesamte mögliche ES-Syntax, die einen Schreibvorgang ausführen kann, neu formulieren? Wie filtert man nach Index? Wie wäre es mit Index-Aliasen? Multi-Index-Abfragen?

Die einzige saubere Möglichkeit, die Zugriffskontrolle durchzuführen, ist, nachdem ElasticSearch die Abfragen analysiert hat. Genau das macht Shield schließlich!

Ich habe ein MIT-lizenziertes Plugin ( Readonly-Rest-Plugin ) geschrieben, das genau dies tut.

Sie können die Anfrage abgleichen, indem Sie:

  • ✔️ Hostname, IP und IP mit Netzmaske

  • ✔️ Indizes (Platzhalter unterstützt) und Indexaliasnamen werden aufgelöst

  • ✔️ HTTP Basic Auth

Es hat auch erstklassige Unterstützung für die Kibana-Authentifizierung :)

</shamelessPlug>

sscarduzio
quelle
6

Update : Dies funktioniert ziemlich gut und ist (für die meisten Funktionen) kostenlos und Open Source: https://github.com/floragunncom/search-guard

HINWEIS: Das in diesem Artikel erwähnte Plugin wird nicht mehr gewartet


Vielleicht hilft das: https://github.com/salyh/elasticsearch-security-plugin

Dieses Plugin erweitert Elasticsearch um http / rest-Sicherheitsfunktionen in separaten Modulen. Anstelle von Netty wird ein eingebetteter Tomcat 7 verwendet, um http / rest-Anforderungen zu verarbeiten.

Derzeit werden Kerberos und NTLM für die benutzerbasierte Authentifizierung und Autorisierung über Bibliothekswaffeln von Drittanbietern unterstützt (nur auf Windows-Servern). Für UNIX-Server wird Kerberos über die Drittanbieter-Bibliothek tomcatspnegoad unterstützt (funktioniert mit jeder Kerberos-Implementierung. Für die Autorisierung werden entweder Active Directory und generisches LDAP unterstützt).

Sie können dieses Plugin auch ohne Kerberos / NTLM verwenden, es ist jedoch nur eine hostbasierte Authentifizierung verfügbar.

salyh
quelle
4

Die einzige bevorzugte Möglichkeit, die Sicherheit in Elasticsearch zu aktivieren, ist das Plugin X-Pack.

https://www.elastic.co/guide/en/x-pack/current/xpack-introduction.html

Dies ist ein Mehrzweck-Plugin, das sich gut für Sicherheitszwecke eignet, da Sie auch die Überwachung und Konfiguration der Warnungen und Benachrichtigungen gemäß Ihren Anforderungen verwenden können.

Da dies bereits sehr anerkannt ist, bin ich sicher, dass Elasticsearch dies für die Anmeldung fortsetzen wird.

Rohithnama
quelle
3

Wenn Sie die Basisauthentifizierung mit Kibana3 verwenden möchten, ist hier meine Lösung:

https://github.com/fangli/kibana-authentication-proxy

Unterstützt nicht nur das basicAuth ES-Backend, sondern auch GoogleOAuth und BasicAuth für den Client. Bitte geben Sie einen Stern, wenn es für Sie funktioniert, danke.

Felix
quelle
Können Sie einige Links zur Verwendung bereitstellen? Ich habe es installiert und die App erstellt, aber online keine Hilfe zur Verwendung gefunden.
Siddharth Trikha
3

Versuchen Sie Shield . Es verfügt über Authentifizierung und Autorisierung. Für den Moment braucht es eine Lizenz. Es wird nicht lange dauern, bis Leute ähnliche Open-Source-Plugins erstellen.

Bharath Lakshman
quelle
3

Ich bin ein Neuling in ElasticSearch, aber ich bin der Meinung, dass das X-Pack-Plugin hier als Antwort angezeigt werden sollte: https://www.elastic.co/guide/en/x-pack/current/index.html

Nach meinem Verständnis ist X-Pack jetzt der De-facto-Standard für die Sicherung von ElasticSearch (und vielem mehr), einschließlich der Authentifizierung.

pinkasey
quelle
1
Die X-Pack-Lizenz kostet Tausende von Dollar pro Knoten. Elastic Cloud enthält X-Pack und startet billiger. Eine weitere Option sind Plugins von Drittanbietern.
Marek Toman
2

In Bezug auf eine spezifische Lösung für dieses Problem bin ich auf Folgendes gestoßen, das eine einfache Implementierung eines Reverse-Proxy-Ansatzes darstellt, wie in anderen Antworten erwähnt:

https://gist.github.com/jpluscplusm/9227777

Als Einschränkung scheint es, dass zumindest einige bei Elasticsearch Nginx nicht als die optimale Lösung betrachten, aber ich denke, dass dies von den Besonderheiten Ihrer Authentifizierungsanforderungen abhängt (RBAC, Anzahl der Benutzer, Anzahl der Indizes, Häufigkeit der Änderungen der Zugriffsliste) ). Für einige Benutzer (einschließlich mich) ist das erste Beispiel ausreichend.

http://www.elasticsearch.org/blog/restricting-users-kibana-filtered-aliases/

Wenn Sie feststellen, dass Ihre Anforderungsspezifikationen von nginx nicht erfüllt werden, funktioniert möglicherweise Folgendes: https://github.com/lukas-vlcek/node.es

wjimenez5271
quelle
2

Da ElasticSearch eine Art Datenbankdienst ist, möchten Sie wahrscheinlich sowieso nicht, dass er öffentlich zugänglich gemacht wird.

Ich vertraue nicht darauf, dass Plugins das für mich tun, also habe ich es mit einem Nginx-Proxy gemacht.

Dieses Tutorial ist sehr sehr hilfreich:

http://www.minvolai.com/blog/2014/08/Setting-up-a-Secure-Single-Node-Elasticsearch-server-behind-Nginx/Setting-up-a-Secure-Single-Node-Elasticsearch- Server-hinter-Nginx /

Panthro
quelle
2
Ich verstehe, dass Sie ihnen nicht vertrauen, aber Sie können nicht sicher sein, ob Sie eine echte Indexisolation durchführen, wenn Sie keinen Zugriff auf den internen ElasticSearch-Parser haben :) Deshalb habe ich Folgendes
sscarduzio
2

Ab ElasticVersion 6.8 wurden einige Sicherheitsfunktionen kostenlos (siehe: https://www.elastic.co/blog/security-for-elasticsearch-is-now-free ).

Einige grundlegende Schritte für die grundlegende Authentifizierung

  1. Der grundlegendste Konfigurationsparameter ist : "xpack.security.enabled=true".

Wenn Sie beispielsweise eine docker-compose.ymlDatei verwenden, fügen Sie die folgende Zeile hinzu environment:

elasticsearch:
    image: elastic:6.8.0
    environment:
      - "xpack.security.enabled=true"
  1. Als Nächstes müssen Sie angeben, elasicwelches Kennwort der Standardbenutzer (der als "elastisch" bezeichnet wird) zur Authentifizierung akzeptieren soll. Sie tun dies mit der ELASTIC_PASSWORDUmgebungsvariablen. In unserem Beispiel:

elasticsearch:
    image: elastic:6.8.0
    environment:
      - "xpack.security.enabled=true"
      - "ELASTIC_PASSWORD=123456"

Jetzt können Sie loslegen. Wenn Sie elastisch laufen:

docker run --rm --name elastic -p 9200:9200 -v ELASTIC_PASSWORD=123456 -v xpack.security.enabled=true elastic:6.8.0

Und tun Sie : curl localhost:9200, Sie erhalten eine Fehlermeldung:

{"error": {"root_cause": [{"type": "security_exception", "reason": "fehlendes Authentifizierungstoken für REST-Anforderung [/]", "header": {"WWW-Authenticate": "Basic Realm" = "security" charset = "UTF-8"}}], "type": "security_exception", "reason": "fehlendes Authentifizierungstoken für REST-Anforderung [/]", "header": {" WWW-Authentifizierung ":" Basic Realm = "Sicherheit" Zeichensatz = "UTF-8"}}, "Status": 401}

Welches ist genau das, was Sie wollen (kein Benutzername und Passwort geben, so ist kein Zugriff erlaubt)

Sehr wichtig zu beachten :

  1. Beim ElasticStart werden Preforms erstellt Bootstrap checks( https://www.elastic.co/guide/en/elasticsearch/reference/6.8/bootstrap-checks.html ).

  2. Bei der Durchführung dieser Prüfungen besteht ein Unterschied Elasticzwischen dem Modus "Entwicklung" und "Produktion" .

  3. Wenn elasticim productionModus ausgeführt wird, reichen diese Konfigurationen nicht aus (die Bootstrap-Prüfung schlägt fehl und die Datenbank funktioniert nicht). Sie müssen auch SSL-Verschlüsselungskonfigurationen zwischen Knoten hinzufügen. Lesen Sie mehr: https://www.elastic.co/guide/en/elasticsearch/reference/6.8/security-settings.html

Aaron_ab
quelle