Настройка подключения индексатора к SQL Azure с помощью управляемого удостоверения

В этой статье объясняется, как настроить подключение индексатора для База данных SQL Azure с помощью управляемого удостоверения вместо предоставления учетных данных в строка подключения.

Вы можете использовать управляемое удостоверение, назначаемое системой, или управляемое удостоверение, назначенное пользователем (предварительная версия). Управляемые удостоверения — это имена входа Microsoft Entra и требуют назначения ролей Azure для доступа к данным в SQL Azure.

Необходимые компоненты

1. Назначение разрешений для чтения базы данных

Чтобы назначить службе поиска или назначаемому пользователем управляемому удостоверению разрешение на чтение базы данных, выполните указанные ниже действия.

  1. Подключение к Visual Studio

    Connect to Visual Studio

  2. Проверка подлинности с помощью учетной записи Microsoft Entra

    Authenticate

  3. Выполните следующие команды:

    Заключите имя службы поиска или назначаемого пользователем управляемого удостоверения в квадратные скобки.

    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

Если позже вы измените удостоверение службы поиска или назначаемое пользователем удостоверение после назначения разрешений, необходимо удалить членство в роли и удалить пользователя в базе данных SQL, а затем повторить назначение разрешений. Чтобы удалить членство в роли и пользователя, выполните следующие команды.

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. Добавление назначения роли

В этом разделе описано, как предоставить azure AI служба разрешение на чтение данных из SQL Server. Подробные инструкции см. в статье Назначение ролей Azure с помощью портала Microsoft Azure.

  1. На портале Azure перейдите к учетной записи Azure SQL Server.

  2. Выберите Управление доступом (IAM) .

  3. Выберите "Добавить" > "Добавить назначение ролей".

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

  4. На вкладке "Роль" выберите соответствующую роль читателя .

  5. На вкладке "Участники" выберите "Управляемое удостоверение" и нажмите "Выбрать участников".

  6. Выберите свою подписку Azure.

  7. Если вы используете управляемое удостоверение, назначаемое системой, выберите управляемое удостоверение, назначаемое системой, найдите службу поиска и выберите ее.

  8. В противном случае, если вы используете управляемое удостоверение, назначаемое пользователем, выберите управляемое удостоверение, назначаемое пользователем, найдите имя управляемого удостоверения, назначаемого пользователем, и выберите его.

  9. Чтобы назначить роль, на вкладке Проверка и назначение выберите Проверка и назначение.

3. Создание источника данных

Создайте источник данных и укажите управляемое удостоверение, назначаемое системой, или управляемое удостоверение, назначаемое пользователем (предварительная версия).

Управляемое удостоверение, назначаемое системой

REST API, портал Azure и пакет SDK для .NET поддерживают управляемое удостоверение, назначаемое системой.

При подключении к управляемому удостоверению, назначаемого системой, единственное изменение определения источника данных — это формат свойства credentials. Вы укажите имя начального каталога или базы данных и идентификатор ресурса, не имеющий ключа учетной записи или пароля. Значение ResourceId должно содержать идентификатор подписки для базы данных SQL Azure, группу ресурсов для базы данных SQL и имя базы данных SQL.

Ниже приведен пример создания источника данных для индексирования данных из учетной записи хранения с помощью REST API создания источника данных и управляемого удостоверения строка подключения. Формат строки подключения с управляемым удостоверением одинаков для REST API, пакета SDK для .NET и портала Azure.

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" 
    }
} 

Управляемое удостоверение, назначаемое пользователем (предварительная версия)

REST API 2021-04-30-preview поддерживает подключения на основе управляемого удостоверения, назначаемого пользователем. При подключении к управляемому удостоверению, назначаемого пользователем, существует два изменения определения источника данных:

  • Во-первых, формат свойства "credentials" является начальным каталогом или именем базы данных и идентификатором ресурса, который не имеет ключа учетной записи или пароля. Значение ResourceId должно содержать идентификатор подписки для базы данных SQL Azure, группу ресурсов для базы данных SQL и имя базы данных SQL. Это тот же формат, что и управляемое удостоверение, назначаемое системой.

  • Во-вторых, вы добавите свойство identity, содержащее коллекцию управляемых удостоверений, назначаемых пользователем. При создании источника данных должно быть предоставлено только одно управляемое удостоверение, назначаемое пользователем. Задайте для него тип userAssignedIdentities.

Ниже приведен пример создания объекта источника данных индексатора с помощью REST API создания или обновления источника данных предварительной версии:

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. Создание индекса

Индекс задает поля в документе, атрибуты, и другие компоненты, которые определяют процедуру поиска.

Ниже приведен вызов REST API для создания индекса с полем для booktitle поиска:

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. Создание индексатора

Индексатор соединяет источник данных с целевым индексом поиска и предоставляет расписание для автоматизации обновления данных. Когда индекс и источник данных уже созданы, можно создать индексатор. Если индексатор успешно выполнен, синтаксис подключения и назначения ролей допустимы.

Ниже приведен вызов REST API индексатора с определением индексатора SQL Azure. Индексатор будет выполняться при отправке запроса.

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"

Устранение неполадок

Если при попытке индексатора подключиться к источнику данных возникает ошибка, которая говорит, что клиенту запрещен доступ к серверу, ознакомьтесь с распространенными ошибками индексатора.

Вы также можете исключить какие-либо проблемы брандмауэра, пытаясь подключиться и без ограничений.

См. также