Partage via


Configurer le contrôle d'accès basé sur les rôles dans Azure Cosmos DB for MongoDB

S’APPLIQUE À : MongoDB

Cet article concerne le contrôle d’accès en fonction du rôle pour les opérations de plan de données dans Azure Cosmos DB for MongoDB.

Si vous utilisez des opérations de plan de gestion, consultez l’article Contrôle d’accès en fonction du rôle appliqué à vos opérations de plan de gestion.

Azure Cosmos DB for MongoDB expose un système de contrôle d’accès en fonction du rôle (RBAC) intégré qui vous permet d’autoriser vos demandes de données avec un modèle d’autorisation précis basé sur les rôles. Les utilisateurs et les rôles résident dans une base de données et sont gérés à l’aide d’Azure CLI, Azure PowerShell ou Azure Resource Manager (ARM).

Concepts

Ressource

Une ressource est une collection ou une base de données à laquelle nous appliquons des règles de contrôle d’accès.

Privilèges

Les privilèges sont des actions qui peuvent être effectuées sur une ressource spécifique. Par exemple, « accès en lecture à la collection xyz ». Les privilèges sont attribués à un rôle spécifique.

Role

Un rôle a un ou plusieurs privilèges. Les rôles sont attribués aux utilisateurs (zéro ou plus) pour leur permettre d’effectuer les actions définies dans ces privilèges. Les rôles sont stockés dans une seule base de données.

Audit des journaux de diagnostic

Une autre colonne appelée userId a été ajoutée à la table MongoRequests dans la fonctionnalité des diagnostics du portail Azure. Cette colonne identifie l’utilisateur et l’opération du plan de données qu’il a effectué. La valeur de cette colonne est vide si le RBAC n’est pas activé.

Privilèges disponibles

Interrogation et écriture

  • trouver
  • insert
  • suppression
  • update

Changer de flux

  • changeStream

Gestion de bases de données

  • createCollection
  • createIndex
  • dropCollection
  • killCursors
  • killAnyCursor

administration du serveur

  • dropDatabase
  • dropIndex
  • reIndex

Diagnostics

  • collStats
  • dbStats
  • listDatabases
  • listCollections
  • listIndexes

Rôles intégrés

Ces rôles existent déjà sur chaque base de données et n’ont pas besoin d’être créés.

read readWrite dbAdmin dbOwner
changeStream ✅ Oui ✅ Oui ✅ Oui ✅ Oui
collStats ✅ Oui ✅ Oui ✅ Oui ✅ Oui
listCollections ✅ Oui ✅ Oui ✅ Oui ✅ Oui
listIndexes ✅ Oui ✅ Oui ✅ Oui ✅ Oui
createCollection ✖️ Non ✅ Oui ✅ Oui ✅ Oui
createIndex ✖️ Non ✅ Oui ✅ Oui ✅ Oui
dropCollection ✖️ Non ✅ Oui ✅ Oui ✅ Oui
dbStats ✖️ Non ✖️ Non ✅ Oui ✅ Oui
dropDatabase ✖️ Non ✖️ Non ✅ Oui ✅ Oui
reIndex ✖️ Non ✖️ Non ✅ Oui ✅ Oui
find ✅ Oui ✅ Oui ✖️ Non ✅ Oui
killCursors ✅ Oui ✅ Oui ✖️ Non ✅ Oui
dropIndex ✖️ Non ✅ Oui ✅ Oui ✅ Oui
insert ✖️ Non ✅ Oui ✖️ Non ✅ Oui
remove ✖️ Non ✅ Oui ✖️ Non ✅ Oui
update ✖️ Non ✅ Oui ✖️ Non ✅ Oui

Configuration Azure CLI (démarrage rapide)

Nous vous recommandons d’utiliser la commande lors de l’utilisation de Windows.

  1. Vérifiez que la dernière version de l’interface CLI (et non l’extension) est installée localement. Essayez la commande az upgrade.
  2. Connectez-vous à votre abonnement.
az cloud set -n  AzureCloud
az login
az account set --subscription <your subscription ID>
  1. Activez la fonctionnalité RBAC sur votre API existante pour le compte de base de données MongoDB. Vous devez ajouter la capacité « EnableMongoRoleBasedAccessControl » à votre compte de base de données. RBAC peut également être activé via l’onglet Fonctionnalités dans le Portail Azure. Si vous préférez un nouveau compte de base de données, créez un compte de base de données avec la fonctionnalité RBAC définie sur true.
az cosmosdb create -n <account_name> -g <azure_resource_group> --kind MongoDB --capabilities EnableMongoRoleBasedAccessControl
  1. Créez une base de données pour que les utilisateurs se connectent au Portail Azure.
  2. Créez un utilisateur RBAC avec un rôle de lecture intégré.
