Wie definiere ich den Sicherheitszugriff in Elasticsearch? Ich habe das Elasticsearch-Head-Plugin, aber Ihr Zugriff erfordert keine Sicherheit.
Antworten:
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 .
<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>
Elasticsearch hat jetzt das Sicherheits-Plugin http://www.elasticsearch.org/blog/shield-know-security-coming-soon/
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.
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.
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.
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.
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.
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
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:
Ab Elastic
Version 6.8 wurden einige Sicherheitsfunktionen kostenlos (siehe: https://www.elastic.co/blog/security-for-elasticsearch-is-now-free ).
"xpack.security.enabled=true"
.Wenn Sie beispielsweise eine docker-compose.yml
Datei verwenden, fügen Sie die folgende Zeile hinzu environment
:
elasticsearch:
image: elastic:6.8.0
environment:
- "xpack.security.enabled=true"
Als Nächstes müssen Sie angeben, elasic
welches Kennwort der Standardbenutzer (der als "elastisch" bezeichnet wird) zur Authentifizierung akzeptieren soll. Sie tun dies mit der ELASTIC_PASSWORD
Umgebungsvariablen. 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 :
Beim Elastic
Start werden Preforms erstellt Bootstrap checks
( https://www.elastic.co/guide/en/elasticsearch/reference/6.8/bootstrap-checks.html ).
Bei der Durchführung dieser Prüfungen besteht ein Unterschied Elastic
zwischen dem Modus "Entwicklung" und "Produktion" .
Wenn elastic
im production
Modus 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