Faça conexões de saída por meio de um link privado compartilhado

Este artigo explica como configurar chamadas privadas de saída do Azure AI Search para um recurso de PaaS do Azure executado em uma rede virtual.

Configurar uma conexão privada permite que um serviço de pesquisa se conecte a um endereço IP de rede virtual, em vez de uma porta aberta para a Internet. O objeto criado para a conexão é chamado de link privado compartilhado. Na conexão, o serviço de pesquisa usa o link privado compartilhado internamente para acessar um recurso de PaaS do Azure dentro do limite de rede.

O link privado compartilhado é um recurso premium cobrado por uso. Quando você configura um link privado compartilhado, os preços do ponto de extremidade privado são adicionados à fatura do Azure. À medida que você usa o link privado compartilhado, as taxas de transferência de dados para acesso de entrada e saída também são faturadas. Para obter detalhes, confira Preço do Link Privado do Azure.

Observação

Se você estiver configurando uma conexão de indexador privado com uma Instância Gerenciada de SQL, confira este artigo.

O Azure AI Search faz chamadas de saída para outros recursos de PaaS do Azure nos seguintes cenários:

  • O indexador ou mecanismo de pesquisa conecta-se ao OpenAI do Azure para inserções de texto para vetor
  • O indexador se conecta a fontes de dados com suporte
  • Conexões do indexador (conjunto de habilidades) com o Armazenamento do Microsoft Azure para enriquecimentos em cache, estado de sessão de depuração ou gravação em um repositório de conhecimento
  • Solicitações da chave de criptografia para o Azure Key Vault
  • Solicitações de habilidade personalizadas para o Azure Functions ou recurso semelhante

Os links privados compartilhados funcionam apenas para conexões de Azure para Azure. Se você estiver se conectando ao OpenAI ou a outro modelo externo, a conexão deverá ser feita pela Internet pública.

Os links privados compartilhados são para operações e dados acessados por meio de um ponto de extremidade privado para recursos do Azure ou clientes executados em uma rede virtual do Azure.

Um link privado compartilhado é:

  • Criado usando ferramentas, APIs ou SDKs do Azure AI Search
  • Aprovado pelo proprietário do recurso de PaaS do Azure
  • Usado internamente pela Pesquisa de IA do Azure em uma conexão privada com um recurso específico do Azure

Somente o serviço de pesquisa pode usar os links privados que ele cria, e pode haver apenas um link privado compartilhado, o qual foi criado no serviço para cada combinação de recursos e sub-recursos.

Depois de configurar o link privado, ele será usado automaticamente sempre que o serviço de pesquisa se conectar a esse recurso de PaaS. Você não precisa modificar a cadeia de conexão ou alterar o cliente que está usando para emitir as solicitações, embora o dispositivo usado para a conexão precise se conectar usando um IP autorizado no firewall do recurso de PaaS do Azure.

Há dois cenários para usar o Link Privado do Azure e o Azure AI Search em conjunto.

  • Cenário um: crie um link privado compartilhado quando uma conexão de saída (indexador) ao Azure PaaS exigir uma conexão privada.

  • Cenário dois: configurar a pesquisa para uma conexão de entrada privada de clientes que são executados em uma rede virtual.

O primeiro cenário é abordado neste artigo.

Embora ambos os cenários tenham uma dependência do Link Privado do Azure, eles são independentes. Você pode criar um link privado compartilhado sem precisar configurar seu próprio serviço de pesquisa para um ponto de extremidade privado.

Limitações

Ao avaliar os links privados compartilhados para seu cenário, lembre-se dessas restrições.

  • Vários dos tipos de recursos usados em um link privado compartilhado estão em versão prévia. Se você estiver se conectando a um recurso em versão prévia (Banco de Dados do Azure para MySQL, Azure Functions ou Instância Gerenciada de SQL do Azure), use uma versão prévia da API REST de Gerenciamento para criar o link privado compartilhado. Essas versões incluem 2020-08-01-preview, 2021-04-01-preview e 2024-03-01-preview.

  • A execução do indexador precisa usar o ambiente de execução privada específico do serviço de pesquisa. Não há suporte para conexões de ponto de extremidade privado no ambiente multilocatário. A configuração desse requisito é abordada neste artigo.

