Conexión a Azure AI Search mediante el control de acceso basado en roles de Azure (RBAC de Azure)

Azure proporciona un sistema de autorización de control de acceso basado en roles global para todos los servicios que se ejecutan en la plataforma. En Azure AI Search, puede usar roles de Azure para:

  • Operaciones del plano de control (tareas de administración de servicios mediante Azure Resource Manager).

  • Operaciones del plano de datos, como crear, cargar y consultar índices.

No se admite el acceso por usuario a través de los resultados de búsqueda (a veces denominado seguridad de nivel de fila o de nivel de documento). Una solución alternativa es crear filtros de seguridad que recortan los resultados por identidad del usuario y quitar los documentos para los que el solicitante no debe tener acceso.

Nota:

En Azure AI Search, "plano de control" hace referencia a las operaciones admitidas en la API REST de administración o bibliotecas cliente equivalentes. "Plano de datos" hace referencia a operaciones con relación al punto de conexión del servicio de búsqueda, como la indexación o las consultas, o cualquier otra operación que se especifique en la API de REST de búsqueda o bibliotecas cliente equivalentes.

Los siguientes son roles integrados. Si estos roles no son suficientes, cree un rol personalizado.

Role Plano Descripción
Propietario Control y datos Acceso total al plano de control del recurso de búsqueda, incluida la capacidad de asignar roles de Azure. Solo el rol Propietario puede habilitar o deshabilitar las opciones de autenticación o administrar roles para otros usuarios. Los administradores de suscripciones son miembros de manera predeterminada.

En el plano de datos, este rol tiene el mismo acceso que el rol Colaborador del servicio de búsqueda. Incluye acceso a todas las acciones del plano de datos, excepto a la capacidad de consultar o indexar documentos.
Colaborador Control y datos El mismo nivel de acceso al plano de control que Propietario, menos la capacidad de asignar roles o cambiar opciones de autenticación.

