Configurar uma conexão de indexador com o SQL do Azure usando uma identidade gerenciada
Este artigo explica como configurar uma conexão de indexador com o Banco de Dados SQL do Azure usando uma identidade gerenciada em vez de fornecer credenciais na cadeia de conexão.
Você pode usar uma identidade gerenciada atribuída pelo sistema ou uma identidade gerenciada atribuída pelo usuário (visualização). As identidades gerenciadas são logons do Microsoft Entra e exigem atribuições de função do Azure para acessar dados no Azure SQL.
Pré-requisitos
Crie uma identidade gerenciada para seu serviço de pesquisa.
Atribua uma função de administrador do Azure no SQL. A identidade usada na conexão do indexador precisa de permissões de leitura. Você deve ser um administrador do Microsoft Entra com um servidor no Banco de dados SQL ou na instância gerenciada do SQL para conceder permissões de leitura em um banco de dados.
Você deve estar familiarizado com os conceitos e a configuração do indexador.
1 - Atribuir permissões para ler o banco de dados
Siga as etapas abaixo para atribuir o serviço de pesquisa ou a permissão de identidade gerenciada atribuída pelo usuário para ler o banco de dados.
Conecte-se ao Visual Studio.
Autentique-se com a sua conta Microsoft Entra.
Execute os seguintes comandos:
Inclua os colchetes em torno do nome do serviço de pesquisa ou do nome de identidade gerenciado atribuído pelo usuário.
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];
Se você alterar posteriormente a identidade do serviço de pesquisa ou a identidade atribuída pelo usuário depois de atribuir permissões, deverá remover a associação de função e remover o usuário no banco de dados SQL e, em seguida, repetir a atribuição de permissão. A remoção da associação de função e do usuário pode ser realizada executando os seguintes comandos:
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 - Adicionar uma atribuição de função
Nesta seção, você dará permissão ao serviço Azure AI Search para ler dados do SQL Server. Para obter os passos detalhados, veja o artigo Atribuir funções do Azure com o portal do Azure.
No portal do Azure, navegue até a página do SQL Server do Azure.
Selecione Controlo de acesso (IAM) .
Selecione Adicionar > atribuição de função.
Na guia Função, selecione a função de Leitor apropriada.
No separador Membros, selecione Identidade gerida e, em seguida, selecione Selecionar membros.
Selecione a subscrição do Azure.
Se estiver a utilizar uma identidade gerida atribuída pelo sistema, selecione Identidade gerida atribuída pelo sistema, procure o seu serviço de pesquisa e, em seguida, selecione-o.
Caso contrário, se estiver a utilizar uma identidade gerida atribuída pelo utilizador, selecione Identidade gerida atribuída pelo utilizador, procure o nome da identidade gerida atribuída pelo utilizador e, em seguida, selecione-a.
No separador Rever + atribuir, selecione Rever + atribuir para atribuir a função.
3 - Criar a fonte de dados
Crie a fonte de dados e forneça uma identidade gerenciada atribuída ao sistema ou uma identidade gerenciada atribuída pelo usuário (visualização).
Identidade gerida atribuída pelo sistema
A API REST, o portal do Azure e o SDK do .NET suportam a identidade gerenciada atribuída pelo sistema.
Quando você está se conectando com uma identidade gerenciada atribuída ao sistema, a única alteração na definição da fonte de dados é o formato da propriedade "credenciais". Você fornecerá um nome de Catálogo Inicial ou Banco de Dados e um ResourceId que não tem chave de conta ou senha. O ResourceId deve incluir a ID de assinatura do Banco de Dados SQL do Azure, o grupo de recursos do Banco de Dados SQL e o nome do banco de dados SQL.
Veja um exemplo de como criar uma fonte de dados para indexar dados de uma conta de armazenamento usando a API REST Criar Fonte de Dados e uma cadeia de conexão de identidade gerenciada. O formato de cadeia de conexão de identidade gerenciada é o mesmo para a API REST, SDK .NET e o portal do Azure.
POST https://[service name].search.windows.net/datasources?api-version=2024-07-01
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"
}
}
Identidade gerenciada atribuída pelo usuário (visualização)
As APIs REST de visualização 2021-04-30 e posteriores suportam conexões baseadas em uma identidade gerenciada atribuída pelo usuário. Quando você está se conectando com uma identidade gerenciada atribuída pelo usuário, há duas alterações na definição da fonte de dados:
Primeiro, o formato da propriedade "credentials" é um nome de Catálogo Inicial ou Banco de Dados e um ResourceId que não tem chave de conta ou senha. O ResourceId deve incluir a ID de assinatura do Banco de Dados SQL do Azure, o grupo de recursos do Banco de Dados SQL e o nome do banco de dados SQL. Este é o mesmo formato que a identidade gerenciada atribuída ao sistema.
Em segundo lugar, adicione uma propriedade "identity" que contenha a coleção de identidades gerenciadas atribuídas pelo usuário. Apenas uma identidade gerenciada atribuída pelo usuário deve ser fornecida ao criar a fonte de dados. Defina-o para digitar "userAssignedIdentities".
Veja um exemplo de como criar um objeto de fonte de dados indexador usando a versão mais recente da API de visualização para Criar ou Atualizar Fonte de Dados:
POST https://[service name].search.windows.net/datasources?api-version=2024-05-01-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 - Crie o índice
O índice especifica os campos em um documento, atributos e outras construções que moldam a experiência de pesquisa.
Aqui está uma chamada da API REST Create Index com um campo pesquisável booktitle
:
POST https://[service name].search.windows.net/indexes?api-version=2024-07-01
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 - Crie o indexador
Um indexador conecta uma fonte de dados a um índice de pesquisa de destino e fornece uma programação para automatizar a atualização de dados. Depois que o índice e a fonte de dados forem criados, você estará pronto para criar o indexador. Se o indexador for bem-sucedido, a sintaxe da conexão e as atribuições de função serão válidas.
Aqui está uma chamada de API REST do Indexador Criar com uma definição de indexador SQL do Azure. O indexador é executado quando você envia a solicitação.
POST https://[service name].search.windows.net/indexers?api-version=2024-07-01
Content-Type: application/json
api-key: [admin key]
{
"name" : "sql-indexer",
"dataSourceName" : "sql-datasource",
"targetIndexName" : "my-target-index"
}
Se você receber um erro quando o indexador tentar se conectar à fonte de dados que diz que o cliente não tem permissão para acessar o servidor, dê uma olhada nos erros comuns do indexador.