Conectar-se ao Azure AI Search usando o RBAC (controle de acesso baseado em função) do Azure

O Azure oferece um sistema de autorização global de controle de acesso baseado em função para todos os serviços executados na plataforma. No Azure AI Search, você pode usar funções do Azure em:

  • Operações de plano de controle (tarefas de administração de serviço por meio do Azure Resource Manager).

  • Operações de plano de dados, por exemplo, criar, carregar e consultar índices.

Não há suporte para o acesso por usuário sobre os resultados da pesquisa (às vezes chamado de segurança no nível da linha ou segurança no nível do documento). Como solução alternativa, crie filtros de segurança que cortam os resultados por identidade do usuário, removendo os documentos aos quais o solicitante não deve ter acesso.

Observação

No Azure AI Search, "painel de controle" refere-se a operações com suporte na API REST de Gerenciamento ou bibliotecas de cliente equivalentes. O "plano de dados" refere-se a operações no ponto de extremidade do serviço de pesquisa, como indexação ou consultas, ou qualquer outra operação especificada na API REST de Pesquisa ou bibliotecas de cliente equivalentes.

As funções a seguir são internas. Se essas funções forem insuficientes, crie uma função personalizada.

Função Plano Descrição
Proprietário Controle e dados Acesso completo ao painel de controle do recurso de pesquisa, incluindo a capacidade de atribuir funções do Azure. Somente a função Proprietário pode habilitar ou desabilitar opções de autenticação ou gerenciar funções de outros usuários. Os administradores de assinatura são membros por padrão.

No plano de dados, essa função tem o mesmo acesso que a função Colaborador do Serviço de Pesquisa. Ela inclui acesso a todas as ações do plano de dados, exceto a capacidade de consultar ou indexar documentos.
Colaborador Controle e dados Mesmo nível de acesso ao plano de controle que o Proprietário, menos a capacidade de atribuir funções ou alterar opções de autenticação.

