Establecimiento de conexiones de salida compartidas mediante un vínculo privado

En este artículo se explica cómo configurar llamadas privadas y salientes de Azure AI Search a un recurso PaaS de Azure que se ejecuta dentro de una red virtual.

La configuración de una conexión privada permite que un servicio de búsqueda se conecte a una dirección IP de red virtual en lugar de un puerto abierto a Internet. El objeto creado para la conexión se denomina vínculo privado compartido. En la conexión, el servicio de búsqueda usa internamente el vínculo privado compartido para acceder a un recurso PaaS de Azure dentro del límite de red.

El vínculo privado compartido es una característica premium que se factura por uso. Al configurar un vínculo privado compartido, los cargos por el punto de conexión privado se agregan a la factura de Azure. Al usar el vínculo privado compartido, también se facturan las tasas de transferencia de datos para el acceso entrante y saliente. Para obtener más información, consulte Precios de Azure Private Link.

Nota:

Si va a configurar una conexión de indexador privado a una instancia de SQL Managed Instance, consulte este artículo.

Azure AI Search realiza llamadas salientes a otros recursos PaaS de Azure en los escenarios siguientes:

  • El indizador o motor de búsqueda se conecta a Azure OpenAI para inserciones de texto a vector
  • El indizador se conecta a orígenes de datos admitidos
  • Conexiones del indizador (conjunto de aptitudes) a Azure Storage para almacenar en caché enriquecimientos, el estado de la sesión de depuración o escribir en un almacén de conocimiento
  • Solicitudes de clave de cifrado a Azure Key Vault
  • Solicitudes de aptitudes personalizadas a Azure Functions o a un recurso similar

Los vínculos privados compartidos solo funcionan para las conexiones de Azure a Azure. Si se conecta a OpenAI u otro modelo externo, la conexión debe ser mediante la red pública de Internet.

Los vínculos privados compartidos son para las operaciones y los datos a los que se accede mediante un punto de conexión privado para los recursos o clientes de Azure que se ejecutan en una red virtual de Azure.

Un vínculo privado compartido:

  • Se crea con herramientas, API o SDK de Azure AI Search
  • Lo aprueba el propietario del recurso PaaS de Azure
  • Lo usa internamente Búsqueda de Azure AI en una conexión privada a un recurso de Azure específico.

Solo el servicio de búsqueda puede usar los vínculos privados que crea y solo puede haber un vínculo privado compartido creado en el servicio para cada combinación de recurso y subrecurso.

Una vez configurado el vínculo privado, se usa automáticamente cada vez que el servicio de búsqueda se conecta a ese recurso PaaS. No es necesario modificar la cadena de conexión ni modificar el cliente que usa para emitir las solicitudes, aunque el dispositivo usado para la conexión debe conectarse mediante una dirección IP autorizada en el firewall del recurso PaaS de Azure.

Hay dos escenarios para usar Azure Private Link y Azure AI Search juntos.

El primer escenario se trata en este artículo.

Aunque ambos escenarios tienen una dependencia en Azure Private Link, son independientes. Puede crear un vínculo privado compartido sin tener que configurar su propio servicio de búsqueda para un punto de conexión privado.

Limitaciones

A la hora de evaluar vínculos privados compartidos para su escenario, recuerde estas restricciones.

  • Varios de los tipos de recursos usados en un vínculo privado compartido están en versión preliminar. Si se conecta a un recurso de versión preliminar (Azure Database for MySQL, Azure Functions o Azure SQL Managed Instance), use una versión preliminar de la API de REST de administración para crear el vínculo privado compartido. Estas versiones incluyen 2020-08-01-preview, 2021-04-01-preview y 2024-03-01-preview.

  • La ejecución del indexador debe usar el entorno de ejecución privado específico del servicio de búsqueda. Las conexiones de punto de conexión privado no se admiten en el entorno multiinquilino. La configuración de este requisito se trata en este artículo.

