Utiliser un indexeur ADLS Gen2 pour ingérer les métadonnées d’autorisation et filtrer les résultats de recherche en fonction des droits d’accès utilisateur (préversion)

Note

Recherche Azure AI est disponible via le portail Azure, les API REST et les SDK Azure. Il sous-tend également Foundry IQ, la couche de connaissances managée qui transforme le contenu d’entreprise en bases de connaissances réutilisables et prenant en charge les autorisations pour les agents dans le portail Microsoft Foundry.

Important

Les fonctionnalités, capacités ou propriétés marquées (préversion) ne sont pas couvertes par un accord de niveau de service, ne sont pas recommandées pour les workloads de production et peuvent être modifiées ou faire l’objet de restrictions avant leur mise à disposition générale. Les Recherche Azure AI termes de la préversion s'appliquent à toutes les fonctionnalités d'aperçu, qu'il s'agisse d'une fonctionnalité autonome ou d'une partie d'une fonctionnalité généralement disponible.

Azure Data Lake Storage (ADLS) Gen2 prend en charge l’accès par utilisateur aux répertoires et aux fichiers via access control lists (ACL) et role-based access control (Azure RBAC). Le contrôle d'accès basé sur les attributs (Azure ABAC) n'est pas pris en charge.

Recherche Azure AI peut ingérer ces métadonnées d’autorisations (préversion) avec le contenu des documents à l’aide d’une API REST en préversion. Les utilisateurs qui n’ont pas accès à un répertoire ou un fichier dans le stockage ne voient pas les documents correspondants dans les résultats de recherche. Il s’agit de l’une des plusieurs stratégies de contrôle d’accès au niveau de document dans Recherche Azure AI.

Cet article explique comment configurer un indexeur ADLS Gen2 ou une source d’informations d’objets blob ADLS Gen2 pour récupérer automatiquement les métadonnées d’autorisation dans un index de recherche. Il complète les données d’index d’ADLS Gen2 et crée une source de connaissances sur les blobs pour ADLS Gen2, avec des informations spécifiques à l’ingestion d’autorisations. Pour envoyer manuellement des métadonnées d’autorisation, consultez les listes de contrôle d’accès du document Index à l’aide de l’API Push.

Architecture montrant une solution RAG à découpage de sécurité où un indexeur ADLS Gen2 ingère des documents et des métadonnées d'autorisation ACL et RBAC à partir d'un conteneur ADLS Gen2, les stocke dans un index Recherche Azure AI et un orchestrateur RAG filtre les résultats de requête afin que chaque utilisateur récupère uniquement les documents auxquels il est autorisé à accéder.

Conditions préalables

  • Microsoft Entra ID authentification et autorisation. Les services et les applications doivent se trouver dans le même locataire. Les utilisateurs peuvent se trouver dans différents locataires tant que tous les locataires utilisent Microsoft Entra ID. Les attributions de rôles sont utilisées pour chaque connexion authentifiée.

  • Recherche Azure AI sur un niveau facturable (De base ou supérieur) dans n’importe quelle région. Le service de recherche doit avoir un accès en fonction du rôle activé et une identité managée affectée par le système ou affectée par l’utilisateur.

  • Objets blob ADLS Gen2 dans un espace de noms hiérarchique, avec des autorisations utilisateur accordées par le biais d’ACL ou de rôles.

  • API REST version 2025-05-01-preview ou ultérieure pour l’ingestion des permissions de l’indexeur. API REST version 2025-11-01-preview ou version ultérieure pour la prise en charge des sources de connaissances. Utilisez la dernière API REST en préversion ou un package de sdk en préversion qui prend en charge les filtres d’autorisation.

Limitations

Prise en charge du modèle d’autorisation

Cette section compare les fonctionnalités de contrôle d’accès au niveau du document entre ADLS Gen2 et Recherche Azure AI. Il explique quels mécanismes de contrôle d’accès Azure Data Lake Storage (ADLS) Gen2 AI Search prend en charge ou mappe. Cela vous aide à comprendre comment les autorisations sont appliquées au niveau du document.

Fonctionnalité ADLS Gen2 Description Soutenu Notes
RBAC Accès granulaire au niveau du conteneur Oui AI Search respecte RBAC dans le cadre de l'accès à tous les documents dans l’ensemble du conteneur.
ABAC Conditions basées sur des attributs intégrées au RBAC Non La recherche IA n’évalue pas les conditions ABAC pour l’accès au niveau du document.
ACL Autorisations affinées au niveau du répertoire/du fichier (document) Oui Ai Search utilise des listes de contrôle d’accès au niveau du document pour les filtres d’autorisation.
Groupes de sécurité Affectations d’autorisations basées sur un groupe Oui Prise en charge si les groupes de sécurité sont mappés à l’intérieur de la liste de contrôle d’accès au niveau du document.

