Erste Schritte mit der Sicherheit von Chatdokumenten für Python
Wenn Sie eine -Chatanwendung mithilfe des RAG-Musters (Retrieval Augmented Generation) mit Ihren eigenen Daten erstellen, stellen Sie sicher, dass jeder Benutzer basierend auf seinen Berechtigungen eine Antwort erhält. Befolgen Sie die Schritte in diesem Artikel, um Ihrer Chat-App Dokumentzugriffssteuerung hinzuzufügen.
Autorisierter Benutzer: Diese Person sollte Zugriff auf Antworten haben, die in den Dokumenten der Chat-App enthalten sind.
Nicht autorisierter Benutzer: Diese Person sollte keinen Zugriff auf Antworten von gesicherten Dokumenten haben, die sie nicht sehen dürfen.
Anmerkung
In diesem Artikel wird mindestens eine KI-App-Vorlage als Grundlage für die Beispiele und Anleitungen im Artikel verwendet. KI-App-Vorlagen bieten Ihnen gut gepflegte Referenzimplementierungen, die einfach bereitzustellen sind. Sie tragen dazu bei, einen qualitativ hochwertigen Ausgangspunkt für Ihre KI-Apps zu gewährleisten.
Architekturübersicht
Ohne Dokumentsicherheitsfunktionen verfügt die Unternehmens-Chat-App über eine einfache Architektur unter Verwendung von Azure AI Search und Azure OpenAI. Eine Antwort wird aus Abfragen zu Azure AI Search bestimmt, in der die Dokumente gespeichert werden, in Kombination mit einer Antwort aus einem Azure OpenAI GPT-Modell. In diesem einfachen Fluss wird keine Benutzerauthentifizierung verwendet.
Um die Sicherheit für die Dokumente hinzuzufügen, müssen Sie die Unternehmenschat-App aktualisieren:
- Fügen Sie der Chat-App die Clientauthentifizierung mit Microsoft Entra hinzu.
- Fügen Sie serverseitige Logik hinzu, um einen Suchindex mit Benutzer- und Gruppenzugriff aufzufüllen.
Azure KI-Suche stellt keine nativen Berechtigungen auf Dokumentebene bereit und kann Suchergebnisse innerhalb eines Indexes nicht an den Benutzerberechtigungen ausrichten. Stattdessen kann Ihre Anwendung Suchfilter verwenden, um sicherzustellen, dass auf ein Dokument für einen bestimmten Benutzer oder eine bestimmte Gruppe zugegriffen werden kann. In Ihrem Suchindex sollte jedes Dokument über ein filterbares Feld verfügen, in dem Benutzer- oder Gruppenidentitätsinformationen gespeichert werden.
Da die Autorisierung nicht nativ in Azure AI Search enthalten ist, müssen Sie ein Feld zum Speichern von Benutzer- oder Gruppeninformationen hinzufügen und dann Dokumente filtern, die nicht übereinstimmen. Um diese Technik zu implementieren, müssen Sie:
- Erstellen Sie ein Dokumentzugriffssteuerungsfeld in Ihrem Index, das die Details von Benutzern oder Gruppen mit Dokumentzugriff speichert.
- Füllen Sie das Zugriffssteuerungsfeld des Dokuments mit den relevanten Benutzer- oder Gruppendetails auf.
- Aktualisieren Sie dieses Zugriffssteuerungsfeld, wenn Änderungen an Benutzer- oder Gruppenzugriffsberechtigungen vorhanden sind.
Wenn die Indexaktualisierungen mit einem Indexer geplant wurden, werden Änderungen bei der nächsten Ausführung des Indexers integriert. Wenn Sie keinen Indexer verwenden, müssen Sie manuell neu indexieren.
In diesem Artikel wird die Sicherung von Dokumenten in Azure KI-Suche mit Beispielskripts durchgeführt, die Sie als Suchadministrator ausführen würden. Die Skripts ordnen ein einzelnes Dokument einer einzelnen Benutzeridentität zu. Sie können diese Skripts an Ihre eigenen Sicherheits- und Produktionsanforderungen anpassen, um sie entsprechend Ihren Anforderungen zu skalieren.
Ermitteln der Sicherheitskonfiguration
Die Lösung stellt boolesche Umgebungsvariablen bereit, um Features zu aktivieren, die für die Dokumentsicherheit in diesem Beispiel erforderlich sind.
Parameter | Zweck |
---|---|
AZURE_USE_AUTHENTICATION |
Wenn diese Einstellung auf true festgelegt ist, ermöglicht sie die Anmeldung der Nutzer bei der Chat-App sowie die Authentifizierung des Azure App Service. Aktiviert Use oid security filter in den Entwicklungseinstellungen in der Chat-App. |
AZURE_ENFORCE_ACCESS_CONTROL |
Wenn diese Einstellung auf true festgelegt ist, ist eine Authentifizierung für den Dokumentzugriff erforderlich. Die Entwicklungseinstellungen für die Objekt-ID (OID) und die Gruppensicherheit sind aktiviert und so eingerichtet, dass sie nicht über die Benutzeroberfläche deaktiviert werden können. |
AZURE_ENABLE_GLOBAL_DOCUMENTS_ACCESS |
Wenn diese Einstellung auf true festgelegt ist, können authentifizierte Benutzer nach Dokumenten suchen, denen keine Zugriffssteuerung zugewiesen ist, auch wenn die Zugriffssteuerung erforderlich ist. Dieser Parameter sollte nur verwendet werden, wenn AZURE_ENFORCE_ACCESS_CONTROL aktiviert ist. |
AZURE_ENABLE_UNAUTHENTICATED_ACCESS |
Wenn diese Einstellung auf true festgelegt ist, können nicht authentifizierte Benutzer die App auch dann verwenden, wenn die Zugriffssteuerung erzwungen wird. Dieser Parameter sollte nur verwendet werden, wenn AZURE_ENFORCE_ACCESS_CONTROL aktiviert ist. |
Verwenden Sie die folgenden Abschnitte, um die in diesem Beispiel unterstützten Sicherheitsprofile zu verstehen. In diesem Artikel wird das Unternehmensprofil konfiguriert.
Enterprise: Erforderliches Konto + Dokumentfilter
Jeder Benutzer der Website muss angemeldet sein. Die Website enthält Inhalte, die für alle Benutzer öffentlich sind. Der Sicherheitsfilter auf Dokumentenebene wird auf alle Anfragen angewendet.
Umgebungsvariablen:
AZURE_USE_AUTHENTICATION=true
AZURE_ENABLE_GLOBAL_DOCUMENTS_ACCESS=true
AZURE_ENFORCE_ACCESS_CONTROL=true
Gemischte Verwendung: Optionales Konto + Dokumentfilter
Jeder Benutzer der Website kann angemeldet sein. Die Website enthält Inhalte, die für alle Benutzer öffentlich sind. Der Sicherheitsfilter auf Dokumentebene werden auf alle Anforderungen angewendet.
Umgebungsvariablen:
AZURE_USE_AUTHENTICATION=true
AZURE_ENABLE_GLOBAL_DOCUMENTS_ACCESS=true
AZURE_ENFORCE_ACCESS_CONTROL=true
AZURE_ENABLE_UNAUTHENTICATED_ACCESS=true
Voraussetzungen
Eine Entwicklungscontainerumgebung ist mit allen Abhängigkeiten verfügbar, die zum Abschließen dieses Artikels erforderlich sind. Sie können den Entwicklungscontainer in GitHub Codespaces (in einem Browser) oder lokal mit Visual Studio Code ausführen.
Um diesen Artikel zu verwenden, benötigen Sie die folgenden Voraussetzungen:
- Ein Azure-Abonnement. Kostenlos erstellen.
- Azure-Kontoberechtigungen: Ihr Azure-Konto muss über Folgendes verfügen:
- Berechtigung zum Verwalten von Anwendungen in Microsoft Entra ID.
-
Microsoft.Authorization/roleAssignments/write
-Berechtigungen, z. B. Benutzerzugriffsadministrator oder Besitzer.
Je nach bevorzugter Entwicklungsumgebung benötigen Sie weitere Voraussetzungen.
Öffnen Sie eine Entwicklungsumgebung
Beginnen Sie jetzt mit einer Entwicklungsumgebung, in der alle Abhängigkeiten installiert sind, um diesen Artikel abzuschließen.
GitHub Codespaces führt einen von GitHub verwalteten Entwicklungscontainer mit Visual Studio Code für Web als Benutzeroberfläche aus. Verwenden Sie für die einfachste Entwicklungsumgebung GitHub Codespaces, damit Sie die richtigen Entwicklertools und Abhängigkeiten vorinstalliert haben, um diesen Artikel abzuschließen.
Wichtig
Alle GitHub-Konten können GitHub Codespaces für bis zu 60 Stunden kostenlos jeden Monat mit zwei Kerninstanzen verwenden. Weitere Informationen finden Sie im Artikel zu monatlich enthaltener Speicherkapazität und Kernstunden in GitHub Codespaces.
Starten Sie den Vorgang zum Erstellen eines neuen GitHub-Codespace im
main
-Branch des GitHub-Repositorys Azure-Samples/azure-search-openai-demo.Klicken Sie mit der rechten Maustaste auf die folgende Schaltfläche, und wählen Sie Link in neuen Fenstern öffnen aus, damit sowohl die Entwicklungsumgebung als auch die Dokumentation gleichzeitig verfügbar sind.
Überprüfen Sie auf der Seite Codespace erstellen die Codespace-Konfigurationseinstellungen, und wählen Sie dann Neuen Codespace erstellen aus.
Warten Sie den Start des Codespaces ab. Dieser Startvorgang kann einige Minuten dauern.
Melden Sie sich am unteren Bildschirmrand am Terminal mit der Azure Developer CLI bei Azure an.
azd auth login
Schließen Sie den Authentifizierungsprozess ab.
Die verbleibenden Aufgaben in diesem Artikel finden im Kontext dieses Entwicklungscontainers statt.
Abrufen erforderlicher Informationen mit der Azure CLI
Rufen Sie Ihre Abonnement-ID und Mandanten-ID mit dem folgenden Azure-CLI-Befehl ab. Kopieren Sie den Wert, der als AZURE_TENANT_ID
-Wert verwendet werden soll.
az account list --query "[].{subscription_id:id, name:name, tenantId:tenantId}" -o table
Wenn Sie eine Fehlermeldung zur Richtlinie für den bedingten Zugriff Ihres Mandanten erhalten, benötigen Sie einen zweiten Mandanten ohne diese Richtlinie für den bedingten Zugriff.
- Ihr erster Mandant, der Ihrem Benutzerkonto zugeordnet ist, wird für die Umgebungsvariable
AZURE_TENANT_ID
verwendet. - Ihr zweiter Mandant ohne bedingten Zugriff wird für die Umgebungsvariable
AZURE_AUTH_TENANT_ID
für den Zugriff auf Microsoft Graph verwendet. Suchen Sie für Mandanten mit einer Richtlinie für den bedingten Zugriff die ID eines zweiten Mandanten ohne Richtlinie für den bedingten Zugriff, oder erstellen Sie einen neuen Mandanten.
Festlegen von Umgebungsvariablen
Führen Sie die folgenden Befehle aus, um die Anwendung für das Enterprise--Profil zu konfigurieren.
azd env set AZURE_USE_AUTHENTICATION true azd env set AZURE_ENABLE_GLOBAL_DOCUMENTS_ACCESS true azd env set AZURE_ENFORCE_ACCESS_CONTROL true
Führen Sie den folgenden Befehl aus, um den Tenant festzulegen, der die Benutzeranmeldung bei der gehosteten Anwendungsumgebung autorisiert. Ersetzen Sie
<YOUR_TENANT_ID>
durch die Mandanten-ID.azd env set AZURE_TENANT_ID <YOUR_TENANT_ID>
Anmerkung
Wenn Sie über eine Richtlinie für den bedingten Zugriff für Ihren Benutzermandanten verfügen, müssen Sie einen Authentifizierungsmandanten angeben.
Bereitstellen der Chat-App in Azure
Die Bereitstellung besteht aus den folgenden Schritten:
- Erstellen Sie die Azure-Ressourcen.
- Laden Sie die Dokumente hoch.
- Erstellen Sie die Microsoft Entra-Identitäts-Apps (Client und Server).
- Aktivieren Sie die Identität für die Hosting-Ressource.
Führen Sie den folgenden Azure Developer CLI-Befehl aus, um die Azure-Ressourcen bereitzustellen und den Quellcode bereitzustellen.
azd up
Verwenden Sie die folgende Tabelle, um die
AZD
-Eingabeaufforderungen für die Bereitstellung zu beantworten.Eingabeaufforderung Antwort Umgebungsname Verwenden Sie einen kurzen Namen, der Identifikationsinformationen wie Ihren Alias und Ihre App enthält. Und das Beispiel ist tjones-secure-chat
.Abonnement Wählen Sie ein Abonnement aus, in dem die Ressourcen erstellt werden sollen. Standort für Azure-Ressourcen Wählen Sie einen Ort in Ihrer Nähe aus. Speicherort für documentIntelligentResourceGroupLocation
Wählen Sie einen Ort in Ihrer Nähe aus. Speicherort für openAIResourceGroupLocation
Wählen Sie einen Ort in Ihrer Nähe aus. Warten Sie 5 oder 10 Minuten, nachdem die App bereitgestellt wurde, damit sie starten kann.
Nachdem die Anwendung erfolgreich bereitgestellt wurde, wird eine URL im Terminal angezeigt.
Wählen Sie die URL mit der Bezeichnung
(✓) Done: Deploying service webapp
aus, um die Chatanwendung in einem Browser zu öffnen.Bestätigen Sie das App-Authentifizierungspop-up.
Wenn die Chat-App angezeigt wird, beachten Sie in der oberen rechten Ecke, dass Ihr Benutzer angemeldet ist.
Öffnen Sie Entwicklereinstellungen, und beachten Sie, dass beide der folgenden Optionen ausgewählt und für Änderungen deaktiviert sind:
- Verwenden des oid-Sicherheitsfilters
- Gruppensicherheitsfilter verwenden
Wählen Sie die Karte mit Was macht ein Produktmanager?.
Sie erhalten eine Antwort wie: Die bereitgestellten Quellen enthalten keine spezifischen Informationen zur Rolle eines Product Managers bei Contoso Electronics.
Öffnen des Zugriffs auf ein Dokument für einen Benutzer
Aktivieren Sie Ihre Berechtigungen für das exakte Dokument, damit Sie die Antwort erhalten können. Sie benötigen mehrere Informationen:
- Azure Storage
- Kontenbezeichnung
- Containername
- Blob-/Dokument-URL für
role_library.pdf
- Benutzer-ID in Microsoft Entra ID
Wenn diese Informationen bekannt sind, aktualisieren Sie das Indexfeld oids
von Azure KI-Suche für das role_library.pdf
-Dokument.
Abrufen der URL für ein Dokument im Speicher
Suchen Sie im Ordner
.azure
im Stammverzeichnis des Projekts das Umgebungsverzeichnis, und öffnen Sie die.env
Datei mit diesem Verzeichnis.Suchen Sie nach dem eintrag
AZURE_STORAGE_ACCOUNT
, und kopieren Sie den Wert.Verwenden Sie die folgenden Azure CLI-Befehle, um die URL des
role_library.pdf
-Blobs im containercontent
abzurufen.az storage blob url \ --account-name <REPLACE_WITH_AZURE_STORAGE_ACCOUNT \ --container-name 'content' \ --name 'role_library.pdf'
Parameter Zweck --account-name Name des Azure Storage-Kontos. --container-name Der Containername in diesem Beispiel ist content
.--name Der Blobname in diesem Schritt ist role_library.pdf
.Kopieren Sie die blob-URL, um sie später zu verwenden.
Holen Sie sich Ihre Benutzer-ID
- Wählen Sie in der Chat-App Entwicklereinstellungen aus.
- Kopieren Sie im Abschnitt ID-Tokenansprüche Ihren
objectidentifier
-Parameter. Dieser Parameter wird im nächsten Abschnitt alsUSER_OBJECT_ID
bekannt.
Bereitstellen des Benutzerzugriffs auf ein Dokument in Azure Search
Verwenden Sie das folgende Skript, um das Feld
oids
in Azure AI Search fürrole_library.pdf
zu ändern, damit Sie darauf zugreifen können../scripts/manageacl.sh \ -v \ --acl-type oids \ --acl-action add \ --acl <REPLACE_WITH_YOUR_USER_OBJECT_ID> \ --url <REPLACE_WITH_YOUR_DOCUMENT_URL>
Parameter Zweck -v Ausführliche Ausgabe. --acl-type Gruppen- oder Benutzer-OIDs: oids
.--acl-action Fügen Sie zu einem Suchindexfeld hinzu. Weitere Optionen sind remove
,remove_all
undlist
.--acl Gruppen- oder Benutzer- USER_OBJECT_ID
.--url Der Speicherort der Datei in Azure Storage, z. B. https://MYSTORAGENAME.blob.core.windows.net/content/role_library.pdf
. Sie dürfen im CLI-Befehl die URL nicht in Anführungszeichen setzen.Die Konsolenausgabe für diesen Befehl sieht wie folgt aus:
Loading azd .env file from current environment... Creating Python virtual environment "app/backend/.venv"... Installing dependencies from "requirements.txt" into virtual environment (in quiet mode)... Running manageacl.py. Arguments to script: -v --acl-type oids --acl-action add --acl 00000000-0000-0000-0000-000000000000 --url https://mystorage.blob.core.windows.net/content/role_library.pdf Found 58 search documents with storageUrl https://mystorage.blob.core.windows.net/content/role_library.pdf Adding acl 00000000-0000-0000-0000-000000000000 to 58 search documents
Verwenden Sie optional den folgenden Befehl, um zu überprüfen, ob Ihre Berechtigung für die Datei in Azure AI Search aufgeführt ist.
./scripts/manageacl.sh \ -v \ --acl-type oids \ --acl-action list \ --acl <REPLACE_WITH_YOUR_USER_OBJECT_ID> \ --url <REPLACE_WITH_YOUR_DOCUMENT_URL>
Parameter Zweck -v Ausführliche Ausgabe. --acl-type Gruppen- oder Benutzer-OIDs: oids
.--acl-action Listet ein Suchindexfeld oids
auf. Weitere Optionen sindremove
,remove_all
undlist
.--acl Der USER_OBJECT_ID
-Parameter von Gruppe oder Benutzer.--url Der Speicherort der Datei, der angezeigt wird, z. B. https://MYSTORAGENAME.blob.core.windows.net/content/role_library.pdf
. Sie dürfen im CLI-Befehl die URL nicht in Anführungszeichen setzen.Die Konsolenausgabe für diesen Befehl sieht wie folgt aus:
Loading azd .env file from current environment... Creating Python virtual environment "app/backend/.venv"... Installing dependencies from "requirements.txt" into virtual environment (in quiet mode)... Running manageacl.py. Arguments to script: -v --acl-type oids --acl-action view --acl 00000000-0000-0000-0000-000000000000 --url https://mystorage.blob.core.windows.net/content/role_library.pdf Found 58 search documents with storageUrl https://mystorage.blob.core.windows.net/content/role_library.pdf [00000000-0000-0000-0000-000000000000]
Das Array am Ende der Ausgabe enthält Ihren
USER_OBJECT_ID
Parameter und wird verwendet, um zu bestimmen, ob das Dokument in der Antwort mit Azure OpenAI verwendet wird.
Überprüfen, ob Azure AI Search Ihre USER_OBJECT_ID enthält
Öffnen Sie das Azure-Portal, und suchen Sie nach
AI Search
.Wählen Sie Ihre Suchressource aus der Liste aus.
Wählen Sie Suchverwaltung>Indizes aus.
Wählen Sie gptkbindex aus.
Wählen Sie Ansicht>JSON-Ansicht aus.
Ersetzen Sie den JSON-Code durch Folgendes:
{ "search": "*", "select": "sourcefile, oids", "filter": "oids/any()" }
Dieser JSON durchsucht alle Dokumente, in denen das feld
oids
einen Wert aufweist, und gibt die Feldersourcefile
undoids
zurück.Wenn
role_library.pdf
Ihre OID nicht enthält, kehren Sie zum Abschnitt "Benutzerzugriff auf ein Dokument in Azure Search" zurück und folgen Sie den Schritten.
Überprüfen des Benutzerzugriffs auf das Dokument
Wenn Sie die Schritte abgeschlossen haben, aber die richtige Antwort nicht angezeigt wurde, überprüfen Sie, ob Ihr USER_OBJECT_ID
-Parameter in Azure KI-Suche für role_library.pdf
richtig festgelegt ist.
Kehren Sie zur Chat-App zurück. Möglicherweise müssen Sie sich erneut anmelden.
Geben Sie dieselbe Abfrage ein, damit der Inhalt von
role_library
in der Antwort von Azure OpenAI verwendet wird:What does a product manager do?
.Zeigen Sie das Ergebnis an, das nun die richtige Antwort aus dem Rollenbibliotheksdokument enthält.
Bereinigen von Ressourcen
Die folgenden Schritte führen Sie durch den Vorgang zum Bereinigen der verwendeten Ressourcen.
Bereinigen von Azure-Ressourcen
Die in diesem Artikel erstellten Azure-Ressourcen werden Ihrem Azure-Abonnement in Rechnung gestellt. Wenn Sie nicht erwarten, dass diese Ressourcen in Zukunft benötigt werden, löschen Sie sie, um mehr Gebühren zu vermeiden.
Führen Sie den folgenden Azure Developer CLI-Befehl aus, um die Azure-Ressourcen zu löschen und den Quellcode zu entfernen.
azd down --purge
Bereinigen von GitHub Codespaces und Visual Studio Code
Die folgenden Schritte führen Sie durch den Vorgang zum Bereinigen der verwendeten Ressourcen.
Das Löschen der GitHub Codespaces-Umgebung stellt sicher, dass Sie die Anzahl der kostenlosen Stunden pro Kernstundenberechtigung für Ihr Konto maximieren können.
Wichtig
Weitere Informationen zu den Berechtigungen Ihres GitHub-Kontos finden Sie im Artikel zu monatlich enthaltener Speicherkapazität und Kernstunden in GitHub Codespaces.
Melden Sie sich beim GitHub Codespaces-Dashboard an.
Suchen Sie Ihre derzeit ausgeführten Codespaces, die aus dem GitHub-Repository Azure-Samples/azure-search-openai-demo stammen.
Öffnen Sie das Kontextmenü für den Codespace, und wählen Sie dann Löschen aus.
Hilfe anfordern
Dieses Beispiel-Repository bietet Informationen zur Problembehandlung.
Fehlerbehebung
In diesem Abschnitt finden Sie Informationen zur Problembehandlung für probleme, die für diesen Artikel spezifisch sind.
Bereitstellung des Authentifizierungsmandanten
Wenn sich Ihre Authentifizierung in einem anderen Mandanten als Ihre Hostinganwendung befindet, müssen Sie diesen Authentifizierungsmandanten gemäß dem folgenden Prozess konfigurieren.
Führen Sie den folgenden Befehl aus, um das Beispiel so zu konfigurieren, dass es für die Authentifizierung einen zweiten Mandanten verwendet.
azd env set AZURE_AUTH_TENANT_ID <REPLACE-WITH-YOUR-TENANT-ID>
Parameter Zweck AZURE_AUTH_TENANT_ID
Wenn AZURE_AUTH_TENANT_ID
festgelegt ist, hostet der Mandant die App.Stellen Sie die Lösung mit dem folgenden Befehl erneut zur Anwendung:
azd up
Verwandte Inhalte
- Erstellen Sie eine -Chat-App mit Azure OpenAI Best Practices-Lösungsarchitektur.
- Erfahren Sie mehr über die Zugriffssteuerung mit Azure KI-Suche in Apps mit generativer KI.
- Entwickeln Sie eine Azure OpenAI-Lösung für Unternehmen mit Azure API Management.
- Weitere Informationen finden Sie unter Azure KI-Suche: Übertreffen der Vektorsuche mit hybridem Abruf und Rangfolgefähigkeiten.