Pré-requisitos

  • Um Azure AI Search na camada Básica ou superior. Se você estiver usando o enriquecimento de IA e os conjuntos de habilidades, a camada deverá ser Standard 2 (S2) ou superior. Confira Limites de Serviço para obter detalhes.

  • Um recurso de PaaS do Azure da seguinte lista de tipos de recursos com suporte, configurado para execução em uma rede virtual.

  • Permissões na Pesquisa de IA do Azure e na fonte de dados:

    • No recurso de PaaS do Azure, você deve ter a permissão para aprovar conexões de ponto de extremidade privado. Por exemplo, se você estiver usando uma conta de Armazenamento do Azure como sua fonte de dados (como contêiner de Blobs, compartilhamento de Arquivos do Azure, tabela do Azure), precisará de Microsoft.Storage/storageAccounts/privateEndpointConnectionsApproval/action.

    • No serviço de pesquisa, você deve ter permissões de leitura e gravação em recursos de link privado compartilhado e status de operação de leitura:

      • Microsoft.Search/searchServices/sharedPrivateLinkResources/write
      • Microsoft.Search/searchServices/sharedPrivateLinkResources/read
      • Microsoft.Search/searchServices/sharedPrivateLinkResources/operationStatuses/read

Tipos de recurso compatíveis

Você pode criar um link privado compartilhado para os recursos a seguir.

Tipo de recurso Sub-recurso (ou ID do Grupo)
Microsoft.Storage/storageAccounts 1 blob, table, dfs, file
Microsoft.DocumentDB/databaseAccounts 2 Sql
Microsoft.Sql/servers sqlServer
Microsoft.KeyVault/vaults vault
Microsoft.DBforMySQL/servers (versão prévia) mysqlServer
Microsoft.Web/sites (preview) 3 sites
Microsoft.Sql/managedInstances (versão prévia) 4 managedInstance
Microsoft.CognitiveServices/accounts (versão prévia) 5 openai_account

1 Se o Armazenamento do Azure e o Azure AI Search estiverem na mesma região, a conexão com o armazenamento será feita pela rede de backbone da Microsoft, o que significa que um link privado compartilhado será redundante para essa configuração. No entanto, se você já configurou um ponto de extremidade privado para o Armazenamento do Azure, também deverá configurar um link privado compartilhado ou a conexão será recusada no lado do armazenamento. Além disso, se você estiver usando vários formatos de armazenamento para vários cenários na pesquisa, crie um link privado compartilhado separado para cada sub-recurso.

2 O tipo de recurso Microsoft.DocumentDB/databaseAccounts é usado para conexões de indexador com o Azure Cosmos DB for NoSQL. O nome do provedor e a ID do grupo diferenciam maiúsculas de minúsculas.

3 O tipo de recurso Microsoft.Web/sites é usado para o serviço de aplicativo e as funções do Azure. No contexto do Azure AI Search, uma função do Azure é o cenário mais provável. Uma função do Azure é comumente usada para hospedar a lógica de uma habilidade personalizada. A função do Azure tem planos de hospedagem do Serviço de Aplicativo de Consumo, Premium e Dedicado. No momento, não há suporte para o ASE (Ambiente do Serviço de Aplicativo) e o AKS (Serviço de Kubernetes do Azure).

4 Confira Criar um link privado compartilhado para uma Instância Gerenciada de SQL para obter instruções.

5 O tipo de recurso Microsoft.CognitiveServices/accounts é usado para conexões de indexador com o Azure OpenAI ao implementar Vetorização integrada.

Use o portal do Azure, a API REST de Gerenciamento, a CLI do Azure ou o Azure PowerShell para criar um link privado compartilhado.

Veja a seguir algumas dicas:

  • Dê ao link privado um nome significativo. No recurso de PaaS do Azure, um link privado compartilhado aparece junto com outros pontos de extremidade privados. Um nome como "shared-private-link-for-search" pode lembrar você de como ele é usado.

Ao concluir as etapas nesta seção, você terá um link privado compartilhado provisionado em um estado pendente. São necessários vários minutos para criar o link. Depois de criado, o proprietário do recurso deve aprovar a solicitação antes de entrar em operação.

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

  2. Em Configurações no painel de navegação à esquerda, selecione Rede.

  3. Na página Acesso Privado Compartilhado, selecione + Adicionar Acesso Privado Compartilhado.

  4. Selecione Conectar-se a um recurso do Azure em meu diretório ou Conectar-se a um recurso do Azure por ID de recurso.

  5. Se você selecionar a primeira opção (recomendada), o portal ajudará a escolher o recurso apropriado do Azure e preencherá as outras propriedades, como a ID do grupo do recurso e o tipo de recurso.

    Captura de tela da página Adicionar acesso privado compartilhado mostrando uma experiência guiada para criar um recurso de link privado compartilhado.

  6. Se você selecionar a segunda opção, insira a ID do recurso do Azure manualmente e escolha a ID do grupo apropriada na lista no início deste artigo.

    Captura de tela da página Adicionar acesso privado compartilhado mostrando a experiência manual para criar um recurso de link privado compartilhado.

  7. Confirme se o status de provisionamento é "Atualizando".

    Captura de tela da página Adicionar acesso privado compartilhado mostrando a criação do recurso em andamento.

  8. Depois que o recurso for criado, o estado de provisionamento do recurso será alterado para "Bem-sucedido".

    Captura de tela da página Adicionar acesso privado compartilhado mostrando a criação do recurso concluída.

