Sécuriser l’accès aux données dans Azure Cosmos DB

S’APPLIQUE À : NoSQL

Cet article fournit une vue d’ensemble du contrôle d’accès aux données dans Azure Cosmos DB.

Azure Cosmos DB offre trois moyens de contrôler l’accès à vos données.

Type de contrôle d’accès Caractéristiques
Clés principales/secondaires Secret partagé autorisant toutes les opérations de gestion ou de données. Il offre des variantes en lecture-écriture et en lecture seule.
Contrôle d’accès en fonction du rôle (RBAC) Modèle d’autorisation précis basé sur les rôles, utilisant les identités Microsoft Entra pour l’authentification.
Jetons de ressource Modèle d’autorisation précis basé sur les autorisations et les utilisateurs natifs d’Azure Cosmos DB.

Clés primaire/secondaire

Les clés primaire/secondaire donnent accès à toutes les ressources administratives du compte de base de données. Chaque compte comporte deux clés : une clé primaire et une clé secondaire. L’objectif de ces paires de clés est de vous permettre de regénérer ou de permuter les clés, ce qui offre un accès permanent à votre compte et à vos données. Pour en savoir plus sur les clés primaires/secondaires, consultez Vue d’ensemble de la sécurité des bases de données dans Azure Cosmos DB.

Pour afficher vos clés de compte, sélectionnez Clés dans le menu de gauche. Sélectionnez ensuite l’icône Afficher à la droite de chaque clé. Sélectionnez le bouton Copier pour copier la clé sélectionnée. Vous pourrez les masquer par la suite en sélectionnant la même icône par clé, ce qui met à jour l’icône en la transformant en bouton Masquer .

Screenshot of the View account key for Azure Cosmos DB.

Rotation et régénération des clés

Notes

La section suivante décrit les étapes permettant d’effectuer la rotation et de régénérer des clés pour l’API NoSQL. Si vous utilisez une autre API, consultez les sections API MongoDB, API Cassandra, API Gremlin ou API Table.

Pour surveiller les mises à jour et la régénération des clés de votre compte, consultez Surveiller votre compte Azure Cosmos DB pour les mises à jour et la régénération de clés.

Le processus de rotation et de régénération des clés est simple. Tout d’abord, assurez-vous que votre application utilise régulièrement la clé primaire ou la clé secondaire pour accéder à votre compte Azure Cosmos DB. Suivez ensuite la procédure décrite ci-après.

  1. Accédez à votre compte Azure Cosmos DB dans le portail Azure.

  2. Sélectionnez Clés dans le menu de gauche, puis sélectionnez Régénérer la clé secondaire à partir de l’ellipse sur la droite de votre clé secondaire.

    Screenshot that shows the Azure portal showing how to regenerate the secondary key.

  3. Vérifiez que la nouvelle clé secondaire fonctionne de façon cohérente par rapport à votre compte Azure Cosmos DB. La régénération des clés peut prendre de moins d’une minute à plusieurs heures selon la taille du compte Azure Cosmos DB.

  4. Remplacez votre clé primaire par votre clé secondaire dans votre application.

  5. Revenez au portail Azure et déclenchez la régénération de la clé primaire.

    Screenshot that shows the Azure portal showing how to regenerate the primary key.

Exemple de code utilisant une clé primaire

L’exemple de code suivant montre comment utiliser une clé primaire et un point de terminaison de compte Azure Cosmos DB pour instancier un CosmosClient :

// Read the Azure Cosmos DB endpointUrl and authorization keys from config.
// These values are available from the Azure portal on the Azure Cosmos DB account blade under "Keys".
// Keep these values in a safe and secure location. Together they provide Administrative access to your Azure Cosmos DB account.

private static readonly string endpointUrl = ConfigurationManager.AppSettings["EndPointUrl"];
private static readonly string authorizationKey = ConfigurationManager.AppSettings["AuthorizationKey"];

CosmosClient client = new CosmosClient(endpointUrl, authorizationKey);

Contrôle d’accès en fonction du rôle

Azure Cosmos DB expose un système RBAC intégré, qui vous permet :

  • Authentifier vos requêtes de données avec une identité Microsoft Entra.
  • D’autoriser vos demandes de données avec un modèle d’autorisation précis basé sur les rôles.

Le contrôle RBAC d’Azure Cosmos DB est la méthode de contrôle d’accès idéale dans les situations où :

  • Vous ne voulez pas utiliser un secret partagé comme la clé principale et vous préférez vous appuyer sur un mécanisme d’authentification basé sur des jetons.
  • Vous voulez utiliser des identités Microsoft Entra pour authentifier vos requêtes.
  • Vous avez besoin d’un modèle d’autorisation précis pour limiter rigoureusement les opérations de base de données que vos identités sont autorisées à effectuer.
  • Vous voulez matérialiser vos stratégies de contrôle d’accès en tant que « rôles » que vous pouvez affecter à plusieurs identités.

Pour plus d’informations sur le contrôle RBAC d’Azure Cosmos DB, consultez Configurer le contrôle d’accès en fonction du rôle pour votre compte Azure Cosmos DB.

Pour plus d’informations et pour obtenir des exemples de code pour configurer RBAC pour l’API Azure Cosmos DB for MongoDB, consultez Configurer le contrôle d’accès en fonction du rôle pour votre API Azure Cosmos DB for MongoDB.

Jetons de ressource

Les jetons de ressource fournissent un accès aux ressources d’application au sein d’une base de données. Jetons de ressource :

  • Fournissez l’accès à des conteneurs spécifiques, clés de partition, documents et pièces jointes.
  • Sont créés lorsqu’un utilisateur dispose des autorisations sur une ressource spécifique.
  • Sont recréés lorsqu’une ressource d’autorisation est exécutée par un appel POST, GET ou PUT.
  • Utilisent un jeton de ressource de hachage créé spécifiquement pour l’utilisateur, la ressource et les autorisations.
  • Sont liés à une période de validité personnalisable. La durée de validité par défaut est d’une heure. La durée de vie du jeton pourrait cependant être définie de manière explicite (24 heures maximum).
  • Évitent d’avoir à divulguer la clé primaire, pour plus de sécurité.
  • Permettent aux clients de lire, d’écrire et de supprimer des ressources dans le compte Azure Cosmos DB en fonction des autorisations qui leur ont été accordées.

Vous pouvez utiliser un jeton de ressource (en créant des utilisateurs et des autorisations Azure Cosmos DB) lorsque vous voulez donner accès aux ressources dans votre compte Azure Cosmos DB à un client qui ne peut pas être approuvé avec la clé primaire.

Les jetons de ressource Azure Cosmos DB permettent aux clients de lire, d’écrire et de supprimer des ressources dans votre compte Azure Cosmos DB de manière sécurisée, en fonction des autorisations qui vous ont été accordées et sans clé primaire ni clé en lecture seule.

Voici un modèle de conception standard dans le cadre duquel des jetons de ressource pourraient être demandés, générés et fournis aux clients :

  1. Un service de niveau intermédiaire est configuré pour servir une application mobile pour partager les photos de l'utilisateur.

  2. Le service de niveau intermédiaire détient la clé primaire du compte Azure Cosmos DB.

  3. L’application photo est installée sur les appareils mobiles des utilisateurs.

  4. Lors de la connexion, l’application photo établit l’identité de l’utilisateur avec le service de niveau intermédiaire. Ce mécanisme d'identification dépend totalement de l'application.

  5. Une fois l’identité établie, le service de niveau intermédiaire demande des autorisations en fonction de l’identité.

  6. Le service de niveau intermédiaire renvoie un jeton de ressource à l'application du téléphone.

  7. Cette dernière peut continuer à utiliser le jeton de ressource pour accéder directement aux ressources Azure Cosmos DB avec les autorisations définies et pendant l’intervalle autorisé par le jeton de ressource.

  8. À expiration du jeton de ressource, les demandes suivantes reçoivent une exception non autorisée 401. L’application du téléphone établit alors de nouveau l’identité de l’utilisateur et demande un nouveau jeton de ressource.

    Screenshot that shows an Azure Cosmos DB resource tokens workflow.

