Share via


Établir des connexions sortantes via un lien privé partagé

Cet article explique comment configurer des appels privés et sortants à partir d’Azure AI Recherche vers une ressource PaaS Azure qui s’exécute dans un réseau virtuel.

La configuration d’une connexion privée permet à un service de recherche de se connecter à une adresse IP de réseau virtuel au lieu d’un port ouvert à Internet. L’objet créé pour la connexion est appelé liaison privée partagée. Sur la connexion, le service de recherche utilise la liaison privée partagée en interne pour atteindre une ressource PaaS Azure à l’intérieur de la limite de réseau.

La liaison privée partagée est une fonctionnalité Premium facturée à l’utilisation. Lorsque vous configurez une liaison privée partagée, les frais pour le point de terminaison privé sont ajoutés à votre facture Azure. Lorsque vous utilisez la liaison privée partagée, les taux de transfert de données pour l’accès entrant et sortant sont également facturés. Pour plus d’informations, consultez Tarifs Azure Private Link.

Remarque

Si vous configurez une connexion d’indexeur privé à une instance SQL Managed Instance, consultez cet article à la place.

Azure AI Recherche effectue des appels sortants vers d’autres ressources PaaS Azure dans les scénarios suivants :

  • L’indexeur ou le moteur de recherche se connecte à Azure OpenAI pour les incorporations texte-à-vecteur
  • L’indexeur se connecte aux sources de données prises en charge
  • Connexions de l’indexeur (ensemble de compétences) au stockage Azure pour mettre en cache des enrichissements, déboguer l’état de session ou écrire dans une base de connaissances
  • Demandes de clé de chiffrement à Azure Key Vault
  • Demandes de compétences personnalisées à Azure Functions ou une ressource similaire

Les liaisons privées partagées fonctionnent uniquement pour les connexions Azure-à-Azure. Si vous vous connectez à OpenAI ou à un autre modèle externe, la connexion doit se trouver sur l’Internet public.

Les liaisons privées partagées sont destinées aux opérations et aux données accessibles via un point de terminaison privé pour les ressources ou clients Azure qui s’exécutent dans un réseau virtuel Azure.

Une liaison privée partagée est :

  • Créée à l’aide d’outils, d’API ou de SDK Azure AI Recherche
  • Approuvée par le propriétaire de la ressource PaaS Azure
  • Utilisée en interne par la recherche Azure AI sur une connexion privée à une ressource Azure spécifique

Seul votre service de recherche peut utiliser les liaisons privées qu’il crée, et il ne peut y avoir qu’une seule liaison privée partagée créée sur votre service pour chaque combinaison de ressources et de sous-ressources.

Une fois que vous avez configuré la liaison privée, elle est utilisée automatiquement chaque fois que le service de recherche se connecte à cette ressource PaaS. Vous n’avez pas besoin de modifier la chaîne de connexion ni de modifier le client que vous utilisez pour émettre les demandes, même si l’appareil utilisé pour la connexion doit se connecter à l’aide d’une adresse IP autorisée dans le pare-feu de la ressource PaaS Azure.

Il existe deux scénarios d’utilisation conjointe d’Azure Private Link et d’Azure AI Recherche.

Le scénario un est traité dans cet article.

Bien que les deux scénarios dépendent d’Azure Private Link, ils sont indépendants. Vous pouvez créer une liaison privée partagée sans avoir à configurer votre propre service de recherche pour un point de terminaison privé.

Limites

Lorsque vous évaluez des liaisons privées partagées pour votre scénario, n’oubliez pas ces contraintes.

  • Plusieurs types de ressources utilisés dans une liaison privée partagée sont en préversion. Si vous vous connectez à une ressource en préversion (Azure Database pour MySQL, Azure Functions ou Azure SQL Managed Instance), utilisez une préversion de l’API REST de gestion pour créer la liaison privée partagée. Ces versions incluent 2020-08-01-preview, 2021-04-01-preview et 2024-03-01-preview.

  • L’exécution de l’indexeur doit utiliser l’environnement d’exécution privé spécifique à votre service de recherche. Les connexions de point de terminaison privé ne sont pas prises en charge à partir de l’environnement mutualisé. Le paramètre de configuration de cette exigence est abordé dans cet article.

