Back to top

Eine Referenz-Architektur für Suchsysteme mit Document-Level-Security

Von Paul Nelson, leitender Architekt bei Search Technologies

 

Dies ist der dritte Artikel unserer Reihe der "Graduate Level Courses" zu Document-Level-Security in der Unternehmenssuche. Im vorangehenden Artikel haben wir einen Modellvergleich Early Binding gegen Late Binding angestellt.

 

Die Referenz-Architektur

Im unten stehenden Diagramm wird eine empfohlene Referenz-Architektur für Document-Level-Security in Suchmaschinen gezeigt. (Zum Vergrößern anklicken)

 

 

Man sollte auch beachten, dass jegliche Arbeit an der Document-Level-Security komplett unabhängig von der Suchmaschine implementiert werden kann. 

 

Was wird von der Contentquelle benötigt?

1. APIs zum Abrufen aller Dokumente mit Metadaten und Access Control Lists (ACLs)

  • Das umfasst auch alle ACLs und Metadaten, die notwendig sind, um das von der Contentquelle vorgeschriebene Sicherheitsmodell zu implementieren, darunter:
    • Parent-ACLs (wenn vorhanden)
    • Andere Metadaten für Sicherheit, wie z.B. Kennzeichnung "is public"Dokument-ACLs
    • Andere Metadaten für Sicherheit, wie z.B. Kennzeichnung "is public"

2. APIs zum Abrufen der Benutzer/Gruppenmitgliedschaft

  • Dies kann entweder als einzelner Export aller Gruppenmitgliedschaften geschehen (meist empfohlen), oder nach Benutzer

Was wird von der Suchmaschine benötigt?

  • Die Fähigkeit, Daten separat vom Text des Dokuments zu indexieren
  • Die Fähigkeit, boolesche Abfragen auf ACL-Feldern auszuführen, einschließlich:
    • OR() - absolute Anforderung
    • NOT() ist erforderlich, wenn die Contentquelle Deny ACLs zum Verweigern verwendet
    • AND() ist nützlich (aber nicht erforderlich), wenn die Contentquelle hierarchische ACLs verwendet
  • Die Fähigkeit, sehr große Abfragen auszuführen (Hunderte Begriffe)

Im Rest dieses Dokuments werden die einzelnen Abschnitte der Referenz-Architektur detaillierter beschrieben. 

 

Der Algorithmus

Wie bei den meisten Algorithmen für Suchmaschinen besteht auch das Implementieren der Document-Level-Security aus zwei Teilen: Indexieren und Abfragen. 

 

Der Algorithmus, Teil 1: Pfad zum Indexieren 

Das Indexieren wird komplett durch den Konnektor übernommen:

1. Contentquelle nach allen Dokumenten durchsuchen, die indexiert werden sollen

2. Bei jedem Dokument:

  • Dokumenteninhalt abrufen und Text extrahieren
  • Sonstige Metadaten des Dokuments abrufen (Titel, Autor, Datum der letzten Änderung usw.)
  • Access Control Lists (ACLs) und andere Sicherheits-Metadaten abrufen
  • ACLs und Sicherheits-Metadaten in Sicherheitsfelder umwandeln, wie oben angegeben:
    • "isPublic" = wahr wenn das Dokument für jeden frei verfügbar ist (wenn dieses Feld wahr ist, werden alle anderen Felder ignoriert)
    • "denyACLs" für Benutzer und Gruppen, denen Lesezugriff explizit verweigert wurde (hat Vorrang vor allen anderen ACL-Feldern)
    • "allowACLs" für Benutzer und Gruppen, denen Lesezugriff auf das Dokument genehmigt wurde (einschließlich vererbter ACLs, wenn vorhanden)
    • "parentACLs" für alle Benutzer und Gruppen aus einem übergeordneten Container (wie der Datenbank oder dem Space), die auch geprüft werden müssen, ehe Zugriff genehmigt wird