Requisitos previos

  • Una instancia de Azure AI Search en el nivel básico o superior. Si usa conjuntos de aptitudes y enriquecimiento con inteligencia artificial, el nivel debe ser Estándar 2 (S2) o superior. Consulte Límites de servicio para obtener más información.

  • Un recurso de PaaS de Azure de la lista siguiente de tipos de recursos admitidos, configurado para ejecutarse en una red virtual.

  • Permisos tanto en Búsqueda de Azure AI como en el origen de datos:

    • En el recurso PaaS de Azure, debe tener permiso para aprobar conexiones de punto de conexión privado. Por ejemplo, si usa una cuenta de Azure Storage como origen de datos (como el contenedor de blobs, el recurso compartido de Azure Files, la tabla de Azure), necesita Microsoft.Storage/storageAccounts/privateEndpointConnectionsApproval/action.

    • En el servicio de búsqueda, debe tener permisos de lectura y escritura en recursos compartidos de vínculo privado y estados de operación de lectura:

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

Tipos de recurso admitidos

Puede crear un vínculo privado compartido para los siguientes recursos.

Tipo de recurso Subrecurso (o identificador de 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 (versión preliminar) mysqlServer
Microsoft.Web/sites (versión preliminar) 3 sites
Microsoft.Sql/managedInstances (versión preliminar) 4 managedInstance
Microsoft.CognitiveServices/accounts (versión preliminar) 5 openai_account

1 Si Azure Storage y Azure AI Search están en la misma región, la conexión al almacenamiento se realiza a través de la red troncal de Microsoft, lo que significa que un vínculo privado compartido es redundante para esta configuración. Sin embargo, si ya ha configurado un punto de conexión privado para Azure Storage, también debe configurar un vínculo privado compartido o la conexión se rechazará en el lado de almacenamiento. Además, si usa varios formatos de almacenamiento para varios escenarios en la búsqueda, asegúrese de crear un vínculo privado compartido independiente para cada subrecurso.

2 El tipo de recurso Microsoft.DocumentDB/databaseAccounts se usa para las conexiones del indexador a Azure Cosmos DB for NoSQL. El nombre del proveedor y el identificador de grupo distinguen mayúsculas de minúsculas.

3 El tipo de recurso Microsoft.Web/sites se usa para App Service y Azure Functions. En el contexto de Azure AI Search, una función de Azure es el escenario más probable. Normalmente se usa una función de Azure para hospedar la lógica de una aptitud personalizada. Azure Function tiene los siguientes planes de hospedaje de App Service: Consumo, Premium y Dedicado. Las instancias de App Service Environment (ASE) y Azure Kubernetes Service (AKS) no se admiten en este momento.

4 Consulte Creación de un vínculo privado compartido para SQL Managed Instance para obtener instrucciones.

5 El tipo de recurso Microsoft.CognitiveServices/accounts se usa para las conexiones del indexador a Azure OpenAI al implementar la vectorización integrada.

Use Azure Portal, la API de REST de administración, la CLI de Azure o Azure PowerShell para crear un vínculo privado compartido.

A continuación se muestran algunas sugerencias:

  • Asigne un nombre descriptivo al vínculo privado. En el recurso PaaS de Azure, aparece un vínculo privado compartido junto con otros puntos de conexión privados. Un nombre como "shared-private-link-for-search" puede recordarle cómo se usa.

Cuando complete los pasos de esta sección, tendrá un vínculo privado compartido aprovisionado en un estado pendiente. Se tarda unos minutos en crear el vínculo. Una vez creado, el propietario del recurso debe aprobar la solicitud antes de que esté operativa.

  1. Inicie sesión en Azure Portal y encuentre su servicio de búsqueda.

  2. En el panel de navegación de la izquierda, en Configuración, seleccione Redes.

  3. En la página Acceso privado compartido, seleccione + Agregar acceso privado compartido.

  4. Seleccione Conectarse a un recurso de Azure en mi directorio o Conectarse a un recurso de Azure por Id. de recurso.

  5. Si selecciona la primera opción (recomendada), el portal le ayudará a elegir el recurso de Azure adecuado y rellenará automáticamente otras propiedades, como el Id. de grupo del recurso y el tipo del recurso.

    Captura de pantalla de la página Agregar acceso privado compartido, en la que se muestra una experiencia guiada para crear un recurso de vínculo privado compartido.

  6. Si selecciona la segunda opción, escriba el identificador de recurso de Azure manualmente y elija el identificador de grupo adecuado en la lista al principio de este artículo.

    Captura de pantalla de la página Agregar acceso privado compartido, en la que se muestra una experiencia manual para crear un recurso de vínculo privado compartido.

  7. Confirme que el estado de aprovisionamiento es "Actualizando".

    Captura de pantalla de la página Agregar acceso privado compartido, en la que se muestra la creación de recursos en curso.

  8. Una vez creado correctamente el recurso, el estado de aprovisionamiento del recurso cambia a "Correcto".

    Captura de pantalla de la página Agregar acceso privado compartido, en la que se muestra la creación de recursos completada.

Se devuelve la respuesta 202 Accepted en caso de éxito. El proceso de creación de un punto de conexión privado de salida es una operación de larga duración (asincrónica), Implica la implementación de los siguientes recursos:

  • Un punto de conexión privado asignado con una dirección IP privada con un estado "Pending". La dirección IP privada se obtiene del espacio de direcciones que se asigna a la red virtual del entorno de ejecución del indexador privado específico del servicio de búsqueda. Tras la aprobación del punto de conexión privado, cualquier comunicación desde Azure AI Search al recurso de Azure se origina desde la dirección IP privada y un canal de vínculo privado seguro.

  • Una zona DNS privada para el tipo de recurso, que se basa en el Id. de grupo. Mediante la implementación de este recurso se asegura de que todas las búsquedas DNS en el recurso privado utilizan la dirección IP asociada con el punto de conexión privado.

2 - Aprobación de la conexión del punto de conexión privado

La aprobación de la conexión de punto de conexión privado se concede en el lado de PaaS de Azure. Se requiere la aprobación explícita del propietario del recurso. Los pasos siguientes tratan sobre la aprobación mediante Azure Portal, pero estos son algunos vínculos para aprobar la conexión mediante programación desde el lado PaaS de Azure:

Con Azure Portal, realice los pasos siguientes:

  1. Abra la página Redes del recurso de PaaS de Azure.texto

  2. Busque la sección en la que se enumeran las conexiones de punto de conexión privado. El ejemplo siguiente es para una cuenta de almacenamiento.

    Captura de pantalla de Azure Portal en la que se muestra el panel

  3. Seleccione la conexión y, después, Aprobar. El estado puede tardar unos minutos en actualizarse.

    Captura de pantalla de Azure Portal en la que se muestra el estado

Después de que se aprueba el punto de conexión privado, Azure AI Search crea las asignaciones de zona DNS necesarias en la zona DNS que se crea para él.

Aunque el vínculo de punto de conexión privado de la página de Redes está activo, no se resolverá.

Captura de pantalla del vínculo del punto de conexión privado en la página de redes PaaS de Azure.

Al seleccionar el vínculo se produce un error. Un mensaje de estado "The access token is from the wrong issuer" y must match the tenant associated with this subscription aparece porque el recurso de punto de conexión privado de back-end lo aprovisiona Microsoft en un inquilino administrado de Microsoft, mientras que el recurso vinculado (Búsqueda de Azure AI) está en su inquilino. De manera deliberada, no se le permite acceder al recurso de punto de conexión privado seleccionando el vínculo de conexión de punto de conexión privado.

Siga las instrucciones de la sección siguiente para comprobar el estado del vínculo privado compartido.

En el lado de Búsqueda de Azure AI, puede confirmar la aprobación de la solicitud; para ello, vuelva a consultar la página Acceso privado compartido de la página Redes del servicio de búsqueda. El estado de conexión debe aprobarse.

Captura de pantalla de Azure Portal, que muestra un recurso de vínculo privado compartido

Como alternativa, también puede obtener el estado de conexión mediante la API de vínculo privado compartido 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

Esto devolvería un elemento JSON, donde el estado de conexión aparece como "status" en la sección "properties". A continuación se muestra un ejemplo de una cuenta de almacenamiento.

{
      "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"
      }
}

