Établir des connexions sortantes via un lien privé partagé
Cet article explique comment configurer des appels privés sortants depuis Azure AI Search vers une ressource Azure PaaS qui s’exécute au sein d’un réseau virtuel Azure.
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 pour obtenir les étapes spécifiques à ce type de ressource.
Quand utiliser une liaison privée partagée
Azure AI Recherche effectue des appels sortants vers d’autres ressources PaaS Azure dans les scénarios suivants :
- Indexeur ou connexions de moteur de recherche à Azure OpenAI pour les incorporations de texte à vecteur
- Connexions de l'indexeur 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.
Scénario un : créer une liaison privée partagée quand une connexion (indexeur) sortante à Azure PaaS nécessite une connexion privée.
Scénario deux : configurer la recherche d’une connexion entrante privée depuis des clients qui s’exécutent dans un réseau virtuel.
Le scénario un est traité dans cet article.
Bien que les deux scénarios aient une dépendance sur 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
,2024-03-01-preview
et2024-06-01-preview
. Nous vous recommandons l’API dans la préversion la plus récente.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 3 | sqlServer |
Microsoft.KeyVault/vaults | vault |
Microsoft.DBforMySQL/servers (préversion) | mysqlServer |
Microsoft.Web/sites 4 | sites |
Microsoft.Sql/managedInstances (préversion) 5 | managedInstance |
Microsoft.CognitiveServices/accounts 6 | 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.Sql/servers
est utilisé pour les connexions à une base de données Azure SQL. Actuellement, aucune prise en charge n’existe pour une liaison privée partagée à Azure Synapse SQL.
4 Le type de ressource Microsoft.Web/sites
est utilisé pour App Service et les fonctions 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é. L’App Service Environment (ASE), Azure Kubernetes Service (AKS) et AZure API Management ne sont pas pris en charge pour l’instant.
5 Consultez Créer une liaison privée partagée pour une instance SQL Managed Instance pour obtenir des instructions.
6 Le type de ressource Microsoft.CognitiveServices/accounts
est utilisé pour les connexions du vectoriseur et de l'indexeur à Azure OpenAI lors de l’implémentation de la vectorisation intégrée. Il n’existe actuellement aucune prise en charge de la liaison privée partagée pour incorporer des modèles dans le catalogue de modèles Azure AI Studio ou à l’API modale Azure AI Vision.
1 - Créer une liaison privée partagé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.
Connectez-vous au Portail Azure, puis trouvez votre service de recherche.
Dans le volet de navigation gauche, sous Paramètres, sélectionnez Mise en réseau.
Dans la page Accès privé partagé, sélectionnez + Ajouter un accès privé partagé.
Sélectionnez Se connecter à une ressource Azure dans mon annuaire ou Se connecter à une ressource Azure par ID de ressource.
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.
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.
Vérifiez que l’état de provisionnement est « Mise à jour ».
Une fois la ressource créée, l’état de provisionnement de la ressource passe à « Réussi ».
Workflow de création de liaison privée partagé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 Stockage Azure, utilisez Connexions de point de terminaison privé – Placer
- Dans Azure Cosmos DB, utilisez Connexions de point de terminaison privé – Créer ou mettre à jour
- Sur Azure OpenAI, utilisez Connexions de point de terminaison privé – Créer ou mettre à jour
Dans le portail Azure, effectuez les étapes suivantes :
Ouvrez la page Réseaux de la ressource Azure PaaS.texte
Recherchez la section qui répertorie les connexions des points de terminaison privés. L’exemple suivant concerne un compte de stockage.
Sélectionnez la connexion, puis Approuver. La mise à jour de l’état dans le portail peut prendre quelques minutes.
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.
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.
3 - Vérifier l’état de la 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é.
Vous pouvez également obtenir l’état de la connexion en utilisant les Ressources Private Link partagées – 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=2024-07-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.
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é.
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
surprivate
.{ "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.
5 - Tester la liaison privée partagée
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.
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.
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=..." }
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": [] }
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 estIncomplete
, il peut y avoir un problème avec les dépendances sous-jacentes. Dans ce cas, réexécutez la requêtePUT
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 surprivate
. 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 :