3. Alle Dokumente werden dann an den Indexer geleitet.

  • ACL-Felder werden als standardmäßige Suchmaschinenfelder indexiert.

 

Bitte beachten Sie, dass der Konnektor eventuell auch inkrementelles Indexieren, Name Mangling, ACL-Codierung oder andere Verarbeitungsschritte vornehmen muss, abhängig von den Anforderungen der Contentquelle und der Suchmaschine. Weitere Details finden Sie im Artikel "Indexieren von ACLs". 

 

Der Algorithmus, Teil 2: Abfragepfad 

Early Binding erfordert das Modifizieren der Abfrage, ehe diese eingereicht und von der Suchmaschine ausgeführt wird. Dies kann sowohl im Server der Suchmaschine als auch an einem externen Ort geschehen. Der dafür verwendte Algorithmus funktioniert wie folgt:

1. Authentifizierung der Abfrageanforderung

  • Dies wird oft durch die Webanwendung vorgenommen, die die Benutzeroberfläche verwaltet
  • Es gibt mehrere verfügbare Technologien für die Authentifizierung, darunter:
    • Grundlegende Authentifizierung: Abfrage von Benutzername und Passwort
    • Single Sign-on (SSO), Verwendung von NTLM, NTLM2, Kerberos oder anderen Tools wie SiteMinder
  • Das Ergebnis ist der Benutzername des Benutzers, der die Abfrage einreicht

2. Sammeln aller Gruppen, in denen der Benutzer Mitglied ist (auch "Gruppenerweiterung" genannt), einschließlich:

  • Gruppen von LDAP oder Active Directory
  • Gruppen von allen Contentquellen, die in der Suchmaschine indexiert werden
  • Verschachtelte Gruppen (wenn Gruppen Mitglied in anderen Gruppen sind)

Um diese Aufgabe schnell und zuverlässig vorzunehmen, wird meist ein Gruppencache benötigt.

3. Modifizieren der Abfrage

  • Die Abfrage des ursprünglichen Benutzers wird modifiziert, sodass alle Dokumente herausgefiltert werden, für die der Benutzer keinen Lesezugriff hat
  • Der boolsche Ausdruck für den Sicherheitsfilter wäre:

isPublic:true OR 

    ( parentACLs:( user OR group1 OR group2 . . . )   AND 

         allowACLs:( user OR group1 OR group2 . . . ) AND NOT 

         denyACLs:( user OR group1 OR group2 . . . ) 

    ) 

4. Ausführen der Abfrage

  • Sobald die Abfrage korrekt modifiziert wurde, kann sie wie jede andere Suchabfrage ausgeführt werden

5. Ausgeben der Ergebnisse

  • Die standardmäßigen Suchergebnisse werden ausgegeben, einschließlich der Gesamtzahl der Dokumente und Facetten (mit Facettenwerten und Anzahl) und Suchergebnisse mit Metadaten
  • Da die Ergebnisse durch den Sicherheitsfilter gefiltert wurden, werden nur Dokumente ausgegeben und in die Zählung aufgenommen, auf die der Benutzer Lesezugriff hat

Es ist von kritischer Bedeutung, dass diese Schritte in einem sicheren Bereich des Servers vorgenommen werden, entweder auf dem Server der Benutzeroberfläche oder auf dem Server der Suchmaschine selbst. Das ist wichtig, damit der Benutzer nicht die URL für die HTTP-Transaktion (oder andere Daten) ändern kann, um sich Zugriff auf Dokumente zu verschaffen, auf die er keinen Zugriff haben soll.

Wir haben jetzt die Hälfte unseres Graduate Course zu Document-Level-Security in Unternehmenssuchen hinter uns. Im nächsten Artikel werden wir auf das Indexieren der Access Control Lists eingehen.

 

<< Early-binding - Late-binding                                                                  Indexieren von ACLs >>               

0