Prérequis

  • Azure AI Recherche au niveau De base ou supérieur. Si vous utilisez l’enrichissement par IA et les ensembles de compétences, le niveau doit être Standard 2 (S2) ou supérieur. Pour plus d’informations, consultez Limites du service.

  • Une ressource Azure PaaS dans la liste suivante de types de ressources pris en charge, configurée pour s’exécuter dans un réseau virtuel.

  • Autorisations sur Recherche Azure AI et sur la source de données :

    • Sur la ressource PaaS Azure, vous devez disposer de l’autorisation d’approuver les connexions de point de terminaison privé. Par exemple, si vous utilisez un compte de stockage Azure comme source de données (par exemple, conteneur d’objets blob, partage Azure Files, table Azure), vous avez besoin de Microsoft.Storage/storageAccounts/privateEndpointConnectionsApproval/action.

    • Sur le service de recherche, vous devez disposer d’autorisations de lecture et d’écriture sur les ressources de liaison privée partagée et les états des opérations de lecture :

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

Types de ressources pris en charge

Vous pouvez créer une liaison privée partagée pour les ressources suivantes.

Type de ressource Sous-ressource (ou ID de groupe)
Microsoft.Storage/storageAccounts 1 blob, table, dfs, file
Microsoft.DocumentDB/databaseAccounts 2 Sql
Microsoft.Sql/servers sqlServer
Microsoft.KeyVault/vaults vault
Microsoft.DBforMySQL/servers (préversion) mysqlServer
Microsoft.Web/sites (préversion) 3 sites
Microsoft.Sql/managedInstances (préversion) 4 managedInstance
Microsoft.CognitiveServices/accounts (préversion) 5 openai_account

1 Si le stockage Azure et Azure AI Recherche se trouvent dans la même région, la connexion au stockage est établie sur le réseau principal Microsoft, ce qui signifie qu’une liaison privée partagée est redondante pour cette configuration. Toutefois, si vous avez déjà configuré un point de terminaison privé pour le stockage Azure, vous devez également configurer une liaison privée partagée ou la connexion est refusée côté stockage. En outre, si vous utilisez plusieurs formats de stockage pour différents scénarios dans la recherche, veillez à créer une liaison privée partagée distincte pour chaque sous-ressource.

2 Le type de ressource Microsoft.DocumentDB/databaseAccounts est utilisé pour les connexions d’indexeur à Azure Cosmos DB for NoSQL. Le nom du fournisseur et l’ID de groupe respectent la casse.

3 Le type de ressource Microsoft.Web/sites est utilisé pour les fonctions App Service et Azure. Dans le contexte d’Azure AI Recherche, une fonction Azure est le scénario le plus probable. Une fonction Azure est couramment utilisée pour héberger la logique d’une compétence personnalisée. Une fonction Azure a des plans d’hébergement App Service Consommation, Premium et Dédié. App Service Environment (ASE) et Azure Kubernetes Service (AKS) ne sont pas pris en charge pour l’instant.

4 Consultez Créer une liaison privée partagée pour une instance SQL Managed Instance pour obtenir des instructions.

5 Le type de ressource Microsoft.CognitiveServices/accounts est utilisé pour les connexions d’indexeur à Azure OpenAI lors de l’implémentation de la vectorisation intégrée.

Utilisez le portail Azure, l’API REST de gestion, Azure CLI ou Azure PowerShell pour créer une liaison privée partagée.

Voici quelques conseils :

  • Attribuez un nom explicite à la liaison privée. Dans la ressource PaaS Azure, une liaison privée partagée apparaît à côté d’autres points de terminaison privés. Un nom comme « shared-private-link-for-search » peut vous aider à vous rappeler pourquoi vous l’utilisez.

Une fois les étapes de cette section effectuées, vous avez une liaison privée partagée provisionnée dans l’état En attente. La création de la liaison prend plusieurs minutes. Une fois la liaison créée, le propriétaire de la ressource doit approuver la demande pour qu’elle soit opérationnelle.

  1. Connectez-vous au Portail Azure, puis trouvez votre service de recherche.

  2. Dans le volet de navigation gauche, sous Paramètres, sélectionnez Mise en réseau.

  3. Dans la page Accès privé partagé, sélectionnez + Ajouter un accès privé partagé.

  4. Sélectionnez Se connecter à une ressource Azure dans mon annuaire ou Se connecter à une ressource Azure par ID de ressource.

  5. Si vous sélectionnez la première option (recommandé), le portail vous aide à choisir la ressource Azure appropriée et renseigne d’autres propriétés, telles que l’ID de groupe de la ressource et le type de ressource.

    Capture d’écran de la page Ajouter un accès privé partagé, montrant une expérience guidée pour la création d’une ressource de liaison privée partagée.

  6. Si vous sélectionnez la deuxième option, entrez l’ID de ressource Azure manuellement et choisissez l’ID de groupe approprié dans la liste au début de cet article.

    Capture d’écran de la page Ajouter un accès privé partagé, montrant l’expérience manuelle de la création d’une ressource de liaison privée partagée.

  7. Vérifiez que l’état de provisionnement est « Mise à jour ».

    Capture d’écran de la page Ajouter un accès privé partagé, montrant la création de la ressource en cours.

  8. Une fois la ressource créée, l’état de provisionnement de la ressource passe à « Réussi ».

    Capture d’écran de la page Ajouter un accès privé partagé, montrant la création de la ressource terminée.