La génération et la gestion des jetons de ressource sont assurées par les bibliothèques clientes Azure Cosmos DB natives. Toutefois, si vous utilisez REST, vous devez construire les en-têtes de requête/d’authentification. Pour plus d’informations sur la création d’en-têtes d’authentification pour REST, consultez Contrôle d’accès aux ressources Azure Cosmos DB ou le code source de notre Kit de développement logiciel (SDK) .NET ou Kit de développement logiciel (SDK) Node.js.

Pour obtenir un exemple de service de niveau intermédiaire utilisé pour générer ou répartir les jetons de ressource, consultez l’application ResourceTokenBroker.

Utilisateurs

Les utilisateurs d’Azure Cosmos DB sont associés à une base de données Azure Cosmos DB. Chaque base de données peut contenir zéro ou plusieurs utilisateurs Azure Cosmos DB. L’exemple de code suivant indique comment créer un utilisateur Azure Cosmos DB à l’aide du Kit de développement logiciel (SDK) Azure Cosmos DB .NET v3.

// Create a user.
Database database = client.GetDatabase("SalesDatabase");
User user = await database.CreateUserAsync("User 1");

Remarque

Chaque utilisateur Azure Cosmos DB dispose d’une méthode ReadAsync() qui vous permet de récupérer la liste des autorisations qui lui sont associées.

Autorisations

Une ressource d’autorisation est associée à un utilisateur et affectée à une ressource spécifique. Chaque utilisateur peut contenir zéro, une ou plusieurs autorisations. Une ressource d’autorisation donne accès à un jeton de sécurité dont l’utilisateur a besoin lorsqu’il tente d’accéder à un conteneur ou à des données spécifiques dans une clé de partition spécifique. Il existe deux niveaux d’accès disponibles qui pourraient être fournis par une ressource d’autorisation :

  • Tout : l’utilisateur dispose de toutes les autorisations sur la ressource.
  • Lecture : l’utilisateur peut uniquement lire le contenu de la ressource, mais il ne peut pas procéder à des opérations d’écriture, de mise à jour ou de suppression au niveau de la ressource.

Remarque

Pour exécuter des procédures stockées, l’utilisateur doit disposer de toutes les autorisations sur le conteneur dans lequel la procédure stockée est exécutée.

Si les journaux de diagnostic sur les demandes de plan de données sont activés, les deux propriétés suivantes correspondant à l’autorisation sont journalisées :

  • resourceTokenPermissionId : cette propriété indique l’ID d’autorisation du jeton de ressource que vous avez spécifié.

  • resourceTokenPermissionMode : cette propriété indique le mode d’autorisation que vous avez défini lorsque vous avez créé le jeton de ressource. Le mode d’autorisation peut avoir des valeurs telles que Tout ou Lecture.

Exemple de code pour créer une autorisation

L’exemple de code suivant indique comment créer une ressource d’autorisation, lire le jeton de ressource de la ressource d’autorisation et associer les autorisations à l’utilisateur que vous venez de créer.

// Create a permission on a container and specific partition key value
Container container = client.GetContainer("SalesDatabase", "OrdersContainer");
await user.CreatePermissionAsync(
    new PermissionProperties(
        id: "permissionUser1Orders", 
        permissionMode: PermissionMode.All, 
        container: container,
        resourcePartitionKey: new PartitionKey("012345")));

Exemple de code pour l’autorisation de lecture de l’utilisateur

L’extrait de code suivant indique comment récupérer l’autorisation associée à l’utilisateur que vous avez créé et instancier un nouveau CosmosClient pour l’utilisateur, limité à une clé de partition unique.