Uma resposta 202 Accepted é retornada em caso de êxito. O processo de criação de um ponto de extremidade privado de saída é uma operação de execução longa (assíncrona). Ele envolve a implantação dos seguintes recursos:

  • Um ponto de extremidade privado, alocado com um endereço IP privado em um estado "Pending". O endereço IP privado é obtido do espaço de endereço alocado na rede virtual do ambiente de execução para o indexador particular específico do serviço de pesquisa. Após a aprovação do ponto de extremidade privado, qualquer comunicação do Azure AI Search com o recurso do Azure é originada no endereço IP privado e em um canal de link privado seguro.

  • Uma zona DNS privada para o tipo de recurso, com base na ID do grupo. Ao implantar esse recurso, você garante que qualquer pesquisa de DNS para o recurso particular utiliza o endereço IP associado ao ponto de extremidade privado.

2 - Aprovar a conexão de ponto de extremidade privado

A aprovação da conexão de ponto de extremidade privado é concedida no PaaS do Azure. A aprovação explícita pelo proprietário do recurso é obrigatória. As etapas a seguir abrangem a aprovação usando o portal do Azure, mas aqui estão alguns links para aprovar a conexão de forma programática do lado do PaaS do Azure:

Usando o portal do Azure, execute as etapas a seguir:

  1. Abra a página Rede do recurso PaaS do Azure. Texto

  2. Localize a seção que lista as conexões de ponto de extremidade privados. O exemplo a seguir cria uma conta de armazenamento.

    Captura de tela do portal do Azure, que mostra o painel Conexões de ponto de extremidade privado.

  3. Selecione a conexão e, em seguida, selecione Aprovar. Pode levar alguns minutos para que o status seja atualizado no portal.

    Captura de tela do portal do Azure, que mostra um status Aprovado no painel Conexões de ponto de extremidade privado.

Depois que o ponto de extremidade privado for aprovado, o Azure AI Search criará os mapeamentos de zona DNS necessários na zona DNS criada para ele.

Embora o link do ponto de extremidade privado na página de Rede esteja ativo, ele não será resolvido.

Captura de tela do link de ponto de extremidade privado na página de rede do Azure PaaS.

Selecionar o link produz um erro. Uma mensagem de status de "The access token is from the wrong issuer" e must match the tenant associated with this subscription aparece porque o recurso de ponto de extremidade privado do back-end é provisionado pela Microsoft em um locatário gerenciado pela Microsoft, enquanto o recurso vinculado (Pesquisa de IA do Azure) está em seu locatário. Por design, não é possível acessar o recurso do ponto de extremidade privado ao selecionar o link de conexão do ponto de extremidade privado.

Siga as instruções na próxima seção para verificar o status do seu link privado compartilhado.

Na Pesquisa de IA do Azure, você pode confirmar a aprovação da solicitação ao rever a página Acesso Privado Compartilhado da página Rede do serviço de pesquisa. O estado da conexão deve ser aprovado.

Captura de tela do portal do Azure mostrando um recurso de link privado compartilhado aprovado.

Como alternativa, você também pode obter o estado da conexão usando a API Link Privado Compartilhado GET.

az rest --method get --uri https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/contoso/providers/Microsoft.Search/searchServices/contoso-search/sharedPrivateLinkResources/blob-pe?api-version=2023-11-01

Isso retornará um JSON, em que o estado da conexão aparece como "status" na seção "propriedades". Veja a seguir um exemplo de uma conta de armazenamento.

{
      "name": "blob-pe",
      "properties": {
        "privateLinkResourceId": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/contoso/providers/Microsoft.Storage/storageAccounts/contoso-storage",
        "groupId": "blob",
        "requestMessage": "please approve",
        "status": "Approved",
        "resourceRegion": null,
        "provisioningState": "Succeeded"
      }
}

Se o estado de provisionamento (properties.provisioningState) do recurso for "Bem-sucedido" e o estado de conexão (properties.status) for "Aprovado", isso significa que o recurso de link privado compartilhado é funcional e o indexador pode ser configurado para se comunicar pelo ponto de extremidade privado.

4 - Configurar o indexador para ser executado no ambiente privado

A execução do indexador ocorre em um ambiente privado, que é específico para o serviço de pesquisa, ou em um ambiente multilocatário usado internamente para descarregar o processamento de alto custo do conjunto de habilidades para vários clientes.