Une réponse 202 Accepted est retournée en cas de réussite. Le processus de création d’un point de terminaison privé sortant est une opération longue (asynchrone). Il implique le déploiement des ressources suivantes :

  • un point de terminaison privé avec une adresse IP privée présentant l’état "Pending". L’adresse IP privée est obtenue à partir de l’espace d’adressage alloué au réseau virtuel de l’environnement d’exécution de l’indexeur privé spécifique au service de recherche. Une fois le point de terminaison privé approuvé, toute communication entre Azure AI Recherche et la ressource Azure provient de l’adresse IP privée et d’un canal de liaison privé sécurisé.

  • Une zone DNS privée pour le type de ressource, basée sur l’ID de groupe. En déployant cette ressource, vous êtes assuré que toute recherche DNS sur la ressource privée utilisera l’adresse IP associée au point de terminaison privé.

2 - Approuver la connexion de point de terminaison privé

L’approbation de la connexion de point de terminaison privé est accordée du côté d’Azure PaaS. Une approbation explicite par le propriétaire de la ressource est requise. Les étapes suivantes couvrent l’approbation à l’aide du portail Azure, mais voici quelques liens pour approuver la connexion programmatiquement côté Azure PaaS :

Dans le portail Azure, effectuez les étapes suivantes :

  1. Ouvrez la page Réseaux de la ressource Azure PaaS.texte

  2. Recherchez la section qui répertorie les connexions des points de terminaison privés. L’exemple suivant concerne un compte de stockage.

    Capture d’écran du portail Azure, affichant le volet « Connexions de point de terminaison privé ».

  3. Sélectionnez la connexion, puis Approuver. La mise à jour de l’état dans le portail peut prendre quelques minutes.

    Capture d’écran du Portail Azure, affichant l’état Approuvé dans le volet Connexions de point de terminaison privé.

Dès que le point de terminaison privé est approuvé, la Recherche Azure AI crée les mappages de zone DNS nécessaires dans la zone DNS créée à cet effet.

Bien que le lien du point de terminaison privé sur la page Mise en réseau soit actif, il ne peut être résolu.

Capture d’écran de la liaison du point de terminaison privé dans la page de mise en réseau d’Azure PaaS.

La sélection du lien génère une erreur. Un message d’état de "The access token is from the wrong issuer" et de must match the tenant associated with this subscription s’affiche, car la ressource back-end de point de terminaison privé est provisionnée par Microsoft dans un locataire géré par Microsoft, tandis que la ressource liée (Recherche Azure AI) se trouve dans votre locataire. Le fait que vous ne puissiez pas accéder à la ressource de point de terminaison privé en sélectionnant le lien de connexion de point de terminaison privé est intentionnel.

Suivez les instructions de la section suivante pour vérifier l’état de votre liaison privée partagée.

Du côté de la Recherche Azure IA, vous pouvez confirmer l’approbation de la demande en revenant sur la page Accès privé partagé de la page Réseau du service de recherche. L’état de connexion doit être approuvé.

Capture d’écran du portail Azure, montrant une ressource de liaison privée partagée approuvée.

Vous pouvez également obtenir l’état de connexion à l’aide de l’API de liaison privée partagée 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

Cette commande retourne un fichier JSON, où l’état de la connexion s’affiche sous la forme d’un « état » sous la section « propriétés ». L’exemple suivant illustre un compte de stockage.

