Configurer une connexion d’indexeur à Azure SQL à l’aide d’une identité managée
Cet article explique comment configurer une connexion d’indexeur à Azure SQL Database en utilisant une identité managée au lieu de fournir des informations d’identification dans la chaîne de connexion.
Vous pouvez utiliser une identité managée affectée par le système ou une identité managée affectée par l’utilisateur (préversion). Les identités managées sont des connexions Microsoft Entra et nécessitent des attributions de rôles Azure pour accéder aux données dans Azure SQL.
Prérequis
Créez une identité managée pour votre service de recherche.
Attribuez un rôle d’administrateur Azure sur SQL. L’identité utilisée sur la connexion d’indexeur a besoin d’autorisations de lecture. Vous devez être un administrateur Microsoft Entra avec un serveur dans SQL Database ou SQL Managed Instance pour octroyer des autorisations de lecture sur une base de données.
Vous devez être familiarisé avec les concepts et la configuration de l’indexeur.
1 – Attribuer des autorisations pour lire la base de données
Suivez les étapes ci-dessous pour attribuer au service de recherche ou à l’identité managée affectée par l’utilisateur l’autorisation de lire la base de données.
Connectez-vous à Visual Studio.
Authentifiez-vous avec votre compte Microsoft Entra.
Exécutez les commandes suivantes :
Incluez les crochets autour du nom de votre service de recherche ou du nom d’identité managée affectée par l’utilisateur.
CREATE USER [insert your search service name here or user-assigned managed identity name] FROM EXTERNAL PROVIDER; EXEC sp_addrolemember 'db_datareader', [insert your search service name here or user-assigned managed identity name];
Si vous modifiez ultérieurement l’identité du service de recherche ou l’identité affectée par l’utilisateur après avoir attribué des autorisations, vous devez supprimer l’appartenance au rôle et supprimer l’utilisateur dans la base de données SQL, puis répéter l’attribution d’autorisation. La suppression de l’appartenance au rôle et de l’utilisateur peut être effectuée en exécutant les commandes suivantes :
sp_droprolemember 'db_datareader', [insert your search service name or user-assigned managed identity name];
DROP USER IF EXISTS [insert your search service name or user-assigned managed identity name];
2 – Ajouter une attribution de rôle
Au cours de cette section, vous allez accorder à votre service Azure AI Recherche l’autorisation de lire les données de votre serveur SQL. Pour connaître les étapes détaillées, consultez Attribuer des rôles Azure à l’aide du portail Azure.
Dans le portail Azure, accédez à votre page Azure SQL Server.
Sélectionnez Contrôle d’accès (IAM) .
Sélectionner Ajouter> Ajouter une attribution de rôle.
Dans l’onglet Rôle, sélectionnez le rôle Lecteur approprié.
Sous l’onglet Membres, sélectionnez Identité managée, puis Sélectionner des membres.
Sélectionnez votre abonnement Azure.
Si vous utilisez une identité managée affectée par le système, sélectionnez Identité managée affectée par le système, recherchez votre service de recherche, puis sélectionnez-le.
Sinon, si vous utilisez une identité managée affectée par l’utilisateur, sélectionnez Identité managée affectée par l’utilisateur, recherchez le nom de l’identité managée affectée par l’utilisateur, puis sélectionnez-la.
Dans l’onglet Passer en revue + affecter, sélectionnez Passer en revue + affecter pour affecter le rôle.
3 – Créer la source de données
Créez la source de données et indiquez une identité managée affectée par le système ou une identité managée affectée par l’utilisateur (préversion).
Identité managée affectée par le système
L’API REST, le portail Azure et le Kit de développement logiciel (SDK) .NET prennent l’identité managée affectée par le système.
Quand vous vous connectez avec une identité managée affectée par le système, la seule modification apportée à la définition de la source de données est le format de la propriété « credentials ». Vous indiquerez ici un nom Initial Catalog ou Database et un ResourceId qui n’a pas de clé de compte ni de mot de passe. Le ResourceId doit inclure l’ID d’abonnement d’Azure SQL Database, le groupe de ressources d’Azure SQL Database et le nom de la base de données SQL.
Voici un exemple de la façon de créer une source de données pour indexer des données à partir d’un compte de stockage en utilisant l’API REST et une chaîne de connexion d’identité managée. Le format de chaîne de connexion d’identité managée est le même pour l’API REST, le kit de développement logiciel (SDK) .NET et le portail Azure.
POST https://[service name].search.windows.net/datasources?api-version=2024-07-01
Content-Type: application/json
api-key: [admin key]
{
"name" : "sql-datasource",
"type" : "azuresql",
"credentials" : {
"connectionString" : "Database=[SQL database name];ResourceId=/subscriptions/[subscription ID]/resourceGroups/[resource group name]/providers/Microsoft.Sql/servers/[SQL Server name];Connection Timeout=30;"
},
"container" : {
"name" : "my-table"
}
}
Identité managée affectée par l’utilisateur (préversion)
L’API REST 2021-04-30-preview et versions ultérieures prennent en charge les connexions basées sur une identité managée affectée par l’utilisateur. Quand vous vous connectez avec une identité managée affectée par l’utilisateur, deux modifications sont apportées à la définition de la source de données :
Tout d’abord, le format de la propriété « credentials » est le catalogue initial ou le nom de la base de données et un ResourceId qui n’a pas de clé ou de mot de passe de compte. Le ResourceId doit inclure l’ID d’abonnement d’Azure SQL Database, le groupe de ressources d’Azure SQL Database et le nom de la base de données SQL. C’est le même format que l’identité managée affectée par le système.
Ensuite, ajoutez une propriété « identity » qui contient la collection d'identités managées attribuées par l'utilisateur. Une seule identité managée affectée par l’utilisateur doit être fournie lors de la création de la source de données. Définissez-la sur le type « userAssignedIdentities ».
Voici un exemple de la façon de créer un objet de source de données d’indexeur en utilisant la version la plus récente de l’API en préversion de Créer ou Mettre à jour une source de données :
POST https://[service name].search.windows.net/datasources?api-version=2024-05-01-preview
Content-Type: application/json
api-key: [admin key]
{
"name" : "sql-datasource",
"type" : "azuresql",
"credentials" : {
"connectionString" : "Database=[SQL database name];ResourceId=/subscriptions/[subscription ID]/resourceGroups/[resource group name]/providers/Microsoft.Sql/servers/[SQL Server name];Connection Timeout=30;"
},
"container" : {
"name" : "my-table"
},
"identity" : {
"@odata.type": "#Microsoft.Azure.Search.DataUserAssignedIdentity",
"userAssignedIdentity" : "/subscriptions/[subscription ID]/resourcegroups/[resource group name]/providers/Microsoft.ManagedIdentity/userAssignedIdentities/[managed identity name]"
}
}
4 – Créer l’index
L’index spécifie les champs d’un document, les attributs et d’autres constructions qui façonnent l’expérience de recherche.
Voici un appel de l’API REST Créer un index avec un champ de recherche booktitle
:
POST https://[service name].search.windows.net/indexes?api-version=2024-07-01
Content-Type: application/json
api-key: [admin key]
{
"name" : "my-target-index",
"fields": [
{ "name": "id", "type": "Edm.String", "key": true, "searchable": false },
{ "name": "booktitle", "type": "Edm.String", "searchable": true, "filterable": false, "sortable": false, "facetable": false }
]
}
5 – Créer l’indexeur
Un indexeur connecte une source de données à un index de recherche cible et fournit une planification afin d’automatiser l’actualisation des données. Une fois l’index et la source de données créés, vous êtes prêt à créer l’indexeur. Si l’indexeur réussit, la syntaxe de connexion et les attributions de rôles sont valides.
Voici un appel de l’API REST Créer un indexeur avec une définition d’indexeur Azure SQL. L’indexeur s’exécute quand vous envoyez la demande.
POST https://[service name].search.windows.net/indexers?api-version=2024-07-01
Content-Type: application/json
api-key: [admin key]
{
"name" : "sql-indexer",
"dataSourceName" : "sql-datasource",
"targetIndexName" : "my-target-index"
}
Si vous recevez une erreur lorsque l’indexeur tente de se connecter à la source de données qui indique que le client n’est pas autorisé à accéder au serveur, consultez les erreurs courantes de l’indexeur.