Configurar uma conexão de indexador ao Armazenamento do Azure usando uma identidade gerenciada

Este artigo explica como configurar uma conexão de indexador para uma conta de Armazenamento 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 Armazenamento do Azure.

Nota

Se o armazenamento estiver protegido pela rede e na mesma região do serviço de pesquisa, você deverá usar uma identidade gerenciada atribuída ao sistema e uma das seguintes opções de rede: conectar-se como um serviço confiável ou conectar-se usando a regra de instância de recurso.

Pré-requisitos

  • Crie uma identidade gerenciada para seu serviço de pesquisa.

  • Atribua uma função no Armazenamento do Azure:

    • Escolha Storage Blob Data Reader para acesso de leitura de dados em Blob Storage e ADLS Gen2.

    • Escolha Leitor e Dados para acesso de leitura de dados em Armazenamento de Tabela e Armazenamento de Arquivos.

  • Você deve estar familiarizado com os conceitos e a configuração do indexador.

Gorjeta

Para obter um exemplo de código em C#, consulte Index Data Lake Gen2 usando o Microsoft Entra ID no GitHub.

Criar a origem 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 usando uma identidade gerenciada atribuída ao 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". Forneça um ResourceId que não tenha chave de conta ou senha. O ResourceId deve incluir a ID de assinatura da conta de armazenamento, o grupo de recursos da conta de armazenamento e o nome da conta de armazenamento.

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=2023-11-01
Content-Type: application/json
api-key: [admin key]

{
    "name" : "blob-datasource",
    "type" : "azureblob",
    "credentials" : { 
        "connectionString" : "ResourceId=/subscriptions/[subscription ID]/resourceGroups/[resource group name]/providers/Microsoft.Storage/storageAccounts/[storage account name]/;" 
    },
    "container" : { 
        "name" : "my-container", "query" : "<optional-virtual-directory-name>" 
    }
}   

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 ResourceId que não tem chave de conta ou senha. O ResourceId deve incluir a ID de assinatura da conta de armazenamento, o grupo de recursos da conta de armazenamento e o nome da conta de armazenamento. Esse formato é o mesmo 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 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" : "blob-datasource",
    "type" : "azureblob",
    "credentials" : { 
        "connectionString" : "ResourceId=/subscriptions/[subscription ID]/resourceGroups/[resource group name]/providers/Microsoft.Storage/storageAccounts/[storage account name]/;" 
    },
    "container" : { 
        "name" : "my-container", "query" : "<optional-virtual-directory-name>" 
    },
    "identity" : { 
        "@odata.type": "#Microsoft.Azure.Search.DataUserAssignedIdentity",
        "userAssignedIdentity" : "/subscriptions/[subscription ID]/resourcegroups/[resource group name]/providers/Microsoft.ManagedIdentity/userAssignedIdentities/[managed identity name]" 
    }
}   

Criar 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 à API REST Create Index com um campo pesquisável content para armazenar o texto extraído de blobs:

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

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

Criar 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 e executar 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 da API REST do Indexador Criar com uma definição de indexador de blob. O indexador é executado quando você envia a solicitação.

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

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

Acesso a dados protegidos pela rede em contas de armazenamento

As contas de armazenamento do Azure podem ser ainda mais protegidas usando firewalls e redes virtuais. Se você quiser indexar conteúdo de uma conta de armazenamento protegida usando um firewall ou rede virtual, consulte Fazer conexões de indexador com o Armazenamento do Azure como um serviço confiável.

Consulte também