Share via


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

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.

  1. Conectar-se ao Visual Studio

    Connect to Visual Studio

  2. Autenticar com a sua conta Microsoft Entra

    Authenticate

  3. 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];
    

    New query

    Execute query

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.

  1. No portal do Azure, navegue até a página do SQL Server do Azure.

  2. Selecione Controlo de acesso (IAM) .

  3. Selecione Adicionar > atribuição de função.

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

  4. Na guia Função, selecione a função de Leitor apropriada.

  5. No separador Membros, selecione Identidade gerida e, em seguida, selecione Selecionar membros.

  6. Selecione a subscrição do Azure.

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

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

  9. 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=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" 
    }
} 

Identidade gerenciada atribuída pelo usuário (visualização)

A API REST 2021-04-30-preview suporta 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, você adicionará uma propriedade "identity" que contém 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 API REST de visualização Criar ou Atualizar Fonte de Dados:

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 - 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=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 - 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 será executado quando você enviar a solicitação.

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"

Resolução de problemas

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.

Você também pode descartar quaisquer problemas de firewall tentando a conexão com e sem restrições em vigor.

Consulte também