No plano de dados, essa função tem o mesmo acesso que a função Colaborador do Serviço de Pesquisa. Ela inclui acesso a todas as ações do plano de dados, exceto a capacidade de consultar ou indexar documentos.
Leitor Controle e dados Acesso de leitura em todo o serviço, incluindo métricas de pesquisa, métricas de conteúdo (armazenamento consumido, número de objetos) e definições de objeto de recursos do plano de dados (índices, indexadores e assim por diante). No entanto, ele não pode ler chaves de API ou conteúdo em índices.
Colaborador do Serviço de Pesquisa Controle e dados Acesso de leitura/gravação a definições de objeto (índices, mapas de sinônimos, indexadores, fontes de dados e conjuntos de habilidades). Confira Microsoft.Search/searchServices/* para obter a lista de permissões. Essa função não pode acessar o conteúdo em um índice, ou seja, não pode fazer consulta ou indexação, mas pode criar, excluir e listar índices, retornar definições e estatísticas de índice e testar analisadores. Essa função é para administradores do serviço de pesquisa que precisam gerenciar esse serviço e os respectivos objetos, mas sem acesso ao conteúdo.
Colaborador de dados de índice de pesquisa Dados Acesso de leitura e gravação ao conteúdo em todos os índices no serviço de pesquisa. Essa função é para desenvolvedores ou proprietários de índice que precisam importar, atualizar ou consultar a coleção de documentos de um índice.
Leitor de dados de índice de pesquisa Dados Acesso somente leitura a todos os índices de pesquisa no serviço de pesquisa. Essa função é para os usuários que executam consultas em um índice.

Observação

Se você desabilitar o acesso baseado em função do Azure, as funções internas do plano de controle (Proprietário, Colaborador, Leitor) continuarão disponíveis. A desabilitação do RBAC do Azure remove apenas as permissões relacionadas a dados associadas a essas funções. Em um cenário de RBAC desabilitado, o Colaborador do Serviço de Pesquisa é equivalente ao Colaborador do plano de controle.

Limitações

  • A adoção do controle de acesso baseado em função pode aumentar a latência de algumas solicitações. Cada combinação exclusiva de recurso de serviço (índice, indexador, etc.) e a entidade de serviço usada em uma solicitação dispara uma verificação de autorização. Essas verificações de autorização podem adicionar até 200 milissegundos de latência a uma solicitação.

  • Em casos raros em que as solicitações se originam de um grande número de entidades de serviço diferentes, todas as que visam recursos de serviço diferentes (índices, indexadores etc.), é possível que as verificações de autorização resultem em uma limitação. A limitação só ocorreria se centenas de combinações exclusivas de recurso de serviço de pesquisa e entidade de serviço fossem usadas em um segundo.

Configurar o acesso baseado em função para o plano de dados

Aplica-se a: Colaborador de Dados de Índice de Pesquisa, Leitor de Dados de Índice de Pesquisa, Colaborador do Serviço de Pesquisa

Nesta etapa, configure seu serviço de pesquisa para reconhecer um header de autorização em solicitações de dados que fornecem um token de acesso OAuth2.

  1. Entre no portal do Azure e abra a página do serviço de pesquisa.

  2. Selecione Chaves no painel de navegação esquerdo.

    Captura de tela da página de Chaves com opções de autenticação.

  3. Escolha uma opção de controle de acesso a API. Recomendamos Ambos se você quiser ter flexibilidade ou precisar migrar aplicativos.

    Opção Descrição
    Chave de API (padrão). Requer uma chave de API de administrador ou de consulta no cabeçalho de solicitação para autorização. Nenhuma função é usada.
    Controle de acesso baseado em função Requer a associação em uma atribuição de função para concluir a tarefa; descrita na próxima etapa. Também requer um cabeçalho de autorização.
    Ambos As solicitações são válidas com o uso de uma chave de API ou de um controle de acesso baseado em função.

A alteração entra em vigor imediatamente, mas aguarde alguns segundos antes de testar.

Todas as chamadas de rede para operações de serviço de pesquisa e conteúdo respeitarão a opção selecionada: chaves de API, token de portador ou qualquer uma se você selecionar Ambas.

Quando você habilitar o controle de acesso baseado em função no portal, o modo de falha será "http401WithBearerChallenge" se a autorização falhar.

Atribuir funções

As atribuições de função são cumulativas e disseminadas em todas as ferramentas e bibliotecas de clientes. Você pode atribuir funções usando uma das abordagens com suporte descritas na documentação do controle de acesso baseado em função do Azure.

Você deve ser um Proprietário ou ter as permissões Microsoft.Authorization/roleAssignments/write para gerenciar atribuições de função.

As atribuições de função no portal são em todo o serviço. Se você desejar conceder permissões a um único índice, em vez disso, use o PowerShell ou a CLI do Azure.

  1. Entre no portal do Azure.

  2. Navegue até seu serviço de pesquisa.

  3. Selecione Controle de Acesso (IAM) no painel de navegação à esquerda.

  4. Selecione +Adicionar>Adicionar atribuição de função.

    Página Controle de Acesso (IAM) com o menu Adicionar atribuição de função aberto.

  5. Selecione uma função aplicável:

    • Proprietário
    • Colaborador
    • Leitor
    • Colaborador do Serviço de Pesquisa
    • Colaborador de dados de índice de pesquisa
    • Leitor de dados de índice de pesquisa
  6. Na guia Membros, selecione a identidade do usuário ou do grupo do Microsoft Entra.

  7. Na guia Examinar + atribuir, selecione Examinar + atribuir para atribuir a função.

Testar atribuições de função

Use um cliente para testar atribuições de função. Lembre-se de que elas são cumulativas e as herdadas com escopo na assinatura ou no grupo de recursos não podem ser excluídas nem negadas no nível do recurso (serviço de pesquisa).

Registre seu aplicativo cliente no Microsoft Entra ID e defina as atribuições de função antes de testar o acesso.

  1. Entre no portal do Azure.

  2. Navegue até seu serviço de pesquisa.

  3. Na página Visão geral, selecione a guia Índices:

    • Os Colaboradores podem ver e criar qualquer objeto, mas não podem consultar um índice usando o Gerenciador de Pesquisa.

    • Os Leitores de Dados de Índice de Pesquisa podem usar o Gerenciador de Pesquisa para consultar o índice. Você pode usar qualquer versão de API para verificar se há acesso. Você deve poder enviar consultas e exibir resultados, mas não deve poder exibir a definição do índice.

    • Os Colaboradores de Dados de Índice de Pesquisa podem selecionar Novo Índice para criar um índice. O salvamento de um novo índice verifica o acesso de gravação no serviço.

Testar como usuário atual

Se você já for um Colaborador ou Proprietário do serviço de pesquisa, poderá apresentar um token de portador como identidade de usuário para autenticação no Azure AI Search.

  1. Obtenha um token ao portador para o usuário atual usando a CLI do Azure:

    az account get-access-token --scope https://search.azure.com/.default
    

    Ou usando o PowerShell:

    Get-AzAccessToken -ResourceUrl "https://graph.microsoft.com/"
    
  2. Em um novo arquivo de texto no Visual Studio Code, cole estas variáveis:

    @baseUrl = PASTE-YOUR-SEARCH-SERVICE-URL-HERE
    @index-name = PASTE-YOUR-INDEX-NAME-HERE
    @token = PASTE-YOUR-TOKEN-HERE
    
  3. Cole e envie uma solicitação para confirmar o acesso. Veja um que consulta o índice hotels-quickstart

    POST https://{{baseUrl}}/indexes/{{index-name}}/docs/search?api-version=2023-11-01 HTTP/1.1
      Content-type: application/json
      Authorization: Bearer {{token}}
    
        {
             "queryType": "simple",
             "search": "motel",
             "filter": "",
             "select": "HotelName,Description,Category,Tags",
             "count": true
         }
    

Conceder acesso a apenas um índice

Em alguns cenários, talvez você queira limitar o acesso de um aplicativo a um único recurso, como um índice.

No momento, o portal não dá suporte as atribuições de função nesse nível de granularidade, mas elas podem ser feitas com o PowerShell ou a CLI do Azure.

No PowerShell, use New-AzRoleAssignment, fornecendo o usuário ou nome de grupo do Azure e o escopo da atribuição.

  1. Carregue os módulos do Azure e do AzureAD e conecte-se à sua conta do Azure:

    Import-Module -Name Az
    Import-Module -Name AzureAD
    Connect-AzAccount
    
  2. Adicione uma atribuição de função com escopo em um índice individual:

    New-AzRoleAssignment -ObjectId <objectId> `
        -RoleDefinitionName "Search Index Data Contributor" `
        -Scope  "/subscriptions/<subscription>/resourceGroups/<resource-group>/providers/Microsoft.Search/searchServices/<search-service>/indexes/<index-name>"
    

Criar uma função personalizada

Se funções internas não fornecerem a combinação certa de permissões, será possível criar uma função personalizada para dar suporte às operações necessárias

Este exemplo clona o Leitor de dados do índice de pesquisa e, em seguida, adiciona a capacidade de listar índices por nome. Normalmente, listar os índices em um serviço de pesquisa é considerado um direito administrativo.

Essas etapas são derivadas de Criar ou atualizar funções personalizadas do Azure usando o portal do Azure. Há suporte para clonagem de uma função existente em uma página de serviço de pesquisa.

Essas etapas criam uma função personalizada que aumenta os direitos de consulta de pesquisa para incluir índices de listagem por nome. Normalmente, a listagem de índices é considerada uma função de administrador.

  1. No portal do Azure, navegue até o serviço de pesquisa.

  2. No painel de navegação à esquerda, selecione Controle de Acesso (IAM).

  3. Na barra de ações, selecione Funções.

  4. Clique com o botão direito do mouse no Leitor de dados do índice de pesquisa (ou outra função) e selecione Clonar para abrir o assistente Criar uma função personalizada.

  5. Na guia Informações básicas, forneça um nome para a função personalizada, como "Gerenciador de Dados de Índice de Pesquisa" e clique em Avançar.

  6. Na guia Permissões, clique em Adicionar permissões.

  7. Na guia Adicionar permissões, pesquise e selecione o bloco Pesquisa da Microsoft.

  8. Defina as permissões para sua função personalizada. Na parte superior da página, usando a seleção de Ações padrão:

    • Em Microsoft.Search/operations, selecione Leitura: Listar todas as operações disponíveis.
    • Em Microsoft.Search/searchServices/indexes, selecione Leitura: Ler Índice.
  9. Na mesma página, alterne para Ações de dados e, em Microsoft.Search/searchServices/indexes/documents, selecione Ler: Ler Documentos.

    A definição JSON se parece com o seguinte exemplo:

    {
     "properties": {
         "roleName": "search index data explorer",
         "description": "",
         "assignableScopes": [
             "/subscriptions/a5b1ca8b-bab3-4c26-aebe-4cf7ec4791a0/resourceGroups/heidist-free-search-svc/providers/Microsoft.Search/searchServices/demo-search-svc"
         ],
         "permissions": [
             {
                 "actions": [
                     "Microsoft.Search/operations/read",
                     "Microsoft.Search/searchServices/indexes/read"
                 ],
                 "notActions": [],
                 "dataActions": [
                     "Microsoft.Search/searchServices/indexes/documents/read"
                 ],
                 "notDataActions": []
             }
         ]
       }
     }
    
  10. Selecione Examinar + criar para criar o serviço. Agora você pode atribuir usuários e grupos à função.

Desabilitar a autenticação da chave de API

O acesso por chave, ou autenticação local, não pode ser excluído do seu serviço se você estiver usando as funções de Colaborador do Serviço de Pesquisa, Colaborador de Dados do Índice de Pesquisa e Leitor de Dados do Índice de Pesquisa, além da autenticação do Microsoft Entra. A desabilitação das chaves de API faz com que o serviço de pesquisa recuse todas as solicitações relacionadas a dados que passam uma chave de API no cabeçalho.

Observação

As chaves de API de administrador só podem ser desabilitadas, não podem ser excluídas. As chaves de API de consultas podem ser excluídas.

Para desabilitar os recursos, são necessárias permissões de Proprietário ou de Colaborador.

Para desabilitar a autenticação baseada em chave, use portal do Azure ou a API REST de Gerenciamento.

  1. No portal do Azure, navegue até o serviço de pesquisa.

  2. Selecione Chaves no painel de navegação à esquerda.

  3. Selecione Controle de acesso baseado em função.

A alteração entra em vigor imediatamente, mas aguarde alguns segundos antes de testar. Supondo que você tenha permissão para atribuir funções como membro ou Proprietário, administrador de serviços ou coadministrador, poderá usar recursos do portal para testar o acesso baseado em função.

Acesso Condicional

O Acesso Condicional é uma ferramenta no Microsoft Entra ID usada para impor políticas organizacionais. Usando as políticas de Acesso Condicional, você pode aplicar os controles de acesso certos, quando necessário, para manter sua organização segura. Ao acessar um serviço do Azure AI Search usando o controle de acesso baseado em função, o Acesso Condicional poderá impor políticas organizacionais.

Para habilitar uma política de acesso condicional no Azure AI Search, siga as etapas abaixo:

  1. Entre no portal do Azure.

  2. Pesquise Acesso Condicional do Microsoft Entra.

  3. Selecione Políticas.

  4. Selecione + Nova política.

  5. Na seção Aplicativos ou ações de nuvem da política, adicione Azure AI Search como um aplicativo de nuvem, dependendo de como você deseja configurar sua política.

  6. Atualize os parâmetros restantes da política. Por exemplo, especifique a quais usuários e grupos essa política se aplica.

  7. Salve a política.

Importante

Se o serviço de pesquisa tiver uma identidade gerenciada atribuída a ele, o serviço de pesquisa específico aparecerá como um aplicativo de nuvem que pode ser incluído ou excluído como parte da política de Acesso Condicional. As políticas de acesso condicional não podem ser impostas em um serviço de pesquisa específico. Em vez disso, selecione o aplicativo de nuvem Azure AI Search geral.

Solucionar problemas do controle de acesso baseado em função

Ao desenvolver aplicativos que usam o controle de acesso baseado em função para autenticação, alguns problemas comuns podem ocorrer:

  • Se o token de autorização for proveniente de uma identidade gerenciada e as permissões apropriadas foram atribuídas recentemente, pode levar várias horas para que essas atribuições de permissões entrem em vigor.
  • A configuração padrão de um serviço de pesquisa é somente autenticação baseada em chave. Se você não alterou a configuração de chave padrão para Ambos ou para Controle de acesso baseado em função, todas as solicitações que usam a autenticação baseada em função serão negadas automaticamente, independentemente das permissões subjacentes.