O ambiente de execução é transparente, mas depois que você começar a criar regras de firewall ou estabelecer conexões privadas, deverá levar em conta a execução do indexador. Para uma conexão privada, configure a execução do indexador para ser sempre executada no ambiente privado.

Essa etapa mostra como configurar o indexador para ser executado no ambiente privado usando a API REST. Também é possível definir o ambiente de execução usando o editor JSON no portal.

Observação

Você pode executar essa etapa antes que a conexão de ponto de extremidade privado seja aprovada. No entanto, até que a conexão de ponto de extremidade privado apareça como aprovada, todo indexador existente que tentar se comunicar com um recurso seguro (como a conta de armazenamento) terminará em um estado de falha transitória e a criação de indexadores falhará.

  1. Crie a definição, o índice e o conjunto de habilidades (se estiver usando um) da fonte de dados, como feito normalmente. Não há propriedades em nenhuma dessas definições que variam ao usar um ponto de extremidade privado compartilhado.

  2. Crie um indexador que aponte para a fonte de dados, o índice e o conjunto de habilidades você criou na etapa anterior. Além disso, force a execução do indexador no ambiente de execução particular definindo a propriedade de configuração do indexador executionEnvironment como private.

    {
        "name": "indexer",
        "dataSourceName": "blob-datasource",
        "targetIndexName": "index",
        "parameters": {
            "configuration": {
                "executionEnvironment": "private"
            }
        },
        "fieldMappings": []
    }
    

Depois que o indexador for criado com sucesso, ele deve se conectar ao recurso do Azure pela conexão do ponto de extremidade privado. Você pode monitorar o status do indexador usando a API de status do indexador.

Observação

No caso de indexadores existentes, é possível atualizá-los por meio da API PUT, configurando executionEnvironment como private ou usando o editor JSON no portal.

  1. Se você ainda não fez isso, verifique se o recurso de PaaS do Azure recusa as conexões da Internet pública. Se as conexões forem aceitas, examine as configurações de DNS na página Rede do recurso de PaaS do Azure.

  2. Escolha uma ferramenta que possa invocar um cenário de solicitação de saída, como uma conexão de indexador com um ponto de extremidade privado. Uma escolha fácil é usar o assistente Importar dados, mas você também pode tentar um cliente REST e APIs REST para obter mais precisão. Supondo que o seu serviço de pesquisa também não esteja configurado para uma conexão privada, a conexão do cliente REST para pesquisa pode ser feita pela Internet pública.

  3. Defina a cadeia de conexão como o recurso privado de PaaS do Azure. O formato da cadeia de conexão não é alterado para o link privado compartilhado. O serviço de pesquisa invoca internamente o link privado compartilhado.

    Para cargas de trabalho do indexador, a cadeia de conexão está na definição da fonte de dados. Um exemplo de uma fonte de dados pode ser assim:

     {
       "name": "my-blob-ds",
       "type": "azureblob",
       "subtype": null,
       "credentials": {
         "connectionString": "DefaultEndpointsProtocol=https;AccountName=<YOUR-STORAGE-ACCOUNT>;AccountKey=..."
       }
    
  4. Para cargas de trabalho do indexador, lembre-se de determinar o ambiente de execução na definição do indexador. Um exemplo de uma definição de indexador pode ser assim:

    "name": "indexer",
    "dataSourceName": "my-blob-ds",
    "targetIndexName": "my-index",
    "parameters": {
       "configuration": {
           "executionEnvironment": "private"
           }
       },
    "fieldMappings": []
    }
    
  5. Execute o indexador. Se a execução do indexador for bem-sucedida e o índice de pesquisa for preenchido, o link privado compartilhado estará funcionando.

Solução de problemas

  • Se a criação do indexador falhar indicando "As credenciais da fonte de dados são inválidas", verifique o status de aprovação do link privado compartilhado antes de depurar a conexão. Se o status for Approved, verifique a propriedade properties.provisioningState. Se for Incomplete, pode haver um problema com as dependências subjacentes. Nesse caso, emita novamente a solicitação PUT para recriar o link privado compartilhado. Talvez seja necessário repetir a etapa de aprovação também.

  • Se os indexadores falharem consistente ou intermitentemente, verifique a propriedade executionEnvironment no indexador. O valor deve ser definido como private. Se você não definiu essa propriedade e o indexador foi executado com êxito no passado, é porque o serviço de pesquisa usava um ambiente privado por conta própria. Um serviço de pesquisa move o processamento para fora do ambiente padrão, se o sistema estiver sob carga.

  • Se você receber um erro ao criar um link privado compartilhado, verifique os limites de serviço para ver se você está abaixo da cota da camada.

Próximas etapas

Saiba mais sobre pontos de extremidade privados e outros métodos de conexão segura: