
Solr mit Basisauthentifizierung absichern
Beispiele und eine Anleitung, wie Sie Solr am besten mit der Basisauthentifizierung sichern.
Lucidworks hat sich über Solr hinaus entwickelt und bietet die Lucidworks Platform, unsere KI-gestützte Suchlösung für Unternehmen. Entdecken Sie, wie wir Ihnen helfen können, Ihre Such- und Entdeckungserfahrungen zu verbessern.
Vor Version 5.2 verfügte Apache Solr über keine speziellen Sicherheitsfunktionen. Wenn Sie Ihre Solr-Installation absichern wollten, mussten Sie auf externe Tools und Lösungen zurückgreifen, die proprietär und in Ihrem Unternehmen vielleicht nicht so bekannt waren. Mit Solr 5.2 wurde eine Sicherheits-API eingeführt und Solr 5.3 wird über voll funktionsfähige Authentifizierungs- und Autorisierungs-Plugins verfügen, die Basic Authentication und „Berechtigungsregeln“ verwenden, die vollständig von ZooKeeper gesteuert werden.
Vorbehalte
- Bei der einfachen Authentifizierung werden die Anmeldedaten im Klartext gesendet. Wenn die Kommunikationskanäle nicht sicher sind, können Angreifer das Kennwort erfahren. Sie sollten Ihre Kommunikation dennoch mit SSL sichern.
- ZooKeeper ist das schwächste Glied in diesem Sicherheitssystem. Stellen Sie sicher, dass die Schreibrechte für ZooKeeper nur geeigneten Benutzern gewährt werden.
- Es ist immer noch nicht sicher, Ihre Solr-Server einem ungeschützten Netzwerk auszusetzen.
Aktivieren der Basisauthentifizierung
Schritt 1: Speichern Sie das folgende JSON in einer Datei namens security.json
:
{ "authentication":{ "class":"solr.BasicAuthPlugin", "credentials":{"solr":"IV0EHq1OnNrj6gvRCwvFwTrZ1+z1oBbnQdiVC3otuq0= Ndd7LKvVBAaZIF0QAVi1ekCfAJXr1GGfLtRUXhgrF8c="} }, "authorization":{ "class":"solr.RuleBasedAuthorizationPlugin", "user-role":{"solr":"admin"}, "permissions":[{"name":"security-edit", "role":"admin"}] }}
Die obige Konfiguration bewirkt Folgendes:
- Aktivieren Sie Authentifizierung und Autorisierung
- Ein Benutzer namens
'solr'
wird mit einem Kennwort erstellt'SolrRocks'
- Dem Benutzer
'solr'
wird eine Rolle zugewiesen'admin'
- Die Berechtigung zum Bearbeiten der Sicherheit ist jetzt auf die Rolle
'admin'
beschränkt. Alle anderen Ressourcen sind ungeschützt und der Benutzer sollte weitere Regeln konfigurieren, um sie zu schützen. - Dies blockiert keinen unauthentifizierten Zugriff auf Pfade mit Ausnahme von Sicherheits-Editiervorgängen. Es ist jedoch möglich, den gesamten unauthentifizierten Zugriff zu blockieren, indem Sie das Attribut
blockUnknown=true
zum Authentifizierungsabschnitt hinzufügen
Schritt 2: Hochladen in ZooKeeper
server/scripts/cloud-scripts/zkcli.sh -zkhost localhost:9983 -cmd putfile /security.json security.json
Alle Solr-Knoten beobachten die /security.json
und diese Änderung spiegelt sich sofort im Verhalten der Knoten wider. Sie können den Vorgang mit den folgenden Befehlen überprüfen.
curl http://localhost:8983/solr/admin/authentication curl http://localhost:8983/solr/admin/authorization
Diese Aufrufe sollten mit den entsprechenden Abschnitten in der hochgeladenen json-Datei zurückkommen.
BasicAuthPlugin
Die BasicAuthPlugin
authentifiziert Benutzer mit dem HTTP-Basic-Authentifizierungsmechanismus. Die Authentifizierung erfolgt anhand des Benutzernamens und des gesalzenen sha256-Hash des in ZooKeeper gespeicherten Passworts.
Berechtigungsnachweise bearbeiten
Es gibt eine API zum Hinzufügen, Bearbeiten oder Entfernen von Benutzern. Bitte beachten Sie, dass die unten gezeigten Befehle an diese spezielle Basic-Authentifizierungs-Implementierung gebunden sind und dieselbe Reihe von Befehlen nicht gültig ist, wenn die Implementierungsklasse nicht solr.BasicAuthPlugin
ist.
Beispiel 1: Einen Benutzer hinzufügen und/oder ein Passwort bearbeiten
curl --user solr:SolrRocks http://localhost:8983/solr/admin/authentication -H 'Content-type:application/json'-d '{ "set-user": {"tom" : "TomIsCool" , "harry": "HarrysSecret"}}'
Beispiel 2: Einen Benutzer löschen
curl --user solr:SolrRocks http://localhost:8983/solr/admin/authentication -H 'Content-type:application/json'-d '{ "delete-user": ["tom", "harry"]}'
Regelbasiertes Autorisierungs-Plugin
Dieses Plugin stützt sich auf die in ZooKeeper gespeicherte Konfiguration, um festzustellen, ob ein bestimmter Benutzer eine Anfrage stellen darf. Die Konfiguration besteht aus zwei Abschnitten:
- Eine Zuordnung von Benutzern zu Rollen. Eine Rolle kann eine beliebige benutzerdefinierte Zeichenfolge sein.
- Eine Reihe von Berechtigungen und die Regeln, wer auf was zugreifen darf.
Was ist eine Erlaubnis?
Eine Berechtigung ist eine White-List-Rolle, die auf eine Ressource zugreifen kann. Die meisten bekannten Ressourcen haben vordefinierte Namen.
Wie wird eine Berechtigung abgeglichen?
Bei einer eingehenden Anfrage werden die Berechtigungen in der Reihenfolge geprüft, in der sie in der Konfiguration erscheinen. Die erste Berechtigung, die passt, wird angewendet. Wenn Sie mehrere Berechtigungen haben, die einer bestimmten Anfrage entsprechen können, setzen Sie die strengste Berechtigung an die erste Stelle. Wenn es beispielsweise eine allgemeine Berechtigung gibt, die besagt, dass jeder mit der Rolle 'dev'
Schreibvorgänge in jeder Sammlung durchführen kann, Sie aber Schreibvorgänge in der Sammlung .system
nur auf den Administrator beschränken möchten, fügen Sie die Berechtigung für letztere vor der allgemeineren Berechtigung hinzu.
Wenn es für eine bestimmte Anfrage keine entsprechende Berechtigung gibt, dann ist sie für alle zugänglich
Bekannte Berechtigungen
Es gibt ein paar Komfortberechtigungen, die häufig verwendet werden. Sie haben feste Standardwerte für bestimmte Attribute. Wenn Sie eine der folgenden Berechtigungen verwenden, geben Sie einfach die Rollen an, die auf diese Berechtigungen zugreifen können. Der Versuch, andere Attribute für die folgenden Berechtigungen anzugeben, führt zu einem Fehler.
- security-edit: Sicherheitskonfiguration bearbeiten
- security-read: Lesen der Sicherheitskonfiguration
- schema-edit: Schema einer beliebigen Sammlung bearbeiten
- schema-read: Schema einer beliebigen Sammlung lesen
- config-read: Solrconfig einer beliebigen Sammlung lesen
- config-edit: Konfiguration einer beliebigen Sammlung bearbeiten
- collection-admin-read: Leseoperationen auf
/admin/collections
wie LIST, CLUSTERSTATUS - collection-admin-edit: Alle Operationen auf
/admin/collections
, die den Zustand des Systems verändern können - core-admin-read: Leseoperationen auf der core admin API
- core-admin-edit: Core-Admin-Befehle, die den Systemzustand verändern können
- aktualisieren: Aktualisierungsvorgang für eine beliebige Sammlung
- read: Jeder Read-Handler wie
/select
,/get
in jeder Sammlung - all: Jede Anfrage, die an Solr geht
Benutzerdefinierte Berechtigungen
Es ist möglich, eine Berechtigung zu erstellen, indem Sie die Attribute einer Anfrage und die Rollen angeben, die eine solche Anfrage stellen dürfen. Die Attribute sind alle mehrwertig. Die Attribute der Anfrage sind:
- Sammlung: Der Name der Sammlung, auf die diese Regel angewendet werden soll. Wenn dieser Wert nicht angegeben wird, gilt sie für alle Sammlungen.
- Pfad: Dies ist der Name des Handlers für die Anfrage. Es können auch Wildcard-Präfixe verwendet werden, z. B. gilt
/update/*
für alle Handler unter/update/
. - Methode: Für diese Berechtigung gültige HTTP-Methoden. Erlaubte Werte sind
GET
,POST
,PUT
,DELETE
, undHEAD
. - params: Dies sind die Namen und Werte der Anfrageparameter. Zum Beispiel schränkt
"params":{"action":["LIST","CLUSTERSTATUS"]}
ein, dass die Regel nur erfüllt wird, wenn der Wert des Parameters"action"
einer der Werte"LIST"
oder"CLUSTERSTATUS"
ist.
Berechtigungen zum Bearbeiten
Es gibt eine API zum Bearbeiten der Berechtigungen. Bitte beachten Sie, dass die folgenden Befehle nur für die RulesBasedAuthorizationPlugin
gültig sind.
Die Befehle zur Verwaltung von Berechtigungen sind:
set-permission
: Erstellen Sie eine neue Berechtigung, überschreiben Sie eine vorhandene Berechtigungsdefinition, oder weisen Sie einer Rolle eine vordefinierte Berechtigung zu.update-permission
: einige Attribute einer bestehenden Berechtigungsdefinition aktualisieren.delete-permission
: eine Berechtigungsdefinition entfernen.
Beispiel 1: Rollen hinzufügen oder entfernen
curl --user solr:SolrRocks http://localhost:8983/solr/admin/authorization -H 'Content-type:application/json' -d '{ "set-user-role": {"tom":["admin","dev"}, "set-user-role": {"harry":null} }'
Beispiel 2: Hinzufügen einer wohlbekannten Berechtigung
curl --user solr:SolrRocks http://localhost:8983/solr/admin/authorization -H 'Content-type:application/json'-d '{ "set-permission": {"name": "update", "role": "dev"} }'
Beispiel 3: Hinzufügen oder Entfernen einer benutzerdefinierten Berechtigung
curl --user solr:SolrRocks http://localhost:8983/solr/admin/authorization -H 'Content-type:application/json'-d '{ "set-permission": { "name": "a-custom-permission-name", "collection": "gettingstarted", "path":"/handler-name" "role": "dev" }, "delete-permission": "permission-name" }'
Bitte beachten Sie, dass die "set-permission"
Ihre Berechtigung vollständig ersetzt. Verwenden Sie die Operation "update-permission"
, um eine Berechtigung teilweise zu aktualisieren. Verwenden Sie die Eigenschaft 'before'
, um Ihre Berechtigungen neu zu ordnen
Beispiel 4: Beschränkung der Admin-Operationen für Sammlungen (nur Schreibvorgänge) auf einen Administrator
curl --user solr:SolrRocks http://localhost:8983/solr/admin/authorization -H 'Content-type:application/json' -d '{ "set-permission" : {"name": "collection-admin-edit", "role": "admin"}}'
Dadurch wird sichergestellt, dass die Schreiboperationen nur von einem Administrator durchgeführt werden können. Wenn Sie versuchen, eine sichere Operation ohne Anmeldeinformationen mit einem Browser durchzuführen, werden Sie jetzt nach Benutzername und Passwort gefragt:

Beispiel 5: Alle Schreibzugriffe auf alle Sammlungen auf die Rolle „Dev“ beschränken
curl --user solr:SolrRocks http://localhost:8983/solr/admin/authorization -H 'Content-type:application/json' -d '{ "set-permission" : {"name": "update", "role": "dev"}}'
Beispiel 6 : Schreibzugriff auf die Sammlung .system
auf Admin beschränken
curl --user solr:SolrRocks http://localhost:8983/solr/admin/authorization -H 'Content-type:application/json' -d '{ "set-permission" : {"name": "system-coll-write", "collection": ".system" "path":"/update/*", "before":3, "role": "admin"}}'
Bitte beachten Sie das Attribut 'before'
, das sicherstellt, dass diese Berechtigung direkt vor der Berechtigung bei Index 3 eingefügt wird.
Beispiel 7 : Aktualisieren Sie die obige Berechtigung, um den Pfad /blob* hinzuzufügen
curl --user solr:SolrRocks http://localhost:8983/solr/admin/authorization -H 'Content-type:application/json' -d '{ "update-permission" : {"name": "system-coll-write", "path": ["/update/*","/blob/*"]}}'
Absicherung von Inter-Node-Anrufen
BasicAuthPlugin verwendet den Solr-eigenen Mechanismus zur Sicherung von Aufrufen zwischen den Knoten mithilfe der PKI-Infrastruktur. (Das ist ein Thema für einen anderen Blog)