Herstellen einer Verbindung mit Azure KI Search unter Verwendung der rollenbasierten Zugriffssteuerung (Azure RBAC)

Azure bietet ein globales Autorisierungssystem mit rollenbasierter Zugriffssteuerung für alle Dienste, die auf der Plattform ausgeführt werden. In Azure KI Search können Sie Azure-Rollen für Folgendes verwenden:

  • Vorgänge auf der Steuerungsebene (Dienstverwaltungsaufgaben über Azure Resource Manager).

  • Vorgänge auf der Datenebene, z. B. Erstellen, Laden und Abfragen von Indizes.

Benutzerbasierter Zugriff über Suchergebnisse (zuweilen als Sicherheit auf Zeilen- oder Dokumentebene bezeichnet) wird nicht unterstützt. Zur Problemumgehung erstellen Sie Sicherheitsfilter, um die Ergebnisse basierend auf der Benutzeridentität einzuschränken, sodass Dokumente entfernt werden, auf die der Anforderer keinen Zugriff haben sollte.

Hinweis

In Azure KI Search bezieht sich „Steuerungsebene“ auf Vorgänge, die von der Verwaltungs-REST-API oder entsprechenden Clientbibliotheken unterstützt werden. Die „Datenebene“ bezieht sich auf Vorgänge für den Suchdienstendpunkt, z. B. Indizierung oder Abfragen, oder auf andere Vorgänge, die in der REST-API für die Suche oder entsprechenden Clientbibliotheken angegeben sind.

Die folgenden Rollen sind integriert. Wenn diese Rollen nicht ausreichen, erstellen Sie eine benutzerdefinierte Rolle.

Role Plane Beschreibung
Besitzer Daten steuern Vollzugriff auf die Steuerungsebene der Suchressource, einschließlich Fähigkeit zum Zuweisen von Azure-Rollen. Nur die Rolle „Besitzer“ kann Authentifizierungsoptionen aktivieren oder deaktivieren oder Rollen für andere Benutzer verwalten. Abonnementadministratoren sind standardmäßig Mitglieder.

Auf der Datenebene verfügt diese Rolle über dieselben Zugriffsrechte wie die Rolle „Mitwirkender von Suchdienst“. Sie umfasst Zugriff auf alle Aktionen auf Datenebene, außer der Fähigkeit, Dokumente abzufragen oder zu indizieren.
Mitwirkender Daten steuern Gleiche Zugriffsebene auf die Steuerungsebene wie Besitzer, jedoch ohne die Fähigkeit, Rollen zuzuweisen oder Authentifizierungsoptionen zu ändern.

