BlogRAG
Wie ein RAG-Assistent keine Dokumente preisgibt, die Nutzer nicht öffnen dürfen
Filtern Sie das Retrieval nach der Identität der fragenden Person, anhand von Zugriffslisten, die aus dem Quellsystem in den Index übernommen werden, und belegen Sie das mit Tests, die als Nutzer ohne Berechtigung laufen. Eine Anweisung im System-Prompt ist keine Zugriffskontrolle. Sobald eine geschützte Textstelle beim Modell ankommt, kann sie in der Antwort landen.
Wo Berechtigungen verloren gehen
Im Quellsystem liegen ein Dokument und seine Zugriffsliste zusammen. Eine RAG-Pipeline kopiert den Text heraus, zerlegt ihn in Chunks, berechnet Embeddings und speichert alles an einem anderen Ort. Jeder Schritt kann die Verbindung zwischen einem Chunk und den Personen, die ihn lesen dürfen, kappen. Die Schwachstellen sind vorhersehbar:
- Die Ingestion läuft unter einem Dienstkonto, das alles lesen darf, und der Index speichert den Text ohne Zugriffsliste
- Chunks übernehmen die Berechtigungen zum Zeitpunkt der Indexierung, und spätere Änderungen im Quellsystem erreichen sie nie
- Die Anwendung fragt den Index mit eigenen Zugangsdaten ab und gibt die Identität der Person nie weiter
- Gruppenmitgliedschaften werden einmal aufgelöst und zwischengespeichert, sodass jemand, der ein Team verlassen hat, weiter Zugriff hat
- Logs, Caches und Evaluierungsdaten halten geschützten Text außerhalb jeder Zugriffskontrolle vor
OWASP zählt unbefugten Zugriff und Datenabfluss zwischen Gruppen, die sich einen Vektorspeicher teilen, zu den wichtigsten Schwachstellen embedding-basierter Systeme. Die Empfehlung lautet: berechtigungsbewusstes Retrieval mit nach Nutzern oder Gruppen getrennten Daten.
Beim Retrieval filtern
Die Designregel ist kurz: Die Suchanfrage selbst liefert nur Chunks, die die Person lesen darf, sodass geschützter Text nie in den Prompt gelangt. Suchmaschinen setzen das unterschiedlich um, und die Details bestimmen, was Sie testen müssen.
Die Document-Level Security von Elasticsearch hängt eine Abfrage an eine Rolle, und diese Abfrage lässt sich mit Attributen der aktuellen Person als Vorlage gestalten. Hat jemand mehrere Rollen, werden die Rollenabfragen mit ODER verknüpft, sodass eine weit gefasste Rolle die engen aufhebt. Azure AI Search bietet ACL- und RBAC-Durchsetzung zur Abfragezeit, die Microsoft als Preview kennzeichnet, ohne SLA und nicht für Produktionslasten empfohlen. Die Anwendung übergibt das Token der Person, und der Dienst baut aus Berechtigungsfeldern im Index einen Sicherheitsfilter.
Welche Suchmaschine Sie auch nutzen: Die Identität muss aus der authentifizierten Sitzung stammen. Sie darf nie aus einem Parameter kommen, den die Person, das Modell oder ein Tool-Aufruf setzen kann.
Berechtigungsänderungen kommen verspätet an
Wer Zugriffslisten in einen Index kopiert, schafft eine zweite Kopie, die veralten kann. Die Azure-Dokumentation ist hier eindeutig: Ein geplanter SharePoint-Indexer übernimmt Berechtigungsänderungen auf Elementebene bei jedem Lauf, aber geerbte Änderungen an Site, Bibliothek oder Ordner erfordern eine erneute Synchronisierung, und per Push geladene Inhalte müssen neu eingespielt werden. Bis dahin kann jemand, dem der Zugriff entzogen wurde, das Dokument weiter abrufen.
Legen Sie für jede Quelle fest, wie lang dieses Zeitfenster sein darf, und richten Sie den Synchronisierungsplan danach aus. Für besonders sensible Inhalte können Sie zusätzlich zur Abfragezeit beim Quellsystem prüfen, ob die wenigen Dokumente, die gleich verwendet werden, lesbar sind, auf Kosten zusätzlicher Latenz.
Lesen Sie auch die aktuellen Grenzen Ihrer Suchmaschine nach. Azure dokumentiert höchstens 32 ACL-Einträge pro Datei für ADLS Gen2 und 1.000 Berechtigungseinträge pro Datei für SharePoint, und Einträge über dem Limit werden möglicherweise nicht durchgesetzt. Elastic weist darauf hin, dass Nutzer mit Document-Level Security weiterhin Aggregationen ausführen können, die Begriffe oder Anzahlen aus Dokumenten offenlegen, die sie nicht lesen dürfen.
Negativtests für jede Art von Nutzer
Die meisten RAG-Testsets prüfen, ob die richtige Antwort zurückkommt. Berechtigungstests prüfen das Gegenteil und brauchen echte Testidentitäten mit bekannten Rechten. Prüfen Sie die abgerufenen Dokumente ebenso wie die Antwort, denn ein Modell kann eine geschützte Textstelle umschreiben, ohne sie zu nennen.
# Permission test cases (hypothetical identities and files) # Each case runs through the full application path as a real test user. - id: salary-bands-denied user: test-engineer-01 # member of Engineering only question: "What is the salary band for senior engineers?" must_not_retrieve: [hr/compensation-bands.pdf] expect: decline - id: removed-member user: test-former-finance # removed from Finance in the source system question: "Summarise the Q3 board pack" must_not_retrieve: [finance/board-pack-q3.pptx] expect: decline run_after: permission change has synced - id: missing-identity user: none # request without a user token question: "List open incident reports" must_not_retrieve: [any restricted document] expect: error or public results only - id: allowed-control user: test-hr-02 # HR member, should succeed question: "What is the salary band for senior engineers?" must_retrieve: [hr/compensation-bands.pdf]
Der letzte Fall ist genauso wichtig wie die anderen, denn ein Filter, der alle blockiert, besteht jeden Negativtest. Führen Sie die Tests nach jeder Änderung an Ingestion, Gruppenzuordnung oder Suchkonfiguration aus, und planen Sie den Fall des entfernten Mitglieds nach einer echten Berechtigungsänderung im Quellsystem ein.
Bei unklarer Identität sicher ablehnen
Schlägt die Auflösung der Identität fehl, ist das sichere Ergebnis: keine geschützten Treffer. Azure gibt an, dass der Dienst bei fehlgeschlagener ACL-Auswertung, etwa wenn Microsoft Graph nicht erreichbar ist, einen Fehler statt eines teilweise gefilterten Ergebnisses liefert. Microsoft hat das Verhalten außerdem im November 2025 geändert: Frühere Preview-API-Versionen lieferten bei Aufrufen mit Dienstschlüssel und ohne Nutzertoken alle Dokumente. Anwendungen, die gegen diese Versionen gebaut wurden, sollten Sie prüfen.
Wenden Sie dieselbe Regel in Ihrem eigenen Code an. Ein fehlendes Token, eine unbekannte Gruppe oder ein Timeout bei der Berechtigungsprüfung endet mit einer Ablehnung und einem Logeintrag, der Identität und betroffene Dokumente festhält, ohne den geschützten Text selbst zu speichern.
Wenn Sie einen bestehenden Assistenten prüfen, beginnen Sie mit dem Fall der fehlenden Identität: Rufen Sie die Retrieval-Schicht ohne Nutzertoken auf und sehen Sie sich an, was zurückkommt.
Fragen
Reicht es, dem Modell zu sagen, dass es geschützte Inhalte nicht preisgeben soll?
Nein. Anweisungen im Prompt können ignoriert oder durch Text in abgerufenen Dokumenten ausgehebelt werden. Geschützte Textstellen müssen herausgefiltert werden, bevor der Prompt entsteht.
Sollte jede Abteilung einen eigenen Index bekommen?
Getrennte Indizes sind leicht nachvollziehbar, wenn der Zugriff klaren Grenzen folgt, etwa ein Index pro Kunde. Schwierig wird es, wenn Dokumente individuelle Zugriffslisten quer über Abteilungen haben. Dann ist es einfacher, die Zugriffsliste mit jedem Chunk zu speichern und danach zu filtern.
Übernehmen fertige Assistenzprodukte das für uns?
Viele berücksichtigen Berechtigungen für die Quellen, die sie nativ anbinden. Prüfen Sie, wie sie mit eigenen Quellen umgehen, wie schnell Berechtigungsänderungen ankommen und ob die Funktion allgemein verfügbar oder noch in der Preview ist, und führen Sie dieselben Negativtests aus.
Verwandte Leistungen
RAG-Entwicklung
Assistenten, die aus Ihren internen Dokumenten antworten, mit Berechtigungen, Quellenangaben und Tests anhand Ihrer eigenen Fragen.
KI-Engineering und -Architektur
Assistenten, Sprachschnittstellen und Agenten in den Produkten, die Sie verkaufen, samt Serving und Retrieval darunter.
MCP-Server-Entwicklung
MCP-Server, die freigegebene interne APIs mit KI-Assistenten verbinden, mit engen Berechtigungen, Freigaben für Änderungen und Tests.
Mehr aus dem Blog
Quellen für RAG vorbereiten
Wie Sie entscheiden, welche Dokumente ein Retrieval-Assistent nutzen soll, wem jede Quelle gehört und wie Sie fehlende Antworten vor der Indexierung finden.
Veraltete Dokumente in RAG
Wie ein Retrieval-Assistent aktuell bleibt, wenn Dokumente bearbeitet, umbenannt, eingeschränkt oder gelöscht werden, mit Sync-Design und Canary-Tests, die Altinhalte ausschließen.
RAG-Übergabe in den Betrieb
Was ein RAG-Dienstleister übergeben sollte, damit Ihr Team das System betreiben und ändern kann: Konnektoren, Konfiguration, Evaluierung, Runbooks, Zuständigkeiten, Probelauf.
Mit einem Engineer sprechen
Bringen Sie eine Aufgabe mit, die Sie verbessern möchten. Das Gespräch dauert 30 Minuten und braucht keinen Zugriff auf Ihre Systeme oder Ihre Daten.
Die Buchung läuft über Google Kalender.
Lieber zuerst schreiben? Hinterlassen Sie Ihre E-Mail-Adresse und ein paar Zeilen, dann antworten wir mit Terminvorschlägen.
Sehen Sie in Ihrem E-Mail-Programm nach dem Entwurf
Senden Sie ihn von dort ab, und ein Engineer antwortet Ihnen persönlich mit Terminvorschlägen für ein 30-minütiges Gespräch. Hat sich kein Entwurf geöffnet, schreiben Sie uns an miki@cloudsail.com.