Freigeben über


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.

Screenshot der Chat-App mit Antwort mit erforderlichem Authentifizierungszugriff.

Ein nicht autorisierter Benutzer sollte keinen Zugriff auf Antworten von gesicherten Dokumenten haben, für die er keine Berechtigung zum Anzeigen hat.

Screenshot der Chat-App mit Antwort, die angibt, dass der Benutzer keinen Zugriff auf Daten 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.

Architekturdiagramm mit einer Antwort, die aus Abfragen zu Azure AI Search bestimmt wird, wo die Dokumente gespeichert werden, in Kombination mit einer Eingabeaufforderungsantwort von Azure OpenAI.

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.

Architekturdiagramm mit einer Verwendung der Authentifizierung mit Microsoft Entra-ID und anschließender Übergabe dieser Authentifizierung an Azure AI Search.

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.

Architekturdiagramm, das zeigt, dass zum Sichern der Dokumente in Azure AI Search jedes Dokument die Benutzerauthentifizierung enthält, die im Resultset zurückgegeben wird.

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 trueist, 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:

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.

  1. Starten Sie den Prozess, um einen neuen GitHub Codespace im Branch main des GitHub-Repositorys Azure-Samples/azure-search-openai-demo zu erstellen.

  2. 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.

    In GitHub Codespaces öffnen

  3. Überprüfen Sie auf der Seite Codespace erstellen die Codespace-Konfigurationseinstellungen, und wählen Sie dann Neuen Codespace erstellen aus.

    Screenshot: Bestätigungsbildschirm vor dem Erstellen eines neuen Codespace.

  4. Warten Sie den Start des Codespaces ab. Dieser Startvorgang kann einige Minuten dauern.

  5. Melden Sie sich am unteren Bildschirmrand am Terminal mit der Azure Developer CLI bei Azure an.

    azd auth login
    
  6. Schließen Sie den Authentifizierungsprozess ab.

  7. 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_IDWert 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

  1. 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
    
  2. 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.

  1. Führen Sie den folgenden Azure Developer CLI-Befehl aus, um die Azure-Ressourcen bereitzustellen und den Quellcode bereitzustellen:

    azd up
    
  2. 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.

  3. Nachdem die Anwendung erfolgreich bereitgestellt wurde, wird eine URL im Terminal angezeigt.

  4. Wählen Sie diese URL aus, die als (✓) Done: Deploying service webapp beschriftet ist, um die Chatanwendung in einem Browser zu öffnen.

    Screenshot der Chat-App im Browser mit mehreren Vorschlägen für Chateingaben und dem Chattextfeld, um eine Frage einzugeben

  5. Stimmen Sie dem Popupmenü für die App-Authentifizierung zu.

  6. Wenn die Chat-App angezeigt wird, beachten Sie in der oberen rechten Ecke, dass Der Benutzer angemeldet ist.

  7. Ö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
  8. Wählen Sie die Karte mit What does a product manager do?.

  9. Sie erhalten eine Antwort wie: The provided sources do not contain specific information about the role of a Product Manager at Contoso Electronics.

    Screenshot der Chat-App im Browser mit der Antwort kann nicht zurückgegeben werden

Ö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

  1. Suchen Sie im .azure Ordner im Stammverzeichnis des Projekts das Umgebungsverzeichnis, und öffnen Sie die .env Datei mit diesem Verzeichnis.

  2. Suchen Sie nach dem AZURE_STORAGE_ACCOUNT Eintrag, und kopieren Sie den Wert.

  3. 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
  4. Kopieren Sie die BLOB-URL, die später verwendet werden soll.

Abrufen Ihrer Benutzer-ID

  1. Wählen Sie in der Chap-App Die Entwicklereinstellungen aus.
  2. Kopieren Sie im Abschnitt "ID Token-Ansprüche " Ihre objectidentifier. Dies wird im nächsten Abschnitt als der USER_OBJECT_ID.
  1. 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.
  2. 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
    
  3. 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 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.
  4. 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

  1. Öffnen Sie die Azure-Portal, und suchen Sie nach Ihrem AI Search.

  2. Wählen Sie Ihre Suchressource aus der Liste aus.

  3. Wählen Sie "Suchverwaltung " – Indizes" aus.>

  4. Wählen Sie den gptkbindex aus.

  5. Wählen Sie "Ansicht> – JSON-Ansicht" aus.

  6. 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 die sourcefileFelder und oids Felder zurück.

  7. 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.pdffestgelegt ist.

  1. Kehren Sie zur Chat-App zurück. Möglicherweise müssen Sie sich erneut anmelden.

  2. Geben Sie dieselbe Abfrage ein, damit der role_library Inhalt in der Azure OpenAI-Antwort verwendet wird: What does a product manager do?.

  3. Zeigen Sie das Ergebnis an, das nun die entsprechende Antwort aus dem Rollenbibliotheksdokument enthält.

    Screenshot der Chat-App im Browser, in der die Antwort zurückgegeben wird.

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.

  1. Melden Sie sich beim GitHub Codespaces-Dashboard (https://github.com/codespaces) an.

  2. Suchen Sie Ihre derzeit ausgeführten Codespaces, die aus dem GitHub-Repository Azure-Samples/azure-search-openai-demo stammen.

    Screenshot aller ausgeführten Codespaces einschließlich status und Vorlagen.

  3. Öffnen Sie das Kontextmenü für den Codespace, und wählen Sie dann Löschen aus.

    Screenshot: Kontextmenü für einen Codespace mit hervorgehobener Löschoption.

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.

  1. 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.
  2. Stellen Sie die Lösung mit dem folgenden Befehl erneut zur Anwendung.

    azd up
    

Nächste Schritte