Auf der Datenebene verfügt diese Rolle über dieselben Zugriffsrechte wie die Rolle „Mitwirkender von Suchdienst“. Sie umfasst Zugriff auf alle Aktionen auf Datenebene, außer der Fähigkeit, Dokumente abzufragen oder zu indizieren.
Leser Daten steuern Lesezugriff auf den gesamten Dienst, einschließlich Suchmetriken, Inhaltsmetriken (belegter Speicher, Anzahl der Objekte) und die Objektdefinitionen von Datenebenenressourcen (Indizes, Indexer und so weiter) lesen. API-Schlüssel oder Inhalte in Indizes können jedoch nicht gelesen werden.
Mitwirkender von Suchdienst Daten steuern Lese-/Schreibzugriff auf Objektdefinitionen (Indizes, Synonymzuordnungen, Indexer, Datenquellen und Skillsets). Besuchen Sie für die Berechtigungsliste Microsoft.Search/searchServices/*. Diese Rolle kann nicht auf Inhalte in einem Index zugreifen, weshalb keine Abfrage oder Indizierung möglich ist, aber sie kann Indizes erstellen, löschen und listen, Indexdefinitionen und Statistiken zurückgeben und Analysetools testen. Diese Rolle ist für Suchdienstadministratoren gedacht, die den Suchdienst und seine Objekte verwalten müssen, jedoch ohne Inhaltszugriff.
Mitwirkender an Suchindexdaten Daten Lese- und Schreibzugriff auf Inhalte in allen Indizes des Suchdiensts. Diese Rolle ist für Entwickler oder Indexbesitzer gedacht, die die Dokumentsammlung eines Index importieren, aktualisieren oder abfragen müssen.
Suchindexdatenleser Daten Schreibgeschützter Zugriff auf alle Suchindizes im Suchdienst. Diese Rolle ist für Apps und Benutzer gedacht, die Abfragen ausführen.

Hinweis

Wenn Sie den rollenbasierten Azure-Zugriff deaktivieren, stehen weiterhin integrierte Rollen für die Steuerungsebene (Besitzer, Mitwirkender, Leser) zur Verfügung. Durch das Deaktivieren von Azure RBAC werden nur die datenbezogenen Berechtigungen entfernt, die diesen Rollen zugeordnet sind. In einem Szenario mit deaktivierter RBAC entspricht der Suchdienstmitwirkende dem Mitwirkenden der Steuerungsebene.

Begrenzungen

  • Die Einführung der rollenbasierten Zugriffssteuerung kann die Latenz einiger Anforderungen erhöhen. Jede eindeutige Kombination aus Dienstressource (Index, Indexer usw.) und Dienstprinzipal, die für eine Anforderung verwendet wird, löst eine Autorisierungsprüfung aus. Diese Autorisierungsprüfungen können einer Anforderung eine Latenz von bis zu 200 Millisekunden hinzufügen.

  • In seltenen Fällen, in denen Anforderungen von einer großen Anzahl unterschiedlicher Dienstprinzipale stammen, die alle auf verschiedene Dienstressourcen (Indizes, Indexer usw.) abzielen, ist es möglich, dass die Autorisierungsprüfungen zu einer Drosselung führen. Eine Drosselung würde nur dann passieren, wenn innerhalb einer Sekunde Hunderte eindeutiger Kombinationen aus Suchdienstressource und Dienstprinzipal verwendet würden.

Konfigurieren der rollenbasierten Zugriffssteuerung (Role Based Access Control, RBAC) für die Datenebene

Gilt für: Mitwirkender an Suchindexdaten, Suchindexdatenleser, Suchdienstmitwirkender

In diesem Schritt konfigurieren Sie Ihren Dienst so, dass er einen Autorisierungsheader bei Datenanforderungen erkennt, die ein OAuth2-Token für den Zugriff enthalten.

  1. Melden Sie sich am Azure-Portal an und öffnen Sie die Suchdienstseite.

  2. Wählen Sie im linken Navigationsbereich Schlüssel aus.

    Screenshot der Seite „Schlüssel“ mit Authentifizierungsoptionen.

  3. Wählen Sie eine API-Zugangskontrolle Option. Wir empfehlen beides, wenn Sie Flexibilität wünschen oder Apps migrieren müssen.

    Option Beschreibung
    API-Schlüssel (Standard). Erfordert zur Autorisierung einen Administrator- oder Abfrage-API-Schlüssel im Anforderungsheader. Es werden keine Rollen verwendet.
    Rollenbasierte Zugriffssteuerung Zur Ausführung der Aufgabe ist die Mitgliedschaft in einer Rollenzuweisung erforderlich, wie im nächsten Schritt beschrieben. Außerdem ist ein Autorisierungsheader erforderlich.
    Beides Anforderungen sind entweder mit einem API-Schlüssel oder einer rollenbasierten Zugriffssteuerung gültig.

Die Änderung ist sofort wirksam, warten Sie aber einige Sekunden vor dem Testen.

Alle Netzwerkaufrufe für Suchdienstvorgänge und Inhalte respektieren die von Ihnen ausgewählte Option: API-Schlüssel, Bearertoken oder eines von beiden, wenn Sie beide auswählen.

Wenn Sie die rollenbasierte Zugriffssteuerung im Portal aktivieren, lautet der Fehlermodus "http401WithBearerChallenge", wenn die Autorisierung fehlschlägt.

Zuweisen von Rollen

Rollenzuweisungen sind kumulativ und gelten in allen Tools und Clientbibliotheken. Sie können Rollen mit einer der in der Dokumentation zur rollenbasierten Zugriffssteuerung in Azure beschriebenen unterstützten Methode zuweisen.

Sie müssen Besitzer sein oder über die Berechtigung Microsoft.Authorization/roleAssignments/write verfügen, um Rollenzuweisungen zu verwalten.

Rollenzuweisungen im Portal gelten dienstweit. Wenn Sie einem einzelnen Index Berechtigungen erteilen möchten, verwenden Sie stattdessen PowerShell oder die Azure CLI.

  1. Melden Sie sich beim Azure-Portal an.

  2. Navigieren Sie zu Ihrem Suchdienst.

  3. Wählen Sie im linken Navigationsbereich Access Control (IAM) aus.

  4. Wählen Sie +Hinzufügen>Rollenzuweisung hinzufügen aus.

    Seite „Zugriffssteuerung (IAM)“ mit geöffnetem Menü „Rollenzuweisung hinzufügen“

  5. Wählen Sie eine entsprechende Rolle aus:

    • Besitzer
    • Mitwirkender
    • Leser
    • Mitwirkender von Suchdienst
    • Mitwirkender an Suchindexdaten
    • Suchindexdatenleser
  6. Wählen Sie auf der Registerkarte „Mitglieder“ die Microsoft Entra-Benutzer- oder Gruppenidentität aus.

  7. Wählen Sie auf der Registerkarte Überprüfen und zuweisen die Option Überprüfen und zuweisen aus, um die Rolle zuzuweisen.

Testen von Rollenzuweisungen

Verwenden Sie einen Client, um Rollenzuweisungen zu testen. Denken Sie daran, dass Rollen kumulativ sind und dass geerbte Rollen, die auf das Abonnement oder die Ressourcengruppe begrenzt sind, nicht auf Ressourcenebene (Suchdienst) gelöscht oder verweigert werden können.

Stellen Sie sicher, dass Sie Ihre Clientanwendung mit der Microsoft Entra-ID registrieren und Rollenzuweisungen vor dem Testen des Zugriffs eingerichtet haben.

  1. Melden Sie sich beim Azure-Portal an.

  2. Navigieren Sie zu Ihrem Suchdienst.

  3. Wählen Sie auf der Seite „Übersicht“ die Registerkarte Indizes aus:

    • Mitwirkende können jedes Objekt anzeigen und erstellen, aber keinen Index mithilfe des Suchexplorers abfragen.

    • Suchindexdatenleser können über den Such-Explorer den Index abfragen. Sie können jede API-Version verwenden, um den Zugriff zu überprüfen. Sie sollten Abfragen senden und Ergebnisse anzeigen können, aber Sie können die Indexdefinition nicht anzeigen.

    • Mitwirkende an Suchindexdaten könnenNeuer Index auswählen, um einen neuen Index zu erstellen. Durch das Speichern eines neuen Indexes wird der Schreibzugriff auf den Dienst überprüft.

Als aktueller Benutzer testen

Wenn Sie bereits Mitwirkender oder Besitzer Ihres Suchdiensts sind, können Sie ein Bearertoken für Ihre Benutzeridentität für die Authentifizierung bei Azure KI Search präsentieren.

  1. Rufen Sie ein Bearertoken für den aktuellen Benutzer mithilfe der Azure CLI ab:

    az account get-access-token --scope https://search.azure.com/.default
    

    Oder mit PowerShell:

    Get-AzAccessToken -ResourceUrl "https://graph.microsoft.com/"
    
  2. Fügen Sie in einer neuen Textdatei in Visual Studio Code die folgenden Variablen ein:

    @baseUrl = PASTE-YOUR-SEARCH-SERVICE-URL-HERE
    @index-name = PASTE-YOUR-INDEX-NAME-HERE
    @token = PASTE-YOUR-TOKEN-HERE
    
  3. Senden Sie nach dem Einfügen eine Anforderung, um den Zugriff zu bestätigen. Mit der folgenden Anforderung wird der hotels-quickstart-Index abgefragt:

    POST https://{{baseUrl}}/indexes/{{index-name}}/docs/search?api-version=2023-11-01 HTTP/1.1
      Content-type: application/json
      Authorization: Bearer {{token}}
    
        {
             "queryType": "simple",
             "search": "motel",
             "filter": "",
             "select": "HotelName,Description,Category,Tags",
             "count": true
         }
    

Gewähren des Zugriffs auf einen einzelnen Index

In einigen Szenarien könnte es sinnvoll sein, den Zugriff einer Anwendung auf eine einzelne Ressource zu beschränken, z. B. einen Index.

Das Portal unterstützt derzeit keine Rollenzuweisungen auf dieser Granularitätsebene, aber dies kann mit PowerShell oder dem Azure CLI erfolgen.

In PowerShell verwenden Sie dafür den Befehl New-AzRoleAssignment und geben den Namen des Azure-Benutzers oder der Azure-Gruppe sowie den Umfang der Zuweisung an.

  1. Laden Sie die Azure- und AzureAD-Module, und stellen Sie eine Verbindung mit Ihrem Azure-Konto her:

    Import-Module -Name Az
    Import-Module -Name AzureAD
    Connect-AzAccount
    
  2. Fügen Sie eine Rollenzuweisung hinzu, die einem einzelnen Index zugewiesen ist:

    New-AzRoleAssignment -ObjectId <objectId> `
        -RoleDefinitionName "Search Index Data Contributor" `
        -Scope  "/subscriptions/<subscription>/resourceGroups/<resource-group>/providers/Microsoft.Search/searchServices/<search-service>/indexes/<index-name>"
    

Erstellen einer benutzerdefinierten Rolle

Wenn integrierte Rollen nicht die richtige Kombination von Berechtigungen bereitstellen, können Sie eine benutzerdefinierte Rolle erstellen, um die erforderlichen Vorgänge zu unterstützen.

In diesem Beispiel wird der Suchindexdatenleser geklont und dann die Möglichkeit hinzugefügt, Indizes nach Namen auflisten zu können. Normalerweise wird das Auflisten der Indizes für einen Suchdienst als administratives Recht angesehen.

Diese Schritte werden von Erstellen oder Aktualisieren benutzerdefinierter Azure-Rollen mithilfe des Azure-Portals. Das Klonen von einer vorhandenen Rolle wird auf einer Suchdienstseite unterstützt.

Diese Schritte erstellen eine benutzerdefinierte Rolle, die Suchabfragerechte ergänzt, um das Auflisten von Indizes nach Namen einzuschließen. In der Regel wird das Auflisten von Indizes als Administratorfunktion angesehen.

  1. Navigieren Sie im Azure-Portal zu Ihrem Suchdienst.

  2. Wählen Sie im linken Navigationsbereich Zugriffssteuerung (IAM) aus.

  3. Wählen Sie auf der Aktionsleiste Rollen aus.

  4. Klicken Sie mit der rechten Maustaste auf Suchindexdatenleser (oder eine andere Rolle), und wählen Sie Klonen aus, um den Assistenten zum Erstellen einer benutzerdefinierten Rolle zu öffnen.

  5. Geben Sie auf der Registerkarte „Grundlagen“ einen Namen für die benutzerdefinierte Rolle an, z. B. „Suchindexdaten-Explorer“, und wählen Sie dann Weiter aus.

  6. Wählen Sie auf der Registerkarte „Berechtigungen“ die Option Berechtigung hinzufügen aus.

  7. Suchen Sie auf der Registerkarte „Berechtigungen hinzufügen“ nach der Kachel Microsoft Search, und wählen Sie sie aus.

  8. Legen Sie die Berechtigungen für Ihre benutzerdefinierte Rolle fest. Oben auf der Seite unter Verwendung der Standardauswahl Aktionen:

    • Wählen Sie unter „Microsoft.Search/operations“ Lesen: Alle verfügbaren Vorgänge auflisten aus.
    • Wählen Sie unter „Microsoft.Search/searchServices/indexes“ Lesen: Index lesen aus.
  9. Wechseln Sie auf derselben Seite zu Datenaktionen, und wählen Sie unter „Microsoft.Search/searchServices/indexes/documents“ Lesen: Dokumente lesen aus.

    Die JSON-Definition sieht wie im folgenden Beispiel aus:

    {
     "properties": {
         "roleName": "search index data explorer",
         "description": "",
         "assignableScopes": [
             "/subscriptions/a5b1ca8b-bab3-4c26-aebe-4cf7ec4791a0/resourceGroups/heidist-free-search-svc/providers/Microsoft.Search/searchServices/demo-search-svc"
         ],
         "permissions": [
             {
                 "actions": [
                     "Microsoft.Search/operations/read",
                     "Microsoft.Search/searchServices/indexes/read"
                 ],
                 "notActions": [],
                 "dataActions": [
                     "Microsoft.Search/searchServices/indexes/documents/read"
                 ],
                 "notDataActions": []
             }
         ]
       }
     }
    
  10. Wählen Sie Überprüfen + erstellen aus, um die Rolle zu erstellen. Sie können der Rolle jetzt Benutzer und Gruppen zuweisen.

Deaktivieren der API-Schlüssel-Authentifizierung

Zugriff auf Schlüssel oder eine lokale Authentifizierung können für Ihren Dienst deaktiviert werden, wenn Sie die Rollen „Suchdienstmitwirkender“, „Mitwirkender an Suchindexdaten“ und „Suchindexdatenleser“ und Microsoft Entra-Authentifizierung verwenden. Das Deaktivieren von API-Schlüsseln führt dazu, dass der Suchdienst alle datenbezogenen Anforderungen ablehnt, die einen API-Schlüssel im Header übergeben.

Hinweis

Administrator-API-Schlüssel können nur deaktiviert und nicht gelöscht werden. Abfrage-API-Schlüssel können gelöscht werden.

Zum Deaktivieren von Features sind die Berechtigungen „Besitzer“ oder „Mitwirkender“ erforderlich.

Verwenden Sie das Azure-Portal oder die Verwaltungs-REST-API, um die schlüsselbasierte Authentifizierung zu deaktivieren.

  1. Navigieren Sie im Azure-Portal zu Ihrem Suchdienst.

  2. Wählen Sie im linken Navigationsbereich die Option Schlüssel aus.

  3. Wählen Sie Rollenbasierte Zugriffssteuerung aus.

Die Änderung ist sofort wirksam, warten Sie aber einige Sekunden vor dem Testen. Wenn Sie über die Berechtigung zum Zuweisen von Rollen als Mitglied der Rolle „Besitzer“, „Dienstadministrator“ oder „Co-Admin“ verfügen, können Sie Portalfeatures verwenden, um den rollenbasierten Zugriff zu testen.

Bedingter Zugriff

Mit dem Tool Bedingter Zugriff erzwingt Microsoft Entra ID Organisationsrichtlinien. Mithilfe von Richtlinien für den bedingten Zugriff können Sie bei Bedarf die richtigen Zugriffssteuerungen anwenden, um die Sicherheit Ihrer Organisation zu gewährleisten. Beim Zugriff auf einen Azure KI Search-Dienst mithilfe der rollenbasierten Zugriffssteuerung kann der bedingte Zugriff Organisationsrichtlinien erzwingen.

Führen Sie die folgenden Schritte aus, um eine Richtlinie für bedingten Zugriff für Azure KI Search zu aktivieren:

  1. Melden Sie sich beim Azure-Portal an.

  2. Suchen Sie nach bedingten Zugriff von Microsoft Entra.

  3. Wählen Sie Richtlinien aus.

  4. Wählen Sie + Neue Richtlinie aus.

  5. Fügen Sie im Abschnitt Cloud-Apps oder Aktionen der Richtlinie Azure KI Search als Cloud-App hinzu, je nachdem, wie Sie Ihre Richtlinie einrichten möchten.

  6. Aktualisieren Sie die verbleibenden Parameter der Richtlinie. Geben Sie beispielsweise an, für welche Benutzer und Gruppen diese Richtlinie gilt.

  7. Speichern Sie die Richtlinie.

Wichtig

Wenn Ihrem Suchdienst eine verwaltete Identität zugewiesen ist, wird der spezifische Suchdienst als Cloud-App angezeigt, die als Teil der Richtlinie für bedingten Zugriff eingeschlossen oder ausgeschlossen werden kann. Richtlinien für bedingten Zugriff können nicht für einen bestimmten Suchdienst erzwungen werden. Stellen Sie stattdessen sicher, dass Sie die allgemeine Cloud-App für Azure KI Search auswählen.

Behandlung von Problemen bei der rollenbasierten Zugriffssteuerung

Bei der Entwicklung von Anwendungen, die die rollenbasierte Zugriffssteuerung für die Authentifizierung verwenden, können einige häufige Probleme auftreten:

  • Wenn das Autorisierungstoken von einer verwalteten Identität stammt und die entsprechenden Berechtigungen kürzlich zugewiesen wurden, kann es mehrere Stunden dauern, bis diese Berechtigungszuweisungen wirksam werden.
  • Die Standardkonfiguration für einen Suchdienst ist nur die schlüsselbasierte Authentifizierung. Wenn Sie die Standardschlüsseleinstellung nicht in die Zugriffssteuerung sowohl als auch"Rollenbasierte Zugriffssteuerung“ geändert haben, werden alle Anforderungen, die die rollenbasierte Authentifizierung verwenden, unabhängig von den zugrunde liegenden Berechtigungen automatisch verweigert.