Configurer une connexion d’indexeur à Stockage Azure à l’aide d’une identité managée

Cet article explique comment configurer une connexion d’indexeur à un compte Stockage Azure 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 identifiants Microsoft Entra et nécessitent l'attribution de rôles Azure pour accéder aux données de stockage Azure.

Remarque

Si le stockage est protégé par le réseau et dans la même région que votre service de recherche, vous devez utiliser une identité managée affectée par le système et l’une des options réseau suivantes : Se connecter en tant que service approuvé, ou Se connecter à l’aide de la règle d’instance de ressource.

Prérequis

  • Créez une identité managée pour votre service de recherche.

  • Attribuez un rôle dans Stockage Azure :

    • Choisissez Lecteur des données Blob du stockage pour l’accès en lecture aux données dans Stockage Blob et ADLS Gen2.

    • Choisissez Lecteur et données pour l’accès en lecture aux données dans Stockage Table et Stockage Fichier.

  • Vous devez être familiarisé avec les concepts et la configuration de l’indexeur.

Conseil

Pour un exemple de code en C#, consultez Index Data Lake Gen2 using Microsoft Entra ID sur GitHub.

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 SDK .NET prennent en charge l’utilisation d’une 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 ». Fournissez un ResourceId qui n'a pas de clé de compte ni de mot de passe. Le ResourceId doit inclure l’ID d’abonnement du compte de stockage, le groupe de ressources du compte de stockage et le nom du compte de stockage.

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=2023-11-01
Content-Type: application/json
api-key: [admin key]

{
    "name" : "blob-datasource",
    "type" : "azureblob",
    "credentials" : { 
        "connectionString" : "ResourceId=/subscriptions/[subscription ID]/resourceGroups/[resource group name]/providers/Microsoft.Storage/storageAccounts/[storage account name]/;" 
    },
    "container" : { 
        "name" : "my-container", "query" : "<optional-virtual-directory-name>" 
    }
}   

Identité managée affectée par l’utilisateur (préversion)

L’API REST 2021-04-30-preview prend 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 un ResourceId qui n’a pas de clé ou de mot de passe de compte. Le ResourceId doit inclure l’ID d’abonnement du compte de stockage, le groupe de ressources du compte de stockage et le nom du compte de stockage. Ce format est le même 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 l’API REST Créer ou mettre à jour une source de données - Préversion :

POST https://[service name].search.windows.net/datasources?api-version=2021-04-30-preview
Content-Type: application/json
api-key: [admin key]

{
    "name" : "blob-datasource",
    "type" : "azureblob",
    "credentials" : { 
        "connectionString" : "ResourceId=/subscriptions/[subscription ID]/resourceGroups/[resource group name]/providers/Microsoft.Storage/storageAccounts/[storage account name]/;" 
    },
    "container" : { 
        "name" : "my-container", "query" : "<optional-virtual-directory-name>" 
    },
    "identity" : { 
        "@odata.type": "#Microsoft.Azure.Search.DataUserAssignedIdentity",
        "userAssignedIdentity" : "/subscriptions/[subscription ID]/resourcegroups/[resource group name]/providers/Microsoft.ManagedIdentity/userAssignedIdentities/[managed identity name]" 
    }
}   

Création de 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 content pour stocker le texte extrait des objets blob :

POST https://[service name].search.windows.net/indexes?api-version=2023-11-01
Content-Type: application/json
api-key: [admin key]

{
        "name" : "my-target-index",
        "fields": [
        { "name": "id", "type": "Edm.String", "key": true, "searchable": false },
        { "name": "content", "type": "Edm.String", "searchable": true, "filterable": false, "sortable": false, "facetable": false }
        ]
}

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 et exécuter 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 d’objets blob. L’indexeur s’exécute quand vous envoyez la demande.

POST https://[service name].search.windows.net/indexers?api-version=2023-11-01
Content-Type: application/json
api-key: [admin key]

{
    "name" : "blob-indexer",
    "dataSourceName" : "blob-datasource",
    "targetIndexName" : "my-target-index"
}

Accès aux données sécurisées du réseau dans les comptes de stockage

Les comptes de stockage Azure peuvent être sécurisés davantage à l’aide de pare-feu et de réseaux virtuels. Pour indexer le contenu d’un compte de stockage sécurisé avec un pare-feu ou un réseau virtuel, consultez Établir des connexions d’indexeur au Stockage Azure en tant que service approuvé.

Voir aussi