{
      "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 l’état de provisionnement (properties.provisioningState) de la ressource est « Réussi » et que l’état de connexion (properties.status) est « Approuvé », cela signifie que la ressource de liaison privée partagée est fonctionnelle et que l’indexeur peut être configuré pour communiquer sur le point de terminaison privé.

4 - Configurer l’indexeur pour qu’il s’exécute dans l’environnement privé

L’exécution de l’indexeur se produit dans un environnement privé qui est spécifique au service de recherche, ou un environnement mutualisé qui est utilisé en interne pour décharger le traitement des ensembles de compétences coûteux pour plusieurs clients.

L’environnement d’exécution est transparent, mais une fois que vous avez commencé à créer des règles de pare-feu ou à établir des connexions privées, vous devez prendre en compte l’exécution de l’indexeur. Pour une connexion privée, configurez l’exécution de l’indexeur pour qu’elle s’exécute toujours dans l’environnement privé.

Cette étape montre comment configurer l’indexeur pour qu’il s’exécute dans l’environnement privé à l’aide de l’API REST. Vous pouvez également définir l’environnement d’exécution à l’aide de l’éditeur JSON dans le portail.

Remarque

Vous pouvez effectuer cette opération avant même que la connexion de points de terminaison privés ne soit approuvée. Toutefois, tant que la connexion de points de terminaison privé n’est pas approuvée, tout indexeur existant tentant de communiquer avec une ressource sécurisée (par exemple, le compte de stockage) se retrouve en état d’échec temporaire, et la création de nouveaux indexeurs échoue.

  1. Créez la définition de la source de données, l’index et l’ensemble de compétences (le cas échéant) comme vous le feriez normalement. Aucune propriété relative à ces définitions ne varie lors de l’utilisation d’un point de terminaison privé partagé.

  2. Créez un indexeur qui pointe vers la source de données, l’index et l’ensemble de compétences que vous avez créés à l’étape précédente. En outre, forcez l’exécution de l’indexeur dans l’environnement d’exécution privé en définissant la propriété de configuration de l’indexeur executionEnvironment sur private.

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

Une fois l’indexeur créé avec succès, il doit se connecter à la ressource Azure via la connexion de point de terminaison privé. Vous pouvez surveiller l’état de l’indexeur à l’aide de l’API d’état de l’indexeur.

Remarque

Si vous disposez déjà d’indexeurs, vous pouvez les mettre à jour via l’API PUT en configurant executionEnvironment sur private ou à l’aide de l’éditeur JSON dans le portail.

  1. Si vous ne l’avez pas déjà fait, vérifiez que votre ressource PaaS Azure refuse les connexions à partir de l’Internet public. Si les connexions sont acceptées, passez en revue les paramètres DNS dans la page Réseaux de votre ressource PaaS Azure.

  2. Choisissez un outil qui peut appeler un scénario de demande sortante, tel qu’une connexion d’indexeur à un point de terminaison privé. Un choix simple consiste à utiliser l’Assistant Importation de données, mais vous pouvez aussi essayer l’application un client REST et des API REST pour plus de précision. En supposant que votre service de recherche n’est pas non plus configuré pour une connexion privée, la connexion du client REST à la recherche peut se faire sur l’Internet public.

  3. Définissez la chaîne de connexion sur la ressource PaaS Azure privée. Le format de la chaîne de connexion ne change pas pour la liaison privée partagée. Le service de recherche appelle la liaison privée partagée en interne.

    Pour les charges de travail d’indexeur, la chaîne de connexion se trouve dans la définition de la source de données. Un exemple de source de données pourrait se présenter comme suit :

     {
       "name": "my-blob-ds",
       "type": "azureblob",
       "subtype": null,
       "credentials": {
         "connectionString": "DefaultEndpointsProtocol=https;AccountName=<YOUR-STORAGE-ACCOUNT>;AccountKey=..."
       }
    
  4. Pour les charges de travail d’indexeur, pensez à définir l’environnement d’exécution dans la définition de l’indexeur. Un exemple de définition d’indexeur pourrait se présenter comme suit :

    "name": "indexer",
    "dataSourceName": "my-blob-ds",
    "targetIndexName": "my-index",
    "parameters": {
       "configuration": {
           "executionEnvironment": "private"
           }
       },
    "fieldMappings": []
    }
    
  5. Exécutez l’indexeur. Si l’exécution de l’indexeur réussit et que l’index de recherche est renseigné, la liaison privée partagée fonctionne.

Résolution des problèmes

  • Si la création de votre indexeur échoue avec « Les informations d’identification de la source de données ne sont pas valides », vérifiez l’état d’approbation de la liaison privée partagée avant de déboguer la connexion. Si l’état est Approved, vérifiez la propriété properties.provisioningState. Si sa valeur est Incomplete, il peut y avoir un problème avec les dépendances sous-jacentes. Dans ce cas, réexécutez la requête PUT pour recréer la liaison privée partagée. Vous devrez peut-être également répéter l’étape d’approbation.

  • Si les indexeurs échouent de façon cohérente ou intermittente, vérifiez la propriété executionEnvironment sur l’indexeur. La valeur doit être définie sur private. Si vous n’avez pas défini cette propriété et que l’indexeur s’exécutait correctement par le passé, c’est parce que le service de recherche utilisait un environnement privé de son propre accord. Un service de recherche déplace le traitement hors de l’environnement standard si le système est en charge.

  • Si vous recevez une erreur lors de la création d’une liaison privée partagée, vérifiez les limites de service pour vous assurer que vous êtes sous le quota de votre niveau.

Étapes suivantes

Apprenez-en davantage sur les points de terminaison privés et d’autres méthodes de connexion sécurisée :