az cosmosdb mongodb user definition create --account-name <YOUR_DB_ACCOUNT> --resource-group <YOUR_RG> --body {\"Id\":\"<YOUR_DB_NAME>.<YOUR_USERNAME>\",\"UserName\":\"<YOUR_USERNAME>\",\"Password\":\"<YOUR_PASSWORD>\",\"DatabaseName\":\"<YOUR_DB_NAME>\",\"CustomData\":\"Some_Random_Info\",\"Mechanisms\":\"SCRAM-SHA-256\",\"Roles\":[{\"Role\":\"read\",\"Db\":\"<YOUR_DB_NAME>\"}]}

S’authentifier à l’aide de pymongo

from pymongo import MongoClient
client = MongoClient("mongodb://<YOUR_HOSTNAME>:10255/?ssl=true&replicaSet=globaldb&retrywrites=false&maxIdleTimeMS=120000", username="<YOUR_USER>", password="<YOUR_PASSWORD>", authSource='<YOUR_DATABASE>', authMechanism='SCRAM-SHA-256', appName="<YOUR appName FROM CONNECTION STRING IN AZURE PORTAL>")

S’authentifier à l’aide du pilote Node.js

connectionString = "mongodb://" + "<YOUR_USER>" + ":" + "<YOUR_PASSWORD>" + "@" + "<YOUR_HOSTNAME>" + ":10255/" + "<YOUR_DATABASE>" +"?ssl=true&retrywrites=false&replicaSet=globaldb&authmechanism=SCRAM-SHA-256&appname=@" + "<YOUR appName FROM CONNECTION STRING IN AZURE PORTAL>" + "@";
var client = await mongodb.MongoClient.connect(connectionString, { useNewUrlParser: true, useUnifiedTopology: true });

S’authentifier à l’aide du pilote Java

connectionString = "mongodb://" + "<YOUR_USER>" + ":" + "<YOUR_PASSWORD>" + "@" + "<YOUR_HOSTNAME>" + ":10255/" + "<YOUR_DATABASE>" +"?ssl=true&retrywrites=false&replicaSet=globaldb&authmechanism=SCRAM-SHA-256&appname=@" + "<YOUR appName FROM CONNECTION STRING IN AZURE PORTAL>" + "@";
MongoClientURI uri = new MongoClientURI(connectionString);
MongoClient client = new MongoClient(uri);

S’authentifier à l’aide de Mongosh

mongosh --authenticationDatabase <YOUR_DB> --authenticationMechanism SCRAM-SHA-256 "mongodb://<YOUR_USERNAME>:<YOUR_PASSWORD>@<YOUR_HOST>:10255/?ssl=true&replicaSet=globaldb&retrywrites=false&maxIdleTimeMS=120000"

S’authentifier avec MongoDB Compass/Azure Data Studio

connectionString = "mongodb://" + "<YOUR_USER>" + ":" + "<YOUR_PASSWORD>" + "@" + "<YOUR_HOSTNAME>" + ":10255/" + "?ssl=true&retrywrites=false&replicaSet=globaldb&authmechanism=SCRAM-SHA-256&appname=@" + "<YOUR appName FROM CONNECTION STRING IN AZURE PORTAL>" + "@"
+"&authSource=" +"<YOUR_DATABASE>";

Commandes RBAC Azure CLI

Les commandes de gestion RBAC fonctionnent uniquement avec des versions récentes d’Azure CLI installées. Consultez le guide de démarrage rapide ci-dessus sur la prise en main.

Créer une définition de rôle

az cosmosdb mongodb role definition create --account-name <account-name> --resource-group <resource-group-name> --body {\"Id\":\"test.My_Read_Only_Role101\",\"RoleName\":\"My_Read_Only_Role101\",\"Type\":\"CustomRole\",\"DatabaseName\":\"test\",\"Privileges\":[{\"Resource\":{\"Db\":\"test\",\"Collection\":\"test\"},\"Actions\":[\"insert\",\"find\"]}],\"Roles\":[]}

Créer un rôle en passant le corps du fichier JSON

az cosmosdb mongodb role definition create --account-name <account-name> --resource-group <resource-group-name> --body role.json
Fichier JSON
{
	"Id": "test.My_Read_Only_Role101",
	"RoleName": "My_Read_Only_Role101",
	"Type": "CustomRole",
	"DatabaseName": "test",
	"Privileges": [{
		"Resource": {
			"Db": "test",
			"Collection": "test"
		},
		"Actions": ["insert", "find"]
	}],
	"Roles": []
}

Mettre à jour une définition de rôle

az cosmosdb mongodb role definition update --account-name <account-name> --resource-group <resource-group-name> --body {\"Id\":\"test.My_Read_Only_Role101\",\"RoleName\":\"My_Read_Only_Role101\",\"Type\":\"CustomRole\",\"DatabaseName\":\"test\",\"Privileges\":[{\"Resource\":{\"Db\":\"test\",\"Collection\":\"test\"},\"Actions\":[\"insert\",\"find\"]}],\"Roles\":[]}

Mettre à jour un rôle en passant le corps du fichier JSON

az cosmosdb mongodb role definition update --account-name <account-name> --resource-group <resource-group-name> --body role.json
Fichier JSON
{
	"Id": "test.My_Read_Only_Role101",
	"RoleName": "My_Read_Only_Role101",
	"Type": "CustomRole",
	"DatabaseName": "test",
	"Privileges": [{
		"Resource": {
			"Db": "test",
			"Collection": "test"
		},
		"Actions": ["insert", "find"]
	}],
	"Roles": []
}

Lister les rôles

az cosmosdb mongodb role definition list --account-name <account-name> --resource-group <resource-group-name>

Vérifier si un rôle existe

az cosmosdb mongodb role definition exists --account-name <account-name> --resource-group <resource-group-name> --id test.My_Read_Only_Role

Supprimer un rôle

az cosmosdb mongodb role definition delete --account-name <account-name> --resource-group <resource-group-name> --id test.My_Read_Only_Role

Créer une définition d’utilisateur

az cosmosdb mongodb user definition create --account-name <account-name> --resource-group <resource-group-name> --body {\"Id\":\"test.myName\",\"UserName\":\"myName\",\"Password\":\"pass\",\"DatabaseName\":\"test\",\"CustomData\":\"Some_Random_Info\",\"Mechanisms\":\"SCRAM-SHA-256\",\"Roles\":[{\"Role\":\"My_Read_Only_Role101\",\"Db\":\"test\"}]}

Créer un utilisateur en passant le corps du fichier JSON

az cosmosdb mongodb user definition create --account-name <account-name> --resource-group <resource-group-name> --body user.json
Fichier JSON
{
	"Id": "test.myName",
	"UserName": "myName",
	"Password": "pass",
	"DatabaseName": "test",
	"CustomData": "Some_Random_Info",
	"Mechanisms": "SCRAM-SHA-256",
	"Roles": [{
		"Role": "My_Read_Only_Role101",
		"Db": "test"
	}]
}

Mettre à jour une définition d’utilisateur

Pour mettre à jour le mot de passe de l’utilisateur, envoyez le nouveau mot de passe dans le champ Mot de passe.

az cosmosdb mongodb user definition update --account-name <account-name> --resource-group <resource-group-name> --body {\"Id\":\"test.myName\",\"UserName\":\"myName\",\"Password\":\"pass\",\"DatabaseName\":\"test\",\"CustomData\":\"Some_Random_Info\",\"Mechanisms\":\"SCRAM-SHA-256\",\"Roles\":[{\"Role\":\"My_Read_Only_Role101\",\"Db\":\"test\"}]}

Mettre à jour un utilisateur en passant le corps du fichier JSON

az cosmosdb mongodb user definition update --account-name <account-name> --resource-group <resource-group-name> --body user.json
Fichier JSON
{
	"Id": "test.myName",
	"UserName": "myName",
	"Password": "pass",
	"DatabaseName": "test",
	"CustomData": "Some_Random_Info",
	"Mechanisms": "SCRAM-SHA-256",
	"Roles": [{
		"Role": "My_Read_Only_Role101",
		"Db": "test"
	}]
}

Répertorier les utilisateurs

az cosmosdb mongodb user definition list --account-name <account-name> --resource-group <resource-group-name>

Vérifier si l’utilisateur existe

az cosmosdb mongodb user definition exists --account-name <account-name> --resource-group <resource-group-name> --id test.myName

Supprimer un utilisateur

az cosmosdb mongodb user definition delete --account-name <account-name> --resource-group <resource-group-name> --id test.myName

Limites

  • Le nombre d’utilisateurs et de rôles que vous pouvez créer doit être inférieur à 10 000.
  • Les commandes listCollections, listDatabases, killCursors et currentOp sont exclues du contrôle d’accès en fonction du rôle (RBAC).
  • Les utilisateurs et les rôles entre les bases de données ne sont pas pris en charge.
  • Le mot de passe d’un utilisateur peut uniquement être défini/réinitialisé via Azure CLI/Azure PowerShell.
  • La configuration des utilisateurs et des rôles est prise en charge uniquement via Azure CLI/PowerShell.
  • La désactivation de l’authentification par clé primaire/secondaire n’est pas prise en charge. Nous vous recommandons de faire pivoter vos clés pour empêcher l’accès lors de l’activation du contrôle d’accès en fonction du rôle.
  • Les stratégies de RBAC pour l’unité de requête Cosmos DB for Mongo DB ne sont pas automatiquement rétablies à la suite d’une opération de restauration. Vous devrez reconfigurer ces stratégies une fois le processus de restauration terminé.

Forum Aux Questions (FAQ)

Est-il possible de gérer les définitions de rôle et les attributions de rôles à partir du portail Azure ?

La prise en charge de la gestion du rôle par le Portail Azure n’est pas disponible. Toutefois, le contrôle d’accès en fonction du rôle peut être activé via l’onglet Fonctionnalités du Portail Azure.

Comment puis-je modifier le mot de passe d’un utilisateur ?

Mettez à jour la définition de l’utilisateur avec le nouveau mot de passe.

Quelles versions de Cosmos DB for MongoDB prennent en charge le contrôle d’accès en fonction du rôle (RBAC) ?

Les versions 3.6 et ultérieures prennent en charge RBAC.

Étapes suivantes