En el plano de datos, este rol tiene el mismo acceso que el rol Colaborador del servicio de búsqueda. Incluye acceso a todas las acciones del plano de datos, excepto a la capacidad de consultar o indexar documentos.
Lector Control y datos Acceso de lectura en todo el servicio, incluidas las métricas de búsqueda, las métricas de contenido (almacenamiento consumido, número de objetos) y las definiciones de objetos de los recursos del plano de datos (índices, indizadores, etc.). Sin embargo, no puede leer claves de API ni leer contenido dentro de los índices.
Colaborador del servicio Search Control y datos Acceso de lectura y escritura a definiciones de objetos (índices, mapas de sinónimos, indizadores, orígenes de datos y conjuntos de aptitudes). Consulte Microsoft.Search/searchServices/* para obtener la lista de permisos. Este rol no puede acceder al contenido de un índice, por lo que no se puede consultar ni indexar, pero puede crear, eliminar y enumerar índices, devolver definiciones de índice y estadísticas y analizadores de prueba. Este rol es para los administradores del servicio de búsqueda que necesitan administrar el servicio de búsqueda y sus objetos, pero sin acceso al contenido.
Colaborador de datos de índice de búsqueda Data Acceso de lectura y escritura al contenido de todos los índices del servicio de búsqueda. Este rol está pensado para desarrolladores o propietarios de índices que necesitan importar, actualizar o consultar la colección de documentos de un índice.
Lector de datos de índice de búsqueda Data Acceso de solo lectura a todos los índices de búsqueda del servicio de búsqueda. Este rol está pensado para aplicaciones y usuarios que ejecutan consultas.

Nota:

Si deshabilita el acceso basado en roles de Azure, los roles integrados del plano de control (Propietario, Colaborador, Lector) seguirán estando disponibles. Al deshabilitar RBAC de Azure, solo se quitan los permisos relacionados con datos asociados a esos roles. En un escenario con RBAC deshabilitado, el Colaborador del servicio de búsqueda es equivalente al Colaborador del plano de control.

Limitaciones

  • La adopción del control de acceso basado en roles de Azure podría aumentar la latencia de algunas solicitudes. Cada combinación única de recurso de servicio (índice, indizador, etc.) y entidad de servicio que se use en una solicitud desencadena una comprobación de autorización. Estas comprobaciones de autorización pueden agregar hasta 200 milisegundos de latencia a una solicitud.

  • En raras ocasiones, cuando las solicitudes se originan a partir de un gran número de entidades de servicio diferentes, todas dirigidas a recursos de servicio diferentes (índices, indexadores, etc.), es posible que las comprobaciones de autorización den lugar a una limitación. La limitación solo se produciría si se usaran cientos de combinaciones únicas de recursos del servicio Search y entidades de servicio en un segundo.

Configuración del acceso basado en roles para el plano de datos

Se aplica a: Colaborador de datos de índice de búsqueda, Lector de datos de índice de búsqueda y Colaborador de servicio de búsqueda.

En este paso, configure su servicio de búsqueda para que reconozca un encabezado Authorization en solicitudes de datos que proporcionen un token de acceso de OAuth2.

  1. Inicie sesión en Azure Portal y abra la página del servicio de búsqueda.

  2. En el panel de navegación izquierdo, seleccione Claves.

    Captura de pantalla de la página claves con opciones de autenticación.

  3. Elija una opción de Control de acceso de API. Se recomienda la opción Ambos si quiere flexibilidad o necesita migrar aplicaciones.

    Opción Descripción
    Clave de API (valor predeterminado). Requiere un administrador o claves de API de consulta en el encabezado de solicitud para la autorización. No se usa ningún rol.
    Control de acceso basado en rol Requiere la pertenencia a una asignación de roles para completar la tarea, según se describe en el paso siguiente. También requiere un encabezado de autorización.
    Ambos Las solicitudes son válidas mediante una clave de API o el control de acceso basado en roles.

El cambio es efectivo inmediatamente, pero espere unos segundos antes de las pruebas.

Todas las llamadas de red de las operaciones del servicio de búsqueda y el contenido respetan la opción que seleccione: claves de API, token de portador o una si de ellas selecciona Ambos.

Al habilitar el control de acceso basado en roles en el portal, el modo de error es "http401WithBearerChallenge" si se produce un error en la autorización.

Asignación de roles

Las asignaciones de roles son acumulativas y generalizadas en todas las herramientas y bibliotecas cliente. Puede asignar roles mediante cualquiera de los enfoques admitidos que se describen en la documentación del control de acceso basado en roles de Azure.

Debe ser Propietario o tener permisos Microsoft.Authorization/roleAssignments/write para administrar asignaciones de roles.

Las asignaciones de roles en el portal son de todo el servicio. Si desea conceder permisos a un único índice, use PowerShell o la CLI de Azure en su lugar.

  1. Inicie sesión en Azure Portal.

  2. Vaya al servicio de búsqueda.

  3. Seleccione Control de acceso (IAM) en el panel de navegación izquierdo.

  4. Seleccione Agregar>Agregar asignación de roles.

    Página Control de acceso (IAM) con el menú Agregar asignación de roles abierto.

  5. Seleccione un rol aplicable:

    • Propietario
    • Colaborador
    • Lector
    • Colaborador del servicio Search
    • Colaborador de datos de índice de búsqueda
    • Lector de datos de índice de búsqueda
  6. En la pestaña Miembros, seleccione la identidad de grupo o usuario de Microsoft Entra.

  7. En la pestaña Revisión y asignación, seleccione Revisión y asignación para asignar el rol.

Prueba de asignaciones de roles

Use un cliente para probar las asignaciones de roles. Recuerde que los roles son acumulativos y que los roles heredados cuyo ámbito es la suscripción o el grupo de recursos no se pueden eliminar ni denegar en el nivel de recurso (servicio de búsqueda).

Asegúrese de registrar la aplicación cliente en Microsoft Entra ID y de tener asignaciones de roles en vigor antes de probar el acceso.

  1. Inicie sesión en Azure Portal.

  2. Vaya al servicio de búsqueda.

  3. En la página Información general, seleccione la pestaña Índices:

    • Los Colaboradores pueden ver y crear cualquier objeto, pero no pueden consultar un índice mediante el Explorador de búsqueda.

    • Los Lectores de datos de índice de búsqueda pueden usar el Explorador de búsqueda para consultar el índice. Puede usar cualquier versión de la API para comprobar el acceso. Debería poder enviar consultas y ver los resultados, pero no ver la definición de índice.

    • Los colaboradores de datos de índice de búsqueda pueden seleccionar Nuevo índice para crear un nuevo índice. Al guardar un nuevo índice, se comprueba el acceso de escritura en el servicio.

Prueba como usuario actual

Si ya es Colaborador o Propietario del servicio de búsqueda, puede presentar un token de portador de la identidad de usuario para la autenticación en Azure AI Search.

  1. Obtenga un token de portador para el usuario actual mediante la CLI de Azure:

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

    O mediante PowerShell:

    Get-AzAccessToken -ResourceUrl "https://graph.microsoft.com/"
    
  2. En un nuevo archivo de texto de Visual Studio Code, pegue estas variables:

    @baseUrl = PASTE-YOUR-SEARCH-SERVICE-URL-HERE
    @index-name = PASTE-YOUR-INDEX-NAME-HERE
    @token = PASTE-YOUR-TOKEN-HERE
    
  3. Pegue y, a continuación, envíe una solicitud para confirmar el acceso. Esta es una que consulta el í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
         }
    

Concesión de acceso a un único índice

En algunos escenarios, es posible que desee limitar el acceso de una aplicación a un único recurso, como un índice.

El portal no admite actualmente asignaciones de roles en este nivel de granularidad, pero se puede realizar con PowerShell o la CLI de Azure.

En PowerShell, use New-AzRoleAssignment, proporcionando el nombre de usuario o grupo de Azure y el ámbito de la asignación.

  1. Cargue los módulos de Azure y AzureAD y conéctese a su cuenta de Azure:

    Import-Module -Name Az
    Import-Module -Name AzureAD
    Connect-AzAccount
    
  2. Agregue una asignación de roles limitada a un í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>"
    

Crear un rol personalizado

Si los roles integrados no proporcionan la combinación adecuada de permisos, puede crear un rol personalizado para admitir las operaciones que necesita.

En este ejemplo se clona el rol Lector de datos de índice de búsqueda y, luego, se agrega la posibilidad de enumerar los índices por el nombre. Normalmente, enumerar los índices de un servicio de búsqueda se considera un derecho administrativo.

Estos pasos se derivan del artículo Creación o actualización de roles personalizados de Azure mediante Azure Portal. La clonación a partir de un rol existente se admite en una página del servicio de búsqueda.

Estos pasos crean un rol personalizado que aumenta los derechos de consulta de búsqueda para incluir índices de enumeración por nombre. Normalmente, la enumeración de índices se considera una función de administrador.

  1. En Azure Portal, vaya al servicio de búsqueda.

  2. En el panel de navegación izquierdo, seleccione Access Control (IAM).

  3. En la barra de acciones, seleccione Roles.

  4. Haga clic con el botón derecho en Lector de datos de índice de búsqueda (u otro rol) y seleccione Clonar para abrir el Asistente para crear un rol personalizado.

  5. En la pestaña Aspectos básicos, proporcione un nombre para el rol personalizado, como "Explorador de datos de índice de búsqueda" y, luego, seleccione Siguiente.

  6. En la pestaña "Permisos", seleccione Agregar permiso.

  7. En la pestaña "Agregar permisos", busque y seleccione el icono Búsqueda de Microsoft.

  8. Establezca los permisos del rol personalizado. En la parte superior de la página, con la selección de Acciones predeterminada:

    • En Microsoft.Search/operations, seleccione Leer: Enumerar todas las operaciones disponibles.
    • En Microsoft.Search/searchServices/indexes, seleccione Leer : Leer índice.
  9. En la misma página, cambie a Acciones de datos y, en Microsoft.Search/searchServices/indexes/documents, seleccione Leer: Leer documentos.

    El código JSON resultante tendrá un aspecto similar al siguiente:

    {
     "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. Seleccione Revisar y crear para crear el rol. Ahora puede asignar usuarios y grupos al rol.

Deshabilitación de la autenticación de clave de API

El acceso a claves o la autenticación local se pueden deshabilitar en el servicio si usa los roles Colaborador del servicio de búsqueda, Colaborador de datos de índice de búsqueda y Lector de datos de índice de búsqueda y autenticación de Microsoft Entra. Deshabilitar las claves de API hace que el servicio de búsqueda rechace todas las solicitudes relacionadas con datos que pasan una clave de API en el encabezado.

Nota:

Las claves de API de administrador solo se pueden deshabilitar, no eliminar. Las claves de API de consulta se pueden eliminar.

Para deshabilitar características se necesitan permisos de Propietario o Colaborador.

Para deshabilitar la autenticación basada en claves, use Azure Portal o la API REST de administración.

  1. En Azure Portal, vaya al servicio de búsqueda.

  2. En el panel de navegación izquierdo, seleccione Claves.

  3. Seleccione Control de acceso basado en roles.

El cambio es efectivo inmediatamente, pero espere unos segundos antes de las pruebas. Suponiendo que tenga permiso para asignar roles como miembro con el rol Propietario, Administrador de servicios o Coadministrador, puede usar características del portal para probar el acceso basado en roles.

Acceso condicional

El acceso condicional es una herramienta de Microsoft Entra ID que se usa para aplicar las directivas de la organización. Mediante el uso de directivas de acceso condicional puede aplicar los controles de acceso correctos cuando sea necesario para mantener protegida la organización. Al acceder a un servicio de Azure AI Search mediante el control de acceso basado en roles, el acceso condicional puede aplicar las directivas de la organización.

Para habilitar una directiva de acceso condicional para Azure AI Search, siga estos pasos:

  1. Inicie sesión en Azure Portal.

  2. Busque Acceso condicional de Microsoft Entra.

  3. Seleccione Directivas.

  4. Seleccione + Nueva directiva.

  5. En la sección Aplicaciones en la nube o acciones de la directiva, agregue Azure AI Search como una aplicación en la nube en función de cómo quiera configurar la directiva.

  6. Actualice los parámetros restantes de la directiva. Por ejemplo, especifique a qué usuarios y grupos se aplica esta directiva.

  7. Guarde la directiva.

Importante

Si el servicio de búsqueda tiene asignada una identidad administrada, el servicio de búsqueda específico se mostrará como una aplicación en la nube que se puede incluir o excluir como parte de la directiva de acceso condicional. Las directivas de acceso condicional no se pueden aplicar en un servicio de búsqueda específico. En su lugar, asegúrese de seleccionar la aplicación general en la nube Azure AI Search.

Solución de problemas de control de acceso basado en rol

Al desarrollar aplicaciones que usan el control de acceso basado en rol para la autenticación, pueden producirse algunos problemas comunes:

  • Si el token de autorización procede de una identidad administrada y los permisos adecuados se asignaron recientemente, es posible que estas asignaciones de permisos tarden varias horas en surtir efecto.
  • La configuración predeterminada de un servicio de búsqueda es solo la autenticación basada en claves. Si no ha cambiado la configuración de clave predeterminada a Control de acceso basado en rol o Ambos, todas las solicitudes que usan la autenticación basada en roles se deniegan automáticamente independientemente de los permisos subyacentes.