Si el estado de aprovisionamiento (properties.provisioningState) del recurso es "Correcto" y el estado de conexión (properties.status) es "Aprobado", significa que el recurso de vínculo privado compartido es funcional y que el indexador se puede configurar para comunicarse a través del punto de conexión privado.

4 - Configurar el indexador para que se ejecute en el entorno privado

La ejecución del indexador se produce en un entorno privado específico del servicio de búsqueda o en un entorno multiinquilino que se usa internamente para descargar el procesamiento costoso del conjunto de aptitudes para varios clientes.

El entorno de ejecución es transparente, pero una vez que empiece a crear reglas de firewall o establecer conexiones privadas, tiene que tener en cuenta la ejecución del indexador. Para una conexión privada, configure la ejecución del indexador para que siempre se ejecute en el entorno privado.

En este paso se muestra cómo configurar el indexador para que se ejecute en el entorno privado usando la API REST. También puede establecer el entorno de ejecución mediante el editor de JSON en Azure Portal.

Nota:

Este paso se puede realizar antes de que se apruebe la conexión del punto de conexión privado. Sin embargo, hasta que la conexión de punto de conexión privado se muestre como aprobada, cualquier indexador existente que intente comunicarse con un recurso protegido (como la cuenta de almacenamiento) terminará en un estado de error transitorio y no se podrán crear nuevos indexadores.

  1. Cree la definición de origen de datos, el índice y el conjunto de aptitudes (si usa uno) como lo haría normalmente. No hay propiedades en ninguna de estas definiciones que varíen al usar un punto de conexión privado compartido.

  2. Cree un indexador que apunte al origen de datos, el índice y el conjunto de aptitudes que creó en el paso anterior. Además, fuerce a que el indexador se ejecute en el entorno de ejecución privado; para ello, establezca la propiedad de configuración executionEnvironment del indexador en private.

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