// Read a permission, create user client session.
Permission permission = await user.GetPermission("permissionUser1Orders").ReadAsync();

CosmosClient client = new CosmosClient(accountEndpoint: "MyEndpoint", authKeyOrResourceToken: permission.Resource.Token);

Différences entre le contrôle RBAC et les jetons de ressource

Objet RBAC Jetons de ressource
Authentification Avec Microsoft Entra ID. Basé sur les utilisateurs Azure Cosmos DB natifs.
L’intégration des jetons de ressource à Microsoft Entra ID demande plus de travail pour établir un pont entre les identités Microsoft Entra et les utilisateurs Azure Cosmos DB.
Autorisation Basée sur les rôles : les définitions de rôle mappent les actions autorisées et peuvent être attribuées à plusieurs identités. Basée sur les autorisations : pour chaque utilisateur Azure Cosmos DB, vous devez affecter des autorisations d’accès aux données.
Étendue des jetons Un jeton Microsoft Entra contient l’identité du demandeur. Cette identité est comparée à toutes les définitions de rôles affectées pour accorder l’autorisation. Un jeton de ressource contient l’autorisation accordée à un utilisateur Azure Cosmos DB spécifique sur une ressource Azure Cosmos DB spécifique. Les demandes d’autorisation sur différentes ressources pourraient nécessiter différents jetons.
Actualisation des jetons Le jeton Microsoft Entra est actualisé automatiquement par les kits SDK Azure Cosmos DB quand il expire. L’actualisation du jeton de ressource n’est pas prise en charge. Quand un jeton de ressource expire, un nouveau jeton doit être émis.

Ajouter des utilisateurs et attribuer des rôles

Pour ajouter l’accès en lecture aux comptes Azure Cosmos DB à votre compte d’utilisateur, demandez à un propriétaire d’abonnement d’effectuer les étapes suivantes dans le portail Azure.

  1. Ouvrez le portail Azure et sélectionnez votre compte Azure Cosmos DB.

  2. Sélectionnez Contrôle d’accès (IAM) .

  3. Sélectionnez Ajouter>Ajouter une attribution de rôle pour ouvrir la page Ajouter une attribution de rôle.

  4. Attribuez le rôle suivant. Pour connaître la procédure détaillée, consultez Attribuer des rôles Azure à l’aide du portail Azure.

    Paramètre Valeur
    Role Lecteur de compte Cosmos DB.
    Attribuer l’accès à Utilisateur, groupe ou principal du service.
    Membres Utilisateur, groupe ou application dans votre annuaire, auxquels accorder l’accès.

    Screenshot that shows the Add role assignment page in the Azure portal.

L’entité peut désormais lire les ressources Azure Cosmos DB.

Supprimer ou exporter des données utilisateur

Le service de base de données Azure Cosmos DB vous permet de rechercher, de sélectionner, de modifier et de supprimer des données situées dans votre base de données ou vos conteneurs. Il est de votre responsabilité d’utiliser les API fournies et de définir la logique requise pour rechercher et effacer les données personnelles si nécessaire.

Chaque API multimodèle (SQL, MongoDB, Gremlin, Cassandra ou Table) fournit différents kits SDK de langage qui contiennent des méthodes permettant de rechercher et de supprimer des données en fonction de prédicats personnalisés. Vous pouvez également activer la fonctionnalité de durée de vie (TTL) pour supprimer automatiquement les données après une période spécifiée, sans frais supplémentaires.

Remarque

Pour plus d’informations sur l’affichage ou la suppression des données personnelles, consultez Requêtes DSR (droits de la personne concernée) Azure pour le RGPD. Pour plus d’informations sur le Règlement général sur la protection des données (RGPD), consultez la section relative au RGPD du Centre de gestion de la confidentialité de Microsoft et la section relative au RGPD du Portail d’approbation de services.

Étapes suivantes