Configurer des clés gérées par le client pour le chiffrement des données dans le service Azure AI Search

Par défaut, le service de recherche Azure AI chiffre automatiquement les données au repos avec des clés gérées par le service. Si vous avez besoin de davantage de protection, vous pouvez compléter le chiffrement par défaut avec une couche de chiffrement supplémentaire à l’aide de clés que vous créez et gérez dans Azure Key Vault.

Cet article vous guide tout au long des étapes de configuration du chiffrement à l’aide de clés gérées par le client (CMK) ou à l’aide de vos propres clés (BYOK). Voici quelques points à retenir :

  • Le chiffrement CMK est utilisé sur des objets individuels. Si vous avez besoin d’une clé CMK dans votre service de recherche, définissez une stratégie d’application.

  • Le chiffrement CMK dépend d’Azure Key Vault. Vous pouvez créer vos propres clés de chiffrement et les stocker dans un coffre de clés, ou utiliser les API d’Azure Key Vault pour générer des clés de chiffrement. Azure Key Vault doit être dans le même abonnement et locataire qu’Azure AI Recherche. Azure AI Search récupère votre clé managée en vous connectant via un système ou une identité managée par l’utilisateur. Ce comportement nécessite que les deux services partagent le même locataire.

  • Le chiffrement avec clé gérée par le client devient opérationnel lorsqu’un objet est créé. Vous ne pouvez pas chiffrer des objets qui existent déjà. Le chiffrement avec clé gérée par le client se produit chaque fois qu’un objet est enregistré sur le disque, que ce soit des données au repos pour un stockage à long terme ou des données temporaires pour un stockage à court terme. Avec la clé gérée par le client, le disque ne voit jamais de données non chiffrées.

Remarque

Si un index est chiffré par CMK, il est accessible uniquement si le service de recherche a accès à la clé. Si l’accès est révoqué, l’index est inutilisable et le service ne peut pas être mis à l’échelle tant que l’index n’est pas supprimé ou que l’accès à la clé n’est pas restauré.

Objets chiffrés avec clé gérée par le client

Les objets qui peuvent être chiffrés incluent des index, des listes de synonymes, des indexeurs, des sources de données et des ensembles de compétences. Le chiffrement étant coûteux à déchiffrer en termes de ressources informatiques, seul le contenu sensible est chiffré.

Le chiffrement est effectué sur le contenu suivant :

  • tout le contenu dans les index et les listes de synonymes, y compris les descriptions.

  • Pour les indexeurs, les sources de données et les ensembles de compétences, seuls les champs qui stockent les chaînes de connexion, les descriptions, les clés et les entrées utilisateur sont chiffrés. Par exemple, les ensembles de compétences ont des clés Azure AI services et certaines compétences acceptent les entrées utilisateur, telles que les entités personnalisées. Dans les deux cas, les clés et les entrées utilisateur dans les compétences sont chiffrées.

Double chiffrement complet

Lorsque vous introduisez le chiffrement avec clé gérée par le client, vous chiffrez le contenu deux fois. Pour les objets et les champs indiqués dans la section précédente, le contenu est d’abord chiffré avec votre clé gérée par le client, puis avec la clé gérée par Microsoft. Le contenu est doublement chiffré sur les disques de données pour le stockage à long terme et sur les disques temporaires utilisés pour le stockage à court terme.

L’activation du chiffrement par CMK a pour effet d’augmenter la taille de l’index et de dégrader les performances des requêtes. Sur la base des observations effectuées à ce jour, vous pouvez vous attendre à une augmentation de 30 à 60 % des temps de requête, même si les performances réelles varient en fonction de la définition d’index et des types de requêtes. En raison de la baisse des performances, nous vous recommandons d’activer cette fonctionnalité uniquement sur les index qui en ont réellement besoin.

Bien que le double chiffrement soit désormais disponible dans toutes les régions, la prise en charge a été déployée en deux phases :

  • Le premier déploiement a eu lieu le 1er août 2020 et incluait les cinq régions répertoriées ci-dessous. Les services de recherche créés dans les régions suivantes ont pris en charge la clé gérée par le client pour les disques de données, mais pas les disques temporaires :

    • USA Ouest 2
    • USA Est
    • États-Unis - partie centrale méridionale
    • Gouvernement américain - Virginie
    • Gouvernement des États-Unis – Arizona
  • Le deuxième déploiement a eu lieu le 13 mai 2021 et a ajouté le chiffrement pour les disques temporaires et le chiffrement avec clé gérée par le client étendu à toutes les régions prises en charge.

    Si vous utilisez la clé CMK d’un service créé lors du premier déploiement et que vous souhaitez également le chiffrement par CMK sur les disques temporaires, vous devez créer un service de recherche dans la région de votre choix et redéployer votre contenu.

Prérequis

Les outils et services suivants sont utilisés dans ce scénario.

Vous devez disposer d’un client de recherche capable de créer l’objet chiffré. Dans ce code, vous référencez une clé de coffre de clés et des informations d’inscription d’application. Ce code peut être une application fonctionnelle ou un code prototype tel que l’exemple de code C# DotNetHowToEncryptionUsingCMK.

Conseil

Vous pouvez utiliser un client REST ou Azure PowerShell pour créer des index et des mappages de synonymes incluant un paramètre de clé de chiffrement. Vous pouvez également utiliser des SDK Azure. Il n’existe pas de prise en charge du portail pour l’ajout de clé aux index ou aux mappages de synonymes.

Conseils Key Vault

Si vous débutez avec Azure Key Vault, consultez ce guide de démarrage rapide pour en savoir plus sur les tâches de base : Définir et récupérer un secret depuis Azure Key Vault à l’aide de PowerShell. Voici quelques conseils pour l’utilisation de Key Vault :

  • Utilisez autant de coffres de clés que vous le souhaitez. Les clés gérées peuvent se trouver dans différents coffres de clés. Un service de recherche peut posséder plusieurs objets chiffrés, chacun chiffré avec des clés de chiffrement gérées par le client et stockées dans différents coffres de clés.

  • Activez la journalisation sur Key Vault afin de pouvoir surveiller l’utilisation de clé.

  • Veillez à suivre des procédures strictes lors de la rotation régulière des clés de coffre de clés et des secrets et inscriptions d’application Active Directory. Mettez toujours à jour tout le contenu chiffré pour utiliser les nouveaux secrets et les nouvelles clés avant de supprimer les anciens et les anciennes. Si vous omettez cette étape, votre contenu ne peut pas être déchiffré.

1 - Activer la protection contre le vidage :

En tant que première étape, assurez-vous que le soft-delete et la protection contre les purges sont activés dans le coffre de clés. En raison de la nature du chiffrement avec des clés gérées par le client, personne ne peut récupérer vos données en cas de suppression de votre clé Azure Key Vault.

Pour éviter la perte de données résultant de suppressions accidentelles d’Azure Key Vault, vous devez activer la suppression réversible et la protection contre le vidage sur le coffre de clés. La suppression réversible étant activée par défaut, vous ne rencontrerez des problèmes que si vous l’avez désactivée intentionnellement. Par défaut, la protection contre le vidage n’est pas activée, mais elle est requise pour le chiffrement avec clé gérée par le client dans la recherche Azure AI.

Vous pouvez définir les deux propriétés à l’aide du portail ou en utilisant des commandes PowerShell ou Azure CLI.

  1. Connectez-vous au portail Azure et ouvrez la page de présentation de votre coffre de clés.

  2. Sur la page Vue d’ensemble, sous Essentials, activez les options Suppression réversible et Protection contre le vidage.

2 – Créer une clé dans Key Vault

Ignorez la génération de clé si vous avez déjà une clé dans Azure Key Vault que vous souhaitez utiliser, mais collectez l’identificateur de clé. Vous avez besoin de ces informations lors de la création d’un objet chiffré.

  1. Connectez-vous au portail Azure et ouvrez la page de présentation de votre coffre de clés.

  2. Sélectionnez Clés sur la gauche, puis sélectionnez + Générer/importer.

  3. Dans le volet Créer une clé, dans la liste Options, choisissez la méthode que vous voulez utiliser pour créer une clé. Vous pouvez Générer une nouvelle clé, Charger une clé existante ou utiliser Restaurer la sauvegarde pour sélectionner une sauvegarde d’une clé.

  4. Entrez un nom pour votre clé et sélectionnez éventuellement d’autres propriétés de clé.

  5. Sélectionnez Créer pour démarrer le déploiement.

  6. Sélectionnez la clé, sélectionnez la version actuelle, puis notez l’identificateur de clé. Il se compose de l’URI de la valeur de la clé, du nom de la cléet de la version de la clé. Vous avez besoin de l’identificateur pour définir un index chiffré dans Recherche Azure AI.

    Créer une clé de coffre de clés

3 - Créer un principal de sécurité

Vous avez plusieurs options pour accéder à la clé de chiffrement au moment de l’exécution. L’approche la plus simple consiste à récupérer la clé à l’aide de l’identité managée et des autorisations de votre service de recherche. Vous pouvez utiliser une identité managée par le système ou l’utilisateur. Cette approche vous permet d’omettre les étapes d’inscription des applications et des secrets d’application, et simplifie la définition de la clé de chiffrement.

Vous pouvez également créer et inscrire une application Microsoft Entra. Le service de recherche fournit l’ID d’application sur les requêtes.

Une identité managée permet à votre service de recherche de s’authentifier auprès d’Azure Key Vault, sans stocker d’informations d’identification (ApplicationID ou ApplicationSecret) dans le code. Le cycle de vie de ce type d'identité managée est lié au cycle de vie de votre service de recherche, qui ne peut avoir qu'une seule identité managée. Pour plus d’informations sur le fonctionnement des identités managées, consultez Que sont les identités managées pour les ressources Azure ?

  1. Faites de votre service de recherche un service approuvé.

    Activer l’identité managée affectée par le système

Les conditions qui vous empêchent d’adopter cette approche sont les suivantes :

  • Vous ne pouvez pas accorder directement à votre service de recherche des droits d’accès au coffre de clés (par exemple si le service de recherche se trouve dans un autre locataire Microsoft Entra ID que le coffre de clés Azure).

  • Un seul service de recherche est nécessaire pour héberger plusieurs index ou mappages de synonymes chiffrés, chacun utilisant une clé différente d’un coffre de clés différent, où chaque coffre de clés doit utiliser une identité différente pour l’authentification. Étant donné qu’un service de recherche ne peut avoir qu’une seule identité managée, une configuration nécessitant plusieurs identités écarte l’approche simplifiée pour votre scénario.

4 - Accorder des autorisations

Dans cette étape, vous créez une stratégie d’accès dans Key Vault. Cette stratégie donne à l’application que vous avez inscrite auprès de Microsoft Entra ID l’autorisation d’utiliser votre clé gérée par le client.

Les autorisations d’accès peuvent être révoquées à tout moment. Une fois révoqué, tout index ou mappage de synonymes d’un service de recherche qui utilise ce coffre de clés devient inutilisable. Une restauration ultérieure des autorisations d’accès au coffre de clés permet de restaurer l’accès à l’index et au mappage de synonymes. Pour plus d’informations, consultez Accès sécurisé à un coffre de clés.

  1. Connectez-vous au portail Azure et ouvrez la page Vue d’ensemble de votre coffre de clés.

  2. Sélectionnez les stratégies d’accès sur la gauche, puis sélectionnez + Créer pour démarrer l’Assistant Création d’une stratégie d’accès.

    Créer une stratégie d’accès.

  3. Sur la page Autorisations, sélectionnez Obtenir pour les Autorisations de clé, les Autorisations de secret et les Autorisations de certificat. Sélectionnez Ne pas inclure la clé et Inclure la clé pour les opérations de chiffrement ** sur la clé.

    Sélectionnez les autorisations dans la page Autorisations.

  4. Cliquez sur Suivant.

  5. Dans la page Principal, recherchez et sélectionnez le principal de sécurité utilisé par le service de recherche pour accéder à la clé de chiffrement. Il s’agira de l’identité managée par le système ou par l’utilisateur du service de recherche, ou de l’application inscrite.

  6. Sélectionnez Suivant, puis Créer.

Important

Le contenu chiffré dans la recherche Azure AI est configuré pour utiliser une clé Azure Key Vault spécifique avec une version spécifique. Si vous modifiez la clé ou la version, l’index ou le mappage de synonymes doit être mis à jour pour l’utiliser avant de supprimer le précédent, à défaut de quoi, l’index ou le mappage de synonymes deviendra inutilisable. Vous ne pourrez pas déchiffrer le contenu si la clé est perdue.

5 - Chiffrer le contenu

Des clés de chiffrement sont ajoutées lorsque vous créez un objet. Pour ajouter une clé gérée par le client sur un index, une carte de synonymes, un indexeur, une source de données ou des ensembles de compétences, utilisez l'API REST de recherche ou un kit de développement logiciel (SDK) Azure pour créer un objet pour lequel le chiffrement est activé. Le portail n’autorise pas les propriétés de chiffrement lors de la création d’objets.

  1. Appelez les API Create pour spécifier la propriété encryptionKey :

  2. Insérez la construction encryptionKey dans la définition de l’objet. Cette propriété est une propriété de premier niveau, sur le même niveau que le nom et la description. Les exemples REST suivants montrent le placement des propriétés. Si vous utilisez le même coffre, la même clé et la même version, vous pouvez coller la même construction « encryptionKey » dans chaque définition d’objet.

    Le premier exemple montre une propriété « encryptionKey » pour un service de recherche qui se connecte à l’aide d’une identité managée :

    {
      "encryptionKey": {
        "keyVaultUri": "https://demokeyvault.vault.azure.net",
        "keyVaultKeyName": "myEncryptionKey",
        "keyVaultKeyVersion": "eaab6a663d59439ebb95ce2fe7d5f660"
      }
    }
    

    Le deuxième exemple comprend une propriété « accessCredentials ». Celle-ci est nécessaire si vous avez inscrit une application dans Microsoft Entra ID :

    {
      "encryptionKey": {
        "keyVaultUri": "https://demokeyvault.vault.azure.net",
        "keyVaultKeyName": "myEncryptionKey",
        "keyVaultKeyVersion": "eaab6a663d59439ebb95ce2fe7d5f660",
        "accessCredentials": {
          "applicationId": "00000000-0000-0000-0000-000000000000",
          "applicationSecret": "myApplicationSecret"
        }
      }
    }
    

Une fois que vous avez créé l’objet chiffré sur le service de recherche, vous pouvez l’utiliser comme n’importe quel autre objet de ce type. Le chiffrement est transparent pour l’utilisateur et le développeur.

Remarque

Aucune de ces informations sur le coffre de clés n’est considérée comme secrète et peut être facilement récupérée en accédant à la page Azure Key Vault appropriée dans le Portail Azure.

6 - Configurer la stratégie

Les stratégies Azure aident à appliquer les normes organisationnelles et à évaluer la conformité à grande échelle. La recherche Azure AI dispose d’une stratégie intégrée facultative pour l’application de CMK à l’échelle du service.

Dans cette section, vous définissez la stratégie qui définit une norme CMK pour votre service de recherche. Ensuite, vous configurez votre service de recherche pour appliquer cette stratégie.

  1. Accédez à la stratégie intégrée dans votre navigateur web. Sélectionnez Attribuer.

    Capture d’écran de l’attribution de stratégie CMK intégrée.

  2. Configurez l’étendue de la stratégie. Dans la section Paramètres, décochez Afficher uniquement les paramètres... et définissez Effet sur Refuser.

    Lors de l’évaluation de la requête, une requête qui correspond à une définition de stratégie de refus est marquée comme non conforme. En supposant que la norme de votre service est le chiffrement par CMK, « refus » signifie que les requêtes qui ne spécifient pas le chiffrement par CMK ne sont pas conformes.

    Capture d’écran de la définition de l’effet de la stratégie CMK intégrée sur refuser.

  3. Terminez la création de la stratégie.

  4. Appelez Services - Mettre à jour l’API pour activer l’application de la stratégie CMK au niveau du service.

PATCH https://management.azure.com/subscriptions/[subscriptionId]/resourceGroups/[resourceGroupName]/providers/Microsoft.Search/searchServices/[serviceName]?api-version=2022-11-01

{
    "properties": {
        "encryptionWithCmk": {
            "enforcement": "Enabled",
            "encryptionComplianceStatus": "Compliant"
        }
    }
}

Exemples REST

Cette section montre le code JSON pour plusieurs objets afin que vous puissiez voir où trouver la propriété « encryptionKey » dans une définition d’objet.

Chiffrement d’index

Les détails de la création d’un nouvel index via l’API REST se trouvent dans la section Créer un index (API REST), où la seule différence consiste à spécifier les détails de la clé de chiffrement dans la définition de l’index :

{
 "name": "hotels",
 "fields": [
  {"name": "HotelId", "type": "Edm.String", "key": true, "filterable": true},
  {"name": "HotelName", "type": "Edm.String", "searchable": true, "filterable": false, "sortable": true, "facetable": false},
  {"name": "Description", "type": "Edm.String", "searchable": true, "filterable": false, "sortable": false, "facetable": false, "analyzer": "en.lucene"},
  {"name": "Description_fr", "type": "Edm.String", "searchable": true, "filterable": false, "sortable": false, "facetable": false, "analyzer": "fr.lucene"},
  {"name": "Category", "type": "Edm.String", "searchable": true, "filterable": true, "sortable": true, "facetable": true},
  {"name": "Tags", "type": "Collection(Edm.String)", "searchable": true, "filterable": true, "sortable": false, "facetable": true},
  {"name": "ParkingIncluded", "type": "Edm.Boolean", "filterable": true, "sortable": true, "facetable": true},
  {"name": "LastRenovationDate", "type": "Edm.DateTimeOffset", "filterable": true, "sortable": true, "facetable": true},
  {"name": "Rating", "type": "Edm.Double", "filterable": true, "sortable": true, "facetable": true},
  {"name": "Location", "type": "Edm.GeographyPoint", "filterable": true, "sortable": true}
 ],
  "encryptionKey": {
    "keyVaultUri": "https://demokeyvault.vault.azure.net",
    "keyVaultKeyName": "myEncryptionKey",
    "keyVaultKeyVersion": "eaab6a663d59439ebb95ce2fe7d5f660",
    "accessCredentials": {
      "applicationId": "00000000-0000-0000-0000-000000000000",
      "applicationSecret": "myApplicationSecret"
    }
  }
}

Vous pouvez maintenant envoyer la demande de création d'un index, puis commencer à utiliser l'index normalement.

Chiffrement de mappage de synonymes

Créez une carte de synonymes chiffrée en procédant de la manière décrite dans Créer un mappage de synonymes (API REST de la recherche Azure AI). Utilisez la propriété « encryptionKey » pour spécifier la clé de chiffrement à utiliser.

{
  "name" : "synonymmap1",
  "format" : "solr",
  "synonyms" : "United States, United States of America, USA\n
  Washington, Wash. => WA",
  "encryptionKey": {
    "keyVaultUri": "https://demokeyvault.vault.azure.net",
    "keyVaultKeyName": "myEncryptionKey",
    "keyVaultKeyVersion": "eaab6a663d59439ebb95ce2fe7d5f660",
    "accessCredentials": {
      "applicationId": "00000000-0000-0000-0000-000000000000",
      "applicationSecret": "myApplicationSecret"
    }
  }
}

Vous pouvez maintenant envoyer la demande de création d’un mappage de synonymes, puis commencer à utiliser l'index normalement.

Chiffrement de source de données

Créez une source de données chiffrée en utilisant la section Créer une source de données (API REST). Utilisez la propriété « encryptionKey » pour spécifier la clé de chiffrement à utiliser.

{
  "name" : "datasource1",
  "type" : "azureblob",
  "credentials" :
  { "connectionString" : "DefaultEndpointsProtocol=https;AccountName=datasource;AccountKey=accountkey;EndpointSuffix=core.windows.net"
  },
  "container" : { "name" : "containername" },
  "encryptionKey": {
    "keyVaultUri": "https://demokeyvault.vault.azure.net",
    "keyVaultKeyName": "myEncryptionKey",
    "keyVaultKeyVersion": "eaab6a663d59439ebb95ce2fe7d5f660",
    "accessCredentials": {
      "applicationId": "00000000-0000-0000-0000-000000000000",
      "applicationSecret": "myApplicationSecret"
    }
  }
}

Vous pouvez maintenant envoyer la demande de création de la source de données, puis commencer à utiliser celle-ci normalement.

Chiffrement d’ensemble de compétences

Créez un ensemble de compétences chiffré en procédant de la manière décrite dans Créer une API REST Skillset. Utilisez la propriété « encryptionKey » pour spécifier la clé de chiffrement à utiliser.

{
    "name": "skillset1",
    "skills":  [ omitted for brevity ],
    "cognitiveServices": { omitted for brevity },
      "knowledgeStore":  { omitted for brevity  },
    "encryptionKey": (optional) { 
        "keyVaultKeyName": "myEncryptionKey",
        "keyVaultKeyVersion": "eaab6a663d59439ebb95ce2fe7d5f660",
        "keyVaultUri": "https://demokeyvault.vault.azure.net",
        "accessCredentials": {
            "applicationId": "00000000-0000-0000-0000-000000000000",
            "applicationSecret": "myApplicationSecret"}
    }
}

Vous pouvez maintenant envoyer la demande de création de l’ensemble de compétences, puis commencer à utiliser celui-ci normalement.

Chiffrement d’indexeur

Créez un indexeur chiffré en procédant de la manière décrite dans Créer une API REST Indexer. Utilisez la propriété « encryptionKey » pour spécifier la clé de chiffrement à utiliser.

{
  "name": "indexer1",
  "dataSourceName": "datasource1",
  "skillsetName": "skillset1",
  "parameters": {
      "configuration": {
          "imageAction": "generateNormalizedImages"
      }
  },
  "encryptionKey": {
    "keyVaultUri": "https://demokeyvault.vault.azure.net",
    "keyVaultKeyName": "myEncryptionKey",
    "keyVaultKeyVersion": "eaab6a663d59439ebb95ce2fe7d5f660",
    "accessCredentials": {
      "applicationId": "00000000-0000-0000-0000-000000000000",
      "applicationSecret": "myApplicationSecret"
    }
  }
}

Vous pouvez maintenant envoyer la demande de création de l’indexeur, puis commencer à utiliser celui-ci normalement.

Important

Si la propriété « encryptionKey » ne peut pas être ajoutée aux index de recherche ou mappages de synonymes existants, elle peut être mise à jour en fournissant des valeurs différentes pour chacun des trois informations du coffre de clés (par exemple, en mettant à jour la version de la clé). Lorsque vous passez à une nouvelle clé Key Vault ou à une nouvelle version de clé, tout index de recherche ou mappage de synonymes qui utilise la clé doit d’abord être mis à jour pour utiliser la nouvelle clé/version avant de supprimer la clé/version précédente. Si vous ne le faites pas, l'index ou le mappage de synonymes deviendra inutilisable et il ne pourra pas déchiffrer le contenu une fois que l'accès aux clés sera perdu. Cependant, une restauration ultérieure des autorisations d’accès au coffre de clés restaurera l’accès au contenu.

Utiliser des colonnes chiffrées

Avec le chiffrement par clé gérée par le client, vous risquez de remarquer une latence pour l’indexation et les requêtes en raison du travail de chiffrement/déchiffrement supplémentaire. La recherche Azure AI ne journalise pas l’activité de chiffrement, mais vous pouvez surveiller l’accès aux clés par le biais de la journalisation du coffre de clés. Nous vous recommandons d’activer la journalisation dans le cadre de la configuration du coffre de clés.

Une rotation de clés est supposée se produire au fil du temps. Chaque fois que vous voulez opérer une rotation de clés, il est important de suivre cette séquence :

  1. Déterminez la clé utilisée par un index ou un mappage de synonyme.
  2. Créez une clé dans le coffre de clés, mais gardez la clé d’origine disponible.
  3. Mettez à jour les propriétés encryptionKey sur un index ou un mappage de synonymes pour utiliser les nouvelles valeurs. Seuls des objets créés à l’origine avec cette propriété peuvent être mis à jour pour utiliser une autre valeur.
  4. Désactivez ou supprimez la clé précédente dans le coffre de clés. Surveillez l’accès à la clé pour vérifier que la nouvelle clé est utilisée.

Pour des raisons de performances, le service de recherche met en cache la clé pendant plusieurs heures. Si vous désactivez ou supprimez la clé sans en fournir de nouvelle, les requêtes continuent de fonctionner sur une base temporaire jusqu’à ce que le cache expire. Toutefois, une fois que le service de recherche ne peut plus déchiffrer le contenu, vous obtenez le message suivant : « Accès interdit. La clé de requête utilisée a peut-être été révoquée. Réessayez. »

Étapes suivantes

Si vous n’êtes pas familiarisé avec l’architecture de sécurité Azure, passez en revue la documentation sur la sécurité Azure, et en particulier cet article :