Una vez que el indexador se cree correctamente, debería conectarse al recurso de Azure a través de la conexión de punto de conexión privado. Puede supervisar el estado del indexador. Para ello, se utiliza Indexer Status API.

Nota:

Si ya tiene indexadores, puede actualizarlos a través de la API PUT. Para ello, establezca executionEnvironment en private o use el editor de JSON en Azure Portal.

  1. Si aún no lo ha hecho, compruebe que el recurso PaaS de Azure rechaza las conexiones de la red pública de Internet. Si se aceptan conexiones, revise la configuración de DNS en la página Redes del recurso PaaS de Azure.

  2. Elija una herramienta que pueda invocar un escenario de solicitud saliente, como una conexión de indexador a un punto de conexión privado. Una opción sencilla es usar el Asistente para importar datos, pero también puede probar un cliente REST y API de REST para una mayor precisión. Suponiendo que el servicio de búsqueda no esté configurado también para una conexión privada, la conexión del cliente REST a la búsqueda puede realizarse a través de la red Internet pública.

  3. Establezca la cadena de conexión en el recurso PaaS privado de Azure. El formato de la cadena de conexión no cambia para el vínculo privado compartido. El servicio de búsqueda invoca el vínculo privado compartido internamente.

    En el caso de las cargas de trabajo del indexador, la cadena de conexión se encuentra en la definición del origen de datos. Un ejemplo de un origen de datos podría tener este aspecto:

     {
       "name": "my-blob-ds",
       "type": "azureblob",
       "subtype": null,
       "credentials": {
         "connectionString": "DefaultEndpointsProtocol=https;AccountName=<YOUR-STORAGE-ACCOUNT>;AccountKey=..."
       }
    
  4. En el caso de las cargas de trabajo del indexador, recuerde establecer el entorno de ejecución en la definición del indexador. Un ejemplo de una definición de indexador podría tener este aspecto:

    "name": "indexer",
    "dataSourceName": "my-blob-ds",
    "targetIndexName": "my-index",
    "parameters": {
       "configuration": {
           "executionEnvironment": "private"
           }
       },
    "fieldMappings": []
    }
    
  5. Ejecute el indexador. Si la ejecución del indexador se realiza correctamente y el índice de búsqueda se rellena, el vínculo privado compartido funciona.

Solución de problemas

  • Si se produce un error en la creación del indexador con "Las credenciales del origen de datos no son válidas", compruebe el estado de aprobación del vínculo privado compartido antes de depurar la conexión. Si el estado es Approved, compruebe la propiedad properties.provisioningState. Si es Incomplete, puede haber un problema con las dependencias subyacentes. En este caso, vuelva a emitir la solicitud PUT para volver a crear el vínculo privado compartido. Es posible que también tenga que repetir el paso de aprobación.

  • Si los indexadores no se pueden realizar de forma coherente o intermitente, compruebe la propiedad executionEnvironment en el indexador. El valor debe establecerse en private. Si no estableció esta propiedad y las ejecuciones del indexador se realizaron correctamente en el pasado, se debe a que el servicio de búsqueda usó un entorno privado propio. Un servicio de búsqueda saca el procesamiento del entorno estándar si el sistema está bajo carga.

  • Si recibe un error al crear un vínculo privado compartido, compruebe los límites del servicio para comprobar que está por debajo de la cuota del nivel.

Pasos siguientes

Más información sobre los puntos de conexión privados y otros métodos de conexión segura: