Konfigurowanie połączenia indeksatora z usługą Azure SQL przy użyciu tożsamości zarządzanej

W tym artykule wyjaśniono, jak skonfigurować połączenie indeksatora z usługą Azure SQL Database przy użyciu tożsamości zarządzanej zamiast podawania poświadczeń w parametry połączenia.

Można użyć tożsamości zarządzanej przypisanej przez system lub tożsamości zarządzanej przypisanej przez użytkownika (wersja zapoznawcza). Tożsamości zarządzane to identyfikatory logowania firmy Microsoft Entra i wymagają przypisań ról platformy Azure w celu uzyskania dostępu do danych w usłudze Azure SQL.

Wymagania wstępne

1 — Przypisywanie uprawnień do odczytywania bazy danych

Wykonaj poniższe kroki, aby przypisać uprawnienie tożsamości zarządzanej przypisanej przez użytkownika lub usługi wyszukiwania, aby odczytać bazę danych.

  1. Połączenie do programu Visual Studio

    Connect to Visual Studio

  2. Uwierzytelnianie przy użyciu konta Microsoft Entra

    Authenticate

  3. Wykonaj następujące polecenia:

    Uwzględnij nawiasy wokół nazwy usługi wyszukiwania lub nazwy tożsamości zarządzanej przypisanej przez użytkownika.

    CREATE USER [insert your search service name here or user-assigned managed identity name] FROM EXTERNAL PROVIDER;
    EXEC sp_addrolemember 'db_datareader', [insert your search service name here or user-assigned managed identity name];
    

    New query

    Execute query

Jeśli później zmienisz tożsamość usługi wyszukiwania lub tożsamość przypisaną przez użytkownika po przypisaniu uprawnień, musisz usunąć członkostwo roli i usunąć użytkownika w bazie danych SQL, a następnie powtórzyć przypisanie uprawnień. Usunięcie członkostwa w roli i użytkownika można wykonać, uruchamiając następujące polecenia:

sp_droprolemember 'db_datareader', [insert your search service name or user-assigned managed identity name];

DROP USER IF EXISTS [insert your search service name or user-assigned managed identity name];

2 — Dodawanie przypisania roli

W tej sekcji przyznasz usłudze Azure AI usługa wyszukiwania uprawnienia do odczytywania danych z programu SQL Server. Aby uzyskać szczegółowe instrukcje, zobacz Przypisywanie ról platformy Azure przy użyciu witryny Azure Portal.

  1. W witrynie Azure Portal przejdź do strony programu Azure SQL Server.

  2. Wybierz pozycję Kontrola dostępu (IAM) .

  3. Wybierz pozycję Dodaj > przypisanie roli.

    Screenshot that shows Access control (IAM) page with Add role assignment menu open.

  4. Na karcie Rola wybierz odpowiednią rolę Czytelnik.

  5. Na karcie Członkowie wybierz pozycję Tożsamość zarządzana, a następnie wybierz pozycję Wybierz członków.

  6. Wybierz subskrypcję platformy Azure.

  7. Jeśli używasz tożsamości zarządzanej przypisanej przez system, wybierz pozycję Tożsamość zarządzana przypisana przez system, wyszukaj usługę wyszukiwania, a następnie wybierz ją.

  8. W przeciwnym razie, jeśli używasz tożsamości zarządzanej przypisanej przez użytkownika, wybierz pozycję Tożsamość zarządzana przypisana przez użytkownika, wyszukaj nazwę tożsamości zarządzanej przypisanej przez użytkownika, a następnie wybierz ją.

  9. Na karcie Przeglądanie i przypisywanie wybierz pozycję Przejrzyj i przypisz, aby przypisać rolę.

3 — Tworzenie źródła danych

Utwórz źródło danych i podaj tożsamość zarządzaną przypisaną przez system lub tożsamość zarządzaną przypisaną przez użytkownika (wersja zapoznawcza).

Tożsamość zarządzana przypisana przez system

Interfejs API REST, witryna Azure Portal i zestaw .NET SDK obsługują tożsamość zarządzaną przypisaną przez system.

Podczas nawiązywania połączenia z tożsamością zarządzaną przypisaną przez system jedyną zmianą definicji źródła danych jest format właściwości "credentials". Podasz nazwę katalogu początkowego lub bazy danych oraz identyfikator ResourceId, który nie ma klucza konta ani hasła. Identyfikator ResourceId musi zawierać identyfikator subskrypcji usługi Azure SQL Database, grupę zasobów usługi SQL Database oraz nazwę bazy danych SQL.

Oto przykład tworzenia źródła danych w celu indeksowania danych z konta magazynu przy użyciu interfejsu API REST tworzenia źródła danych i tożsamości zarządzanej parametry połączenia. Format tożsamości zarządzanej parametry połączenia jest taki sam dla interfejsu API REST, zestawu .NET SDK i witryny Azure Portal.

POST https://[service name].search.windows.net/datasources?api-version=2020-06-30
Content-Type: application/json
api-key: [admin key]

{
    "name" : "sql-datasource",
    "type" : "azuresql",
    "credentials" : { 
        "connectionString" : "Database=[SQL database name];ResourceId=/subscriptions/[subscription ID]/resourceGroups/[resource group name]/providers/Microsoft.Sql/servers/[SQL Server name];Connection Timeout=30;"
    },
    "container" : { 
        "name" : "my-table" 
    }
} 

Tożsamość zarządzana przypisana przez użytkownika (wersja zapoznawcza)

Interfejs API REST 2021-04-30-preview obsługuje połączenia oparte na tożsamości zarządzanej przypisanej przez użytkownika. Podczas nawiązywania połączenia z tożsamością zarządzaną przypisaną przez użytkownika istnieją dwie zmiany definicji źródła danych:

  • Najpierw format właściwości "credentials" to nazwa katalogu początkowego lub bazy danych i identyfikator ResourceId, który nie ma klucza konta ani hasła. Identyfikator ResourceId musi zawierać identyfikator subskrypcji usługi Azure SQL Database, grupę zasobów usługi SQL Database oraz nazwę bazy danych SQL. Jest to taki sam format jak tożsamość zarządzana przypisana przez system.

  • Po drugie dodasz właściwość "identity", która zawiera kolekcję tożsamości zarządzanych przypisanych przez użytkownika. Podczas tworzenia źródła danych należy podać tylko jedną tożsamość zarządzaną przypisaną przez użytkownika. Ustaw go na wartość "userAssignedIdentities".

Oto przykład tworzenia obiektu źródła danych indeksatora przy użyciu interfejsu API REST tworzenia lub aktualizowania źródła danych w wersji zapoznawczej:

POST https://[service name].search.windows.net/datasources?api-version=2021-04-30-preview
Content-Type: application/json
api-key: [admin key]

{
    "name" : "sql-datasource",
    "type" : "azuresql",
    "credentials" : { 
        "connectionString" : "Database=[SQL database name];ResourceId=/subscriptions/[subscription ID]/resourceGroups/[resource group name]/providers/Microsoft.Sql/servers/[SQL Server name];Connection Timeout=30;"
    },
    "container" : { 
        "name" : "my-table" 
    },
    "identity" : { 
        "@odata.type": "#Microsoft.Azure.Search.DataUserAssignedIdentity",
        "userAssignedIdentity" : "/subscriptions/[subscription ID]/resourcegroups/[resource group name]/providers/Microsoft.ManagedIdentity/userAssignedIdentities/[managed identity name]"
    }
}   

4 — Tworzenie indeksu

Indeks określa pola w dokumencie, atrybutach i innych konstrukcjach, które kształtuje środowisko wyszukiwania.

Oto wywołanie interfejsu API REST tworzenia indeksu z polem z możliwością booktitle wyszukiwania:

POST https://[service name].search.windows.net/indexes?api-version=2020-06-30
Content-Type: application/json
api-key: [admin key]

{
    "name" : "my-target-index",
    "fields": [
        { "name": "id", "type": "Edm.String", "key": true, "searchable": false },
        { "name": "booktitle", "type": "Edm.String", "searchable": true, "filterable": false, "sortable": false, "facetable": false }
    ]
}

5 — Tworzenie indeksatora

Indeksator łączy źródło danych z docelowym indeksem wyszukiwania i udostępnia harmonogram automatyzowania odświeżania danych. Po utworzeniu indeksu i źródła danych możesz utworzyć indeksator. Jeśli indeksator zakończy się pomyślnie, składnia połączenia i przypisania ról są prawidłowe.

Oto wywołanie interfejsu API REST create indexer z definicją indeksatora Usługi Azure SQL. Indeksator zostanie uruchomiony po przesłaniu żądania.

POST https://[service name].search.windows.net/indexers?api-version=2020-06-30
Content-Type: application/json
api-key: [admin key]

{
    "name" : "sql-indexer",
    "dataSourceName" : "sql-datasource",
    "targetIndexName" : "my-target-index"

Rozwiązywanie problemów

Jeśli wystąpi błąd, gdy indeksator spróbuje nawiązać połączenie ze źródłem danych z informacją, że klient nie może uzyskać dostępu do serwera, zapoznaj się z typowymi błędami indeksatora.

Możesz również wykluczyć wszelkie problemy z zaporą, próbując nawiązać połączenie z programem i bez ograniczeń.

Zobacz też