Ligar um serviço de pesquisa a outros recursos do Azure com uma identidade gerida

Você pode configurar um serviço Azure AI Search para se conectar a outros recursos do Azure usando uma identidade gerenciada atribuída pelo sistema ou pelo usuário e uma atribuição de função do Azure. Identidades gerenciadas e atribuições de função eliminam a necessidade de passar segredos e credenciais em uma cadeia de conexão ou código.

Pré-requisitos

  • Um serviço de pesquisa na camada Básica ou superior.

  • Um recurso do Azure que aceita solicitações de entrada de um logon do Microsoft Entra que tem uma atribuição de função válida.

Cenários suportados

O Azure AI Search pode usar uma identidade gerenciada atribuída pelo sistema ou pelo usuário em conexões de saída com recursos do Azure. Uma identidade gerenciada pelo sistema é indicada quando uma cadeia de conexão é a ID de recurso exclusiva de um serviço ou aplicativo com reconhecimento de ID do Microsoft Entra. Uma identidade gerenciada atribuída pelo usuário é especificada por meio de uma propriedade "identity".

Um serviço de pesquisa usa o Armazenamento do Azure como uma fonte de dados indexadora e como um coletor de dados para sessões de depuração, cache de enriquecimento e armazenamento de conhecimento. Para recursos de pesquisa que gravam de volta no armazenamento, a identidade gerenciada precisa de uma atribuição de função de colaborador, conforme descrito na seção "Atribuir uma função".

Cenário Identidade gerenciada pelo sistema Identidade gerenciada atribuída pelo usuário (visualização)
Conexões do indexador com fontesde dados do Azure com suporte 13 Sim Sim
Azure Key Vault para chaves gerenciadas pelo cliente Sim Sim
Sessões de depuração (hospedadas no Armazenamento do Azure)1 Sim No
Cache de enriquecimento (hospedado no Armazenamento do Azure)1,2 Sim Sim
Repositório de Conhecimento (hospedado no Armazenamento do Azure)1 Sim Sim
Habilidades personalizadas (hospedadas no Azure Functions ou equivalente) Sim Sim

1 Para conectividade entre pesquisa e armazenamento, sua configuração de segurança de rede impõe restrições sobre o tipo de identidade gerenciada que você pode usar. Somente uma identidade gerenciada pelo sistema pode ser usada para uma conexão de mesma região com o armazenamento por meio da exceção de serviço confiável ou da regra de instância de recurso. Consulte Acesso a uma conta de armazenamento protegida pela rede para obter detalhes.

2 Um método para especificar um cache de enriquecimento está no assistente Importar dados. Atualmente, o assistente não aceita uma cadeia de conexão de identidade gerenciada para cache de enriquecimento. No entanto, após a conclusão do assistente, você pode atualizar a cadeia de conexão na definição JSON do indexador para especificar uma identidade gerenciada atribuída pelo sistema ou pelo usuário e, em seguida, executar novamente o indexador.

3 Observe que a desativação de chaves na conta de armazenamento do Azure não é suportada atualmente para a Tabela do Azure usada como fonte de dados. Embora a identidade gerenciada seja usada para não fornecer as chaves de armazenamento explicitamente, o serviço de pesquisa de IA ainda usa as chaves para essa implementação.

Criar uma identidade gerenciada pelo sistema

Quando uma identidade gerenciada atribuída ao sistema é habilitada, o Azure cria uma identidade para seu serviço de pesquisa que pode ser usada para autenticar outros serviços do Azure dentro do mesmo locatário e assinatura. Em seguida, você pode usar essa identidade em atribuições de controle de acesso baseado em função do Azure (Azure RBAC) que permitem acesso a dados durante a indexação.

Uma identidade gerenciada atribuída ao sistema é exclusiva do seu serviço de pesquisa e vinculada ao serviço por toda a sua vida.

  1. Entre no portal do Azure e encontre seu serviço de pesquisa.

  2. Em Configurações, selecione Identidade.

  3. Na guia Sistema atribuído, em Status, selecione Ativado.

  4. Selecione Guardar.

    Screenshot of the Identity page in Azure portal.

    Depois de salvar, você verá um identificador de objeto que foi atribuído ao seu serviço de pesquisa.

    Screenshot of a system identity object identifier.

Criar uma identidade gerenciada atribuída pelo usuário (visualização)

