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, und HEAD.
  • 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)

You Might Also Like

Vom Suchunternehmen zum praktischen KI-Pionier: Unsere Vision für 2025 und darüber hinaus

CEO Mike Sinoway gibt Einblicke in die Zukunft der KI und stellt...

Read More

Wenn KI schief geht: Fehlschläge in der realen Welt und wie man sie vermeidet

Lassen Sie nicht zu, dass Ihr KI-Chatbot einen 50.000 Dollar teuren Tahoe...

Read More

Lucidworks Kernpakete: Branchenoptimierte KI-Such- und Personalisierungslösungen

Entdecken Sie unsere umfassenden Core Packages, die Analytics Studio, Commerce Studio und...

Read More

Quick Links