Au moment de la requête, Recherche Azure AI évalue d’abord le RBAC au niveau du conteneur, puis vérifie les entrées ACL au niveau du document. L’accès est accordé si un mécanisme l’autorise.

Flowchart et table de vérité montrant comment Recherche Azure AI évalue l’autorisation en vérifiant d’abord le RBAC au niveau du conteneur, puis les entrées de groupe ACL et d’utilisateur, en lui accordant l’accès si un mécanisme l’autorise et en refusant l’accès uniquement lorsque toutes les vérifications échouent.

À propos des autorisations hiérarchiques ACL (liste de contrôle d'accès)

Les indexeurs et les sources de connaissances peuvent récupérer des affectations de contrôle d'accès à partir du conteneur spécifié et de tous les répertoires menant à chaque fichier en suivant le flux d’évaluation d’accès hiérarchique ADLS Gen2. Les listes d’accès effectives finales pour chaque fichier sont calculées et les différentes catégories d’accès sont indexées dans les champs d’index correspondants.

Par exemple, dans les scénarios courants ADLS Gen2 liés aux autorisations avec le chemin de fichier /Oregon/Portland/Data.txt.

Opération / Oregon/ Portland/ Data.txt
Lire Data.txt --X --X --X R--

L’indexeur ou la source de connaissances collecte des listes de contrôle d’accès à partir de chaque conteneur et répertoire. Il détermine ensuite l’accès effectif aux niveaux inférieurs et continue jusqu’à ce qu’il résolve les autorisations pour chaque fichier.

/ assigned access vs Oregon/ assigned access
  => Oregon/ effective access vs Portland/ assigned access
    => Portland/ effective access vs Data.txt assigned access
      => Data.txt effective access

Configurer ADLS Gen2

Un indexeur ou une source de connaissances peut récupérer des listes de contrôle d’accès sur un compte de stockage si les critères suivants sont remplis. Pour plus d’informations sur les affectations de contrôle d'accès (ACL), consultez les affectations de contrôle d'accès ADLS Gen2.

Autorisation

Pour l’exécution de l’indexeur, votre identité de service de recherche doit disposer de l’autorisation Lecteur de données Blob de stockage.

Si vous effectuez des tests localement, vous devriez également disposer d'une assignation de rôle Lecteur de données Blob de stockage. Pour plus d’informations, consultez Connect to stockage Azure using a managed identity.

Autorisations de conteneur racine :

  1. Attribuez tous les ensembles Group et User (principaux de sécurité) au conteneur racine / avec les autorisations Read et Execute.

  2. Vérifiez que les deux Read et Execute sont ajoutés en tant qu'« autorisations par défaut » afin qu’elles se propagent automatiquement aux fichiers et répertoires nouvellement créés.

Propager les autorisations vers le bas de la hiérarchie de fichiers

Bien que les nouveaux répertoires et fichiers héritent des autorisations, les répertoires et fichiers existants n’héritent pas automatiquement de ces affectations.

Utilisez l’outil ADLS Gen2 pour appliquer des listes de contrôle d’accès de manière récursive pour la propagation des affectations sur le contenu existant. Cet outil propage les affectations de liste de contrôle d’accès du conteneur racine à tous les répertoires et fichiers sous-jacents.

Supprimer les autorisations excédentaires

Après avoir appliqué des listes de contrôle d’accès de manière récursive, passez en revue les autorisations pour chaque répertoire et fichier.

Supprimez tout Group ou User ensemble qui ne doit pas avoir accès à des répertoires ou fichiers spécifiques. Par exemple, supprimez User2 sur le dossier Portland/, et pour le dossier Idaho, supprimez Group2 et User2 de ses affectations, et ainsi de suite.

Exemple de structure des affectations ACL

Voici un diagramme de la structure d'attribution ACL pour la hiérarchie de répertoires fictifs dans la documentation ADLS Gen2.

Diagramme d'une structure d'affectation ACL.

Mises à jour des affectations des listes de contrôle d'accès avec le temps

Au fil du temps, à mesure que toutes les nouvelles affectations de liste de contrôle d’accès sont ajoutées ou modifiées, répétez les étapes précédentes pour garantir l’alignement approprié de la propagation et des autorisations. Les autorisations mises à jour dans ADLS Gen2 sont mises à jour dans l’index de recherche lorsque vous réingèrez le contenu à l’aide de l’indexeur ou de la source de connaissances.

Rappelez-vous que le service de recherche doit avoir :

Autorisation

Pour l’indexation, le client qui émet l’appel d’API doit disposer de l’autorisation Contributeur du service de recherche pour créer des objets, l’autorisation Contributeur aux données d’index de recherche pour effectuer l’importation de données et le lecteur de données d’index de recherche pour interroger un index.

Si vous effectuez des tests localement, vous devez disposer des mêmes attributions de rôles. Pour plus d'informations, consultez Connexion à Recherche Azure AI en utilisant des rôles.

Configurer une source de connaissances

Si vous utilisez une source de connaissances, les définitions de la source de connaissances sont utilisées pour générer un pipeline d’indexation complet (indexeur, source de données et index). Les affectations d'ACL sont détectées et automatiquement incluses dans l'index généré. Il n’est pas nécessaire de modifier l’un des objets générés si vous souhaitez l’héritage d’autorisation dans votre contenu indexé.

Points clés sur la configuration qui le rendent adapté à ce scénario :

  • isADLSGen2 a la valeur true, répondant aux exigences de la source de données pour ce scénario.
  • ingestionPermissionOptions spécifie les ID d’utilisateur et de groupe.
# Create / Update Azure Blob Knowledge Source
###
PUT {{url}}/knowledgesources/azure-blob-ks?api-version=2026-08-01-preview
api-key: {{key}}
Content-Type: application/json
 
{
    "name": "azure-blob-ks",
    "kind": "azureBlob",
    "description": "A sample azure blob knowledge source",
    "azureBlobParameters": {
        "connectionString": "{{blob-connection-string}}",
        "containerName": "blobcontainer",
        "folderPath": null,
        "isADLSGen2": true,
        "ingestionParameters": {
            "identity": null,
            "embeddingModel": {
                "kind": "azureOpenAI",
                "azureOpenAIParameters": {
                    "deploymentId": "text-embedding-3-large",
                    "modelName": "text-embedding-3-large",
                    "resourceUri": "{{aoai-endpoint}}",
                    "apiKey": "{{aoai-key}}"
                }
            },
            "chatCompletionModel": null,
            "disableImageVerbalization": true,
            "ingestionSchedule": null,
             "ingestionPermissionOptions": [
                "userIds","groupIds"
                           ],
            "contentExtractionMode": "minimal",
            "aiServices": {
                "uri": "{{ai-endpoint}}",
                "apiKey": "{{ai-key}}"
            }
        }
    }
}
###

Configurer l’indexation basée sur l’indexeur

Si vous utilisez un indexeur, configurez-le, la source de données et l’index pour extraire les métadonnées d’autorisation à partir d’objets blob ADLS Gen2.

Créer la source de données

Cette section complète les données Index à partir d'ADLS Gen2 avec des informations spécifiques à l'ingestion des autorisations en même temps que le contenu du document dans un index Recherche Azure AI.

  • Le type de source de données doit être adlsgen2.

  • La source de données doit avoir indexerPermissionOptions avec userIds, groupIdset/ou rbacScope.

Exemple JSON avec identité managée par le système :

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

Exemple de schéma JSON avec une identité managée par l’utilisateur dans le chaîne de connexion :

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

Créer des champs d’autorisation dans l’index

Dans Recherche Azure AI, vérifiez que votre index contient des définitions de champs pour les métadonnées d’autorisation. Les métadonnées d’autorisation peuvent être indexées quand indexerPermissionOptions elles sont spécifiées dans la définition de la source de données.

Attributs de schéma recommandés pour ACL (UserIds, GroupIds) et étendue RBAC :

  • Champ Identificateur de l'utilisateur (ID) avec la valeur userIds permissionFilter.
  • Champ Group IDs avec la valeur groupIds du filtre de permissions.
  • Champ d’étendue RBAC avec la valeur de permissionFilter rbacScope.
  • Propriété permissionFilterOption permettant d’activer le filtrage au moment de l’interrogation.
  • Utiliser des champs de chaîne pour les métadonnées d’autorisation
  • Définissez la filterable valeur true sur tous les champs.

Notez que retrievable est faux. Vous pouvez le définir lors du développement pour vérifier que les autorisations sont présentes, mais n’oubliez pas de revenir à false avant de le déployer dans un environnement de production.

Exemple de schéma JSON :

{
  ...
  "fields": [
    ...
    { "name": "UserIds", "type": "Collection(Edm.String)", "permissionFilter": "userIds", "filterable": true, "retrievable": false },
    { "name": "GroupIds", "type": "Collection(Edm.String)", "permissionFilter": "groupIds", "filterable": true, "retrievable": false },
    { "name": "RbacScope", "type": "Edm.String", "permissionFilter": "rbacScope", "filterable": true, "retrievable": false }
  ],
  "permissionFilterOption": "enabled"
}

Configurer l’indexeur

Les mappages de champs au sein d’un indexeur définissent le chemin des données sur les champs d’un index. Les champs cibles et de destination qui varient selon le nom ou le type de données nécessitent un mappage de champ explicite. Les champs de métadonnées suivants dans ADLS Gen2 peuvent avoir besoin de mappages de champs si vous modifiez le nom du champ :

  • metadata_user_ids (Collection(Edm.String)) : liste des ID d’utilisateur ACL.
  • metadata_group_ids (Collection(Edm.String)) : liste des ID de groupe ACL.
  • metadata_rbac_scope (Edm.String) : étendue RBAC du conteneur.

Spécifiez fieldMappings dans l’indexeur pour router les métadonnées d’autorisation vers les champs cibles pendant l’indexation.

Exemple de schéma JSON :

{
  ...
  "fieldMappings": [
    { "sourceFieldName": "metadata_user_ids", "targetFieldName": "UserIds" },
    { "sourceFieldName": "metadata_group_ids", "targetFieldName": "GroupIds" },
    { "sourceFieldName": "metadata_rbac_scope", "targetFieldName": "RbacScope" }
  ]
}

Recommandations et meilleures pratiques

  • Planifiez attentivement la structure de dossiers ADLS Gen2 avant de créer des dossiers.

  • Organisez les identités en groupes et utilisez des groupes dans la mesure du possible, plutôt que d’accorder l’accès directement à des utilisateurs individuels. L’ajout continu d’utilisateurs individuels au lieu d’appliquer des groupes augmente le nombre d’entrées de contrôle d’accès qui doivent être suivies et évaluées. Le non-respect de cette meilleure pratique peut entraîner des mises à jour de métadonnées de sécurité plus fréquentes requises pour l’index car ces métadonnées changent, provoquant des retards accrus et des inefficacités dans le processus d’actualisation.

Synchroniser les autorisations entre le contenu indexé et le contenu source

L’activation de l’enrichissement ACL ou RBAC sur un indexeur ne fonctionne automatiquement que dans deux situations :

  • La première exécution complète de l’indexeur/analyse des données : toutes les métadonnées d’autorisation qui existent à ce moment-là pour chaque document sont capturées.

  • Les nouveaux documents ajoutés après l’activation de la prise en charge ACL/RBAC : leurs informations ACL/RBAC sont ingérées avec leur contenu.

Si vous modifiez les autorisations de document, telles que l’ajout d’un utilisateur à une liste de contrôle d’accès ou la mise à jour d’une attribution de rôle, la modification n’apparaît pas dans l’indexeur, sauf si vous demandez à l’indexeur d’analyser à nouveau les métadonnées d’autorisation du document.

Choisissez l’un des mécanismes suivants, en fonction du nombre d’éléments modifiés :

Étendue de votre modification Meilleur déclencheur Ce qui est actualisé lors de la prochaine exécution
Un seul blob ou seulement une poignée Mettre à jour l’horodatage de Last-Modified l’objet blob dans le stockage (toucher le fichier) Contenu du document et métadonnées ACL/RBAC
Des dizaines à des milliers de blobs Appelez /resetdocs (préversion) et listez les clés de document affectées. Contenu du document et métadonnées ACL/RBAC
Source de données entière Appelez /resync (aperçu) avec l’option paramètres d'autorisation. Seulement Métadonnées ACL/RBAC (le contenu n’est pas touché)

Exemple d’API Resetdocs (préversion) :

POST https://{service}.search.windows.net/indexers/{indexer}/resetdocs?api-version=2026-08-01-preview
{ 
  "documentKeys": [ 
    "1001", 
    "4452" 
  ]
}

Exemple d’API Resync (préversion) :

POST https://{service}.search.windows.net/indexers/{indexer}/resync?api-version=2026-08-01-preview
{ 
  "options": [ 
    "permissions" 
  ] 
} 

Important

Si vous modifiez les autorisations sur les documents indexés et que vous ne déclenchez pas l’un des mécanismes ci-dessus, l’index de recherche continue de servir des données ACL ou RBAC obsolètes. Les nouveaux documents continuent d’être indexés automatiquement ; aucun déclencheur manuel n’est nécessaire pour eux.

Suivi des suppressions

Pour gérer efficacement la suppression d’objets blob, assurez-vous que le suivi de la suppression est activé avant l’exécution de votre indexeur pour la première fois. Cette fonctionnalité permet au système de détecter les objets blob supprimés dans votre source et de les supprimer de l’index.