Uma identidade gerenciada atribuída pelo usuário é um recurso no Azure. É útil se você precisar de mais granularidade nas atribuições de função, pois pode criar identidades separadas para diferentes aplicativos e cenários.

Importante

Esta funcionalidade está em pré-visualização pública sob termos de utilização suplementares. Atualmente, não há suporte para identidades gerenciadas atribuídas pelo usuário para conexões com uma conta de armazenamento protegida pela rede. A solicitação de pesquisa atualmente requer um endereço IP público.

  1. Inicie sessão no portal do Azure

  2. Selecione + Criar um recurso.

  3. Na barra de pesquisa "Serviços de pesquisa e marketplace", procure por "Identidade gerenciada atribuída pelo usuário" e selecione Criar.

    Screenshot of the user assigned managed identity tile in Azure Marketplace.

  4. Selecione a assinatura, o grupo de recursos e a região. Dê à identidade um nome descritivo.

  5. Selecione Criar e aguarde até que o recurso termine a implantação.

    Nas próximas etapas, você atribuirá a identidade gerenciada atribuída pelo usuário ao seu serviço de pesquisa.

  6. Na página do serviço de pesquisa, em Configurações, selecione Identidade.

  7. Na guia Usuário atribuído, selecione Adicionar.

  8. Escolha a assinatura e, em seguida, selecione o recurso gerenciado atribuído pelo usuário que você criou na etapa anterior.

Permitir acesso ao firewall

Se o seu recurso do Azure estiver protegido por um firewall, certifique-se de que existe uma regra de entrada que admite pedidos do seu serviço de pesquisa.

  • Para conexões de mesma região com o Armazenamento de Blobs do Azure ou o Azure Data Lake Storage Gen2, use uma identidade gerenciada pelo sistema e a exceção de serviço confiável. Opcionalmente, você pode configurar uma regra de instância de recurso para admitir solicitações.

  • Para todos os outros recursos e conexões, configure uma regra de firewall IP que admita solicitações da Pesquisa. Consulte Acesso do indexador a conteúdo protegido por recursos de segurança de rede do Azure para obter detalhes.

Atribuir uma função

Uma identidade gerenciada deve ser emparelhada com uma função do Azure que determina permissões no recurso do Azure.

  • As permissões de leitor de dados são necessárias para conexões de dados do indexador e para acessar uma chave gerenciada pelo cliente no Cofre de Chaves do Azure.

  • As permissões de colaborador (gravação) são necessárias para recursos de enriquecimento de IA que usam o Armazenamento do Azure para hospedar dados de sessão de depuração, cache de enriquecimento e armazenamento de conteúdo de longo prazo em um repositório de conhecimento.

As etapas a seguir são para o Armazenamento do Azure. Se o seu recurso for o Azure Cosmos DB ou o Azure SQL, as etapas serão semelhantes.

  1. Entre no portal do Azure e localize seu recurso do Azure ao qual o serviço de pesquisa deve ter acesso.

  2. No Armazenamento do Azure, selecione Controle de acesso (AIM) no painel de navegação esquerdo.

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

  4. Na página Função, selecione as funções necessárias para o seu serviço de pesquisa:

    Tarefa Atribuição de função
    Indexação de Blob usando um indexador Adicionar leitor de dados de Blob de armazenamento
    Indexação ADLS Gen2 usando um indexador Adicionar leitor de dados de Blob de armazenamento
    Indexação de tabelas usando um indexador Adicionar leitor e acesso a dados
    Indexação de arquivos usando um indexador Adicionar leitor e acesso a dados
    Gravar em um repositório de conhecimento Adicione o Blob de Armazenamento DataContributor para projeções de objetos e arquivos e o Reader e o Data Access para projeções de tabela.
    Gravar em um cache de enriquecimento Adicionar Contribuidor de Dados de Blob de Armazenamento
    Salvar estado da sessão de depuração Adicionar Contribuidor de Dados de Blob de Armazenamento
  5. Na página Membros, selecione Identidade gerenciada.

  6. Selecione membros. Na página Selecionar identidade gerenciada, escolha sua assinatura e filtre por tipo de serviço e selecione o serviço. Somente os serviços que têm uma identidade gerenciada estarão disponíveis para seleção.

    Screenshot of the select managed identity pane in the role assignment wizard.

  7. Selecione Rever + atribuir.

Exemplos de cadeia de conexão

Depois que uma identidade gerenciada é definida para o serviço de pesquisa e recebe uma atribuição de função, as conexões de saída podem ser modificadas para usar a ID de recurso exclusiva do outro recurso do Azure. Aqui estão alguns exemplos de cadeias de conexão para vários cenários.

Fonte de dados de Blob (sistema):

Uma fonte de dados indexadora inclui uma propriedade "credenciais" que determina como a conexão é feita com a fonte de dados. O exemplo a seguir mostra uma cadeia de conexão especificando o ID de recurso exclusivo de uma conta de armazenamento. O Microsoft Entra ID autenticará a solicitação usando a identidade gerenciada pelo sistema do serviço de pesquisa. Observe que a cadeia de conexão não inclui um contêiner. Em uma definição de fonte de dados, um nome de contêiner é especificado na propriedade "container" (não mostrada), não na cadeia de conexão.

"credentials": {
    "connectionString": "ResourceId=/subscriptions/{subscription-ID}/resourceGroups/{resource-group-name}/providers/Microsoft.Storage/storageAccounts/{storage-account-name};"
    }

Fonte de dados de Blob (usuário):

Uma solicitação de pesquisa para o Armazenamento do Azure também pode ser feita sob uma identidade gerenciada atribuída pelo usuário, atualmente em visualização. A identidade do usuário do serviço de pesquisa é especificada na propriedade "identity". Você pode usar o portal ou a versão de visualização da API REST 2021-04-30-Preview para definir a identidade.

"credentials": {
    "connectionString": "ResourceId=/subscriptions/{subscription-ID}/resourceGroups/{resource-group-name}/providers/Microsoft.Storage/storageAccounts/{storage-account-name};"
    },
  . . .
"identity": {
    "@odata.type": "#Microsoft.Azure.Search.DataUserAssignedIdentity",
    "userAssignedIdentity": "/subscriptions/{subscription-ID}/resourceGroups/{resource-group-name}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{user-assigned-managed-identity-name}"
  }

Loja de conhecimento:

Uma definição de repositório de conhecimento inclui uma cadeia de conexão com o Armazenamento do Azure. No Armazenamento do Azure, um repositório de conhecimento criará projeções como blobs e tabelas. A cadeia de conexão é o ID de recurso exclusivo da sua conta de armazenamento. Observe que a cadeia de caracteres não inclui contêineres ou tabelas no caminho. Eles são definidos na definição de projeção incorporada, não na cadeia de conexão.

"knowledgeStore": {
  "storageConnectionString": "ResourceId=/subscriptions/{subscription-ID}/resourceGroups/{resource-group-name}/providers/Microsoft.Storage/storageAccounts/storage-account-name};"
}

Cache de enriquecimento:

Um indexador cria, usa e lembra o contêiner usado para os enriquecimentos em cache. Não é necessário incluir o contêiner na cadeia de conexão de cache. Pode encontrar o ID do objeto na página Identidade do seu serviço de pesquisa no portal.

"cache": {
  "enableReprocessing": true,
  "storageConnectionString": "ResourceId=/subscriptions/{subscription-ID}/resourceGroups/{resource-group-name}/providers/Microsoft.Storage/storageAccounts/{storage-account-name};"
}

Sessão de depuração:

Uma sessão de depuração é executada no portal e usa uma cadeia de conexão quando você inicia a sessão. Você pode colar uma cadeia de caracteres semelhante ao exemplo a seguir.

"ResourceId=/subscriptions/{subscription-ID}/resourceGroups/{resource-group-name}/providers/Microsoft.Storage/storageAccounts/{storage-account-name}/{container-name};",

Habilidade personalizada:

Uma habilidade personalizada tem como alvo o ponto de extremidade de uma função do Azure ou aplicativo que hospeda código personalizado. O ponto de extremidade é especificado na definição de habilidade personalizada. A presença do "authResourceId" diz ao serviço de pesquisa para se conectar usando uma identidade gerenciada, passando o ID do aplicativo da função ou aplicativo de destino na propriedade.

{
  "@odata.type": "#Microsoft.Skills.Custom.WebApiSkill",
  "description": "A custom skill that can identify positions of different phrases in the source text",
  "uri": "https://contoso.count-things.com",
  "authResourceId": "<Azure-AD-registered-application-ID>",
  "batchSize": 4,
  "context": "/document",
  "inputs": [ ... ],
  "outputs": [ ...]
}

Consulte também