Erste Schritte mit der Sicherheit von Chatdokumenten für Python
Wenn Sie eine Chatanwendung mithilfe des RAG-Musters mit Ihren eigenen Daten erstellen, stellen Sie sicher, dass jeder Benutzer basierend auf seinen Berechtigungen eine Antwort erhält. Folgen Sie dem Prozess in diesem Artikel, um Ihrer Chat-App dokumentzugriffssteuerung hinzuzufügen.
Ein autorisierter Benutzer sollte Zugriff auf Antworten haben, die in den Dokumenten der Chat-App enthalten sind.
Ein nicht autorisierter Benutzer sollte keinen Zugriff auf Antworten von gesicherten Dokumenten haben, für die er keine Berechtigung zum Anzeigen hat.
Hinweis
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, einfach bereitzustellende Referenzimplementierungen, die helfen, einen qualitativ hochwertigen Ausgangspunkt für Ihre KI-Apps zu gewährleisten.
Übersicht über die Architektur
Ohne Dokumentsicherheitsfunktion verfügt die Unternehmenschat-App über eine einfache Architektur mit 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 clientauthentifizierung mit Microsoft Entra hinzu.
- Fügen Sie serverseitige Logik hinzu, um einen Suchindex mit Benutzer- und Gruppenzugriff aufzufüllen.
Azure AI Search bietet keine nativen Berechtigungen auf Dokumentebene und kann keine Suchergebnisse innerhalb eines Indexes nach Benutzerberechtigungen variieren. Stattdessen kann Ihre Anwendung Suchfilter verwenden, um sicherzustellen, dass ein Dokument für einen bestimmten Benutzer oder eine bestimmte Gruppe zugänglich ist. 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 hinzufügen, um Benutzer- oder Gruppeninformationen zu speichern, und dann alle 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 sind, werden Änderungen bei der nächsten Indizierungsausführung aufgenommen. Wenn Sie keinen Indexer verwenden, müssen Sie die Indexierung manuell neu indizieren.
In diesem Artikel wird der Prozess der Sicherung von Dokumenten in Azure AI Search mit Beispielskripts ermöglicht, die Sie als Suchadministrator ausführen würden. Die Skripts ordnen ein einzelnes Dokument einer einzelnen Benutzeridentität zu. Sie können diese Skripts übernehmen und Ihre eigenen Sicherheits- und Produktionsanforderungen anwenden, um ihre Anforderungen an Ihre Anforderungen anzupassen.
Ermitteln der Sicherheitskonfiguration
Die Lösung bietet boolesche Umgebungsvariablen, um features zu aktivieren, die für die Dokumentsicherheit in diesem Beispiel erforderlich sind.
Parameter | Zweck |
---|---|
AZURE_USE_AUTHENTICATION |
Bei Festlegung auf true , ermöglicht die Benutzeranmeldung bei der Chat-App und der App Service-Authentifizierung. Aktiviert Use oid security filter in den Entwicklereinstellungen der Chat-App. |
AZURE_ENFORCE_ACCESS_CONTROL |
Bei Festlegung auf true ", ist eine Authentifizierung für den Dokumentzugriff erforderlich. Die Entwicklereinstellungen für oid- und gruppensicherheit werden aktiviert und deaktiviert, sodass sie nicht über die Benutzeroberfläche deaktiviert werden können. |
AZURE_ENABLE_GLOBAL_DOCUMENTS_ACCESS |
Wenn diese Einstellung auf festgelegt true 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 er 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 er 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 sich anmelden, und die Website enthält Inhalte, die für alle Benutzer öffentlich sind. Der Sicherheitsfilter auf Dokumentebene wird auf alle Anforderungen angewendet.
Environment variables (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 sich anmelden, und die Website enthält Inhalte, die für alle Benutzer öffentlich sind. Der Sicherheitsfilter auf Dokumentebene wird auf alle Anforderungen angewendet.
Environment variables (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:
- Azure-Abonnement. Kostenloses Konto erstellen
- Azure-Kontoberechtigungen – Ihr Azure-Konto muss über
- Berechtigung zum Verwalten von Anwendungen in der Microsoft Entra-ID.
- Microsoft.Authorization/roleAssignments/Write-Berechtigungen, z . B. Benutzerzugriffsadministrator oder Besitzer.
- Zugriff auf Azure OpenAI im gewünschten Azure-Abonnement gewährt. Derzeit wird der Zugriff auf diesen Dienst nur auf Antrag gewährt. Sie können den Zugriff auf Azure OpenAI beantragen, indem Sie das Formular unter https://aka.ms/oai/access ausfüllen.
Je nach bevorzugter Entwicklungsumgebung benötigen Sie weitere Voraussetzungen.
Öffnen Sie die 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 Codespaces für bis zu 60 Stunden pro Monat mit zwei Kerninstanzen kostenlos verwenden. Weitere Informationen finden Sie im Artikel zu monatlich enthaltener Speicherkapazität und Kernstunden in GitHub Codespaces.
Starten Sie den Prozess, um einen neuen GitHub Codespace im Branch
main
des GitHub-RepositorysAzure-Samples/azure-search-openai-demo
zu erstellen.Klicken Sie mit der rechten Maustaste auf die folgende Schaltfläche, und wählen Sie den 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 Azure CLI
Rufen Sie Ihre Abonnement-ID und Mandanten-ID mit dem folgenden Azure CLI-Befehl ab. Kopieren Sie den Wert, der als Ihr AZURE_TENANT_ID
Wert verwendet werden soll.
az account list --query "[].{subscription_id:id, name:name, tenantId:tenantId}" -o table
Wenn Sie eine Fehlermeldung über die Richtlinie für bedingten Zugriff Ihres Mandanten erhalten, benötigen Sie einen zweiten Mandanten ohne richtlinie für bedingten Zugriff.
- Ihr erster Mandant, der Ihrem Benutzerkonto zugeordnet ist, wird für die
AZURE_TENANT_ID
Umgebungsvariable verwendet. - Ihr zweiter Mandant ohne bedingten Zugriff wird für die Umgebungsvariable für den
AZURE_AUTH_TENANT_ID
Zugriff auf Microsoft Graph verwendet. Suchen Sie für Mandanten mit einer Richtlinie für bedingten Zugriff die ID eines zweiten Mandanten ohne Richtlinie für bedingten Zugriff, oder erstellen Sie einen neuen Mandanten.
Festlegen von Umgebungsvariablen
Führen Sie die folgenden Befehle aus, um die Anwendung für das Unternehmensprofil 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 Mandanten festzulegen, der die Anmeldung des Benutzers bei der gehosteten Anwendungsumgebung autorisiert. Ersetzen Sie diese durch
<YOUR_TENANT_ID>
die Mandanten-ID.azd env set AZURE_TENANT_ID <YOUR_TENANT_ID>
Hinweis
Wenn Sie über eine Richtlinie für bedingten Zugriff für Ihren Benutzermandanten verfügen, müssen Sie einen Authentifizierungsmandanten angeben.
Bereitstellen einer Chat-App in Azure
Die Bereitstellung umfasst das Erstellen der Azure-Ressourcen, das Hochladen der Dokumente, das Erstellen der Microsoft Entra-Identitäts-Apps (Client & Server) und das Aktivieren der Identität für die Hostingressource.
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-Bereitstellungsaufforderungen zu beantworten:
Prompt Antwort Umgebungsname Verwenden Sie einen kurzen Namen, um Informationen wie Ihren Alias und Ihre App zu identifizieren: tjones-secure-chat
Abonnement Wählen Sie ein Abonnement aus, in dem die Ressourcen erstellt werden sollen. Speicherort für Azure-Ressourcen Wählen Sie einen Ort in Ihrer Nähe aus. Ort für documentIntelligentResourceGroupLocation
Wählen Sie einen Ort in Ihrer Nähe aus. Ort 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 die App gestartet werden kann.
Nachdem die Anwendung erfolgreich bereitgestellt wurde, wird eine URL im Terminal angezeigt.
Wählen Sie diese URL aus, die als
(✓) Done: Deploying service webapp
beschriftet ist, um die Chatanwendung in einem Browser zu öffnen.Stimmen Sie dem Popupmenü für die App-Authentifizierung zu.
Wenn die Chat-App angezeigt wird, beachten Sie in der oberen rechten Ecke, dass Der Benutzer angemeldet ist.
Öffnen Sie Entwicklereinstellungen , und beachten Sie, dass beide Optionen ausgewählt und abgeblenkt sind (deaktiviert für Die Änderung).
- Verwenden des oid-Sicherheitsfilters
- Verwenden des Gruppensicherheitsfilters
Wählen Sie die Karte mit
What does a product manager do?
.Sie erhalten eine Antwort wie:
The provided sources do not contain specific information about the role of a Product Manager at Contoso Electronics.
Öffnen des Zugriffs auf ein Dokument für einen Benutzer
Aktivieren Sie Ihre Berechtigungen für das genaue Dokument, damit Sie die Antwort erhalten können . Diese erfordern mehrere Informationen:
- Azure Storage
- Kontoname
- Containername
- BLOB-/Dokument-URL für
role_library.pdf
- Benutzer-ID in Der Microsoft Entra-ID
Sobald diese Informationen bekannt sind, aktualisieren Sie das Azure AI Search-Indexfeld oids
für das role_library.pdf
Dokument.
Abrufen der URL für ein Dokument im Speicher
Suchen Sie im
.azure
Ordner im Stammverzeichnis des Projekts das Umgebungsverzeichnis, und öffnen Sie die.env
Datei mit diesem Verzeichnis.Suchen Sie nach dem
AZURE_STORAGE_ACCOUNT
Eintrag, und kopieren Sie den Wert.Verwenden Sie die folgenden Azure CLI-Befehle, um die URL des role_library.pdf-Blobsim Inhaltscontainer abzurufen.
az storage blob url \ --account-name <REPLACE_WITH_AZURE_STORAGE_ACCOUNT \ --container-name 'content' \ --name 'role_library.pdf'
Parameter Zweck --account-name Azure Storage-Kontoname --containername Der Containername in diesem Beispiel lautet content
--name Der Blobname in diesem Schritt ist role_library.pdf
Kopieren Sie die BLOB-URL, die später verwendet werden soll.
Abrufen Ihrer Benutzer-ID
- Wählen Sie in der Chap-App Die Entwicklereinstellungen aus.
- Kopieren Sie im Abschnitt "ID Token-Ansprüche " Ihre
objectidentifier
. Dies wird im nächsten Abschnitt als derUSER_OBJECT_ID
.
Bereitstellen des Benutzerzugriffs auf ein Dokument in Azure Search
Verwenden Sie das folgende Skript, um das
oids
Feld in Azure AI Search für role_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 Benutzerobjekt-IDs (OIDs): oids
--acl-action Zu einem Suchindexfeld hinzufügen . Weitere Optionen sind remove
: ,remove_all
.list
--acl Gruppieren oder Benutzer USER_OBJECT_ID
--url Der Speicherort der Datei im Azure-Speicher, z https://MYSTORAGENAME.blob.core.windows.net/content/role_library.pdf
. B. . Schließen Sie die URL nicht in Anführungszeichen im CLI-Befehl ein.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 Gruppe oder Benutzer (oids): oids
--acl-action Auflisten eines Suchindexfelds oids
. Weitere Optionen sindremove
: ,remove_all
.list
--acl Gruppieren oder Benutzer USER_OBJECT_ID
--url Der Speicherort der Datei im Azure-Speicher, z https://MYSTORAGENAME.blob.core.windows.net/content/role_library.pdf
. B. . Schließen Sie die URL nicht in Anführungszeichen im CLI-Befehl ein.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 Ihre USER_OBJECT_ID 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 die Azure-Portal, und suchen Sie nach Ihrem
AI Search
.Wählen Sie Ihre Suchressource aus der Liste aus.
Wählen Sie "Suchverwaltung " – Indizes" aus.>
Wählen Sie den gptkbindex aus.
Wählen Sie "Ansicht> – JSON-Ansicht" aus.
Ersetzen Sie den JSON-Code durch den folgenden JSON-Code.
{ "search": "*", "select": "sourcefile, oids", "filter": "oids/any()" }
Dadurch werden alle Dokumente durchsucht, in denen das
oids
Feld einen Beliebigen Wert aufweist, und gibt diesourcefile
Felder undoids
Felder zurück.Wenn ihr
role_library.pdf
Oid nicht vorhanden ist, kehren Sie zum Abschnitt "Bereitstellen des Benutzers zugriff auf ein Dokument in Azure Search " zurück, und führen Sie die Schritte aus.
Überprüfen des Benutzerzugriffs auf das Dokument
Wenn Sie die Schritte abgeschlossen haben, aber die richtige Antwort nicht angezeigt wurde, überprüfen Sie, ob Ihre USER_OBJECT_ID in Azure AI Search korrekt role_library.pdf
festgelegt ist.
Kehren Sie zur Chat-App zurück. Möglicherweise müssen Sie sich erneut anmelden.
Geben Sie dieselbe Abfrage ein, damit der
role_library
Inhalt in der Azure OpenAI-Antwort verwendet wird:What does a product manager do?
.Zeigen Sie das Ergebnis an, das nun die entsprechende Antwort aus dem Rollenbibliotheksdokument enthält.
Bereinigen von 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 weitere 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
Durch das Löschen der GitHub Codespaces-Umgebung wird sichergestellt, dass Sie die Anzahl der kostenlosen Berechtigungsstunden pro Kern maximieren können, die Sie für Ihr Konto erhalten.
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 (https://github.com/codespaces) 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 erhalten
Dieses Beispiel-Repository bietet Informationen zur Problembehandlung.
Problembehandlung
In diesem Abschnitt finden Sie Informationen zur Problembehandlung für probleme, die für diesen Artikel spezifisch sind.
Bereitstellen des Authentifizierungsmandanten
Wenn sich Ihre Authentifizierung in einem separaten Mandanten von Ihrer Hostinganwendung befindet, müssen Sie diesen Authentifizierungsmandanten mit dem folgenden Prozess festlegen.
Führen Sie den folgenden Befehl aus, um das Beispiel für die Verwendung eines zweiten Mandanten für den Authentifizierungsmandanten zu konfigurieren.
azd env set AZURE_AUTH_TENANT_ID <REPLACE-WITH-YOUR-TENANT-ID>
Parameter Zweck AZURE_AUTH_TENANT_ID
Wenn AZURE_AUTH_TENANT_ID
dieser Wert festgelegt ist, ist es der Mandant, der die App hostet.Stellen Sie die Lösung mit dem folgenden Befehl erneut zur Anwendung.
azd up