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.
- Vérifiez que la dernière version de l’interface CLI (et non l’extension) est installée localement. Essayez la commande
az upgrade
. - Connectez-vous à votre abonnement.
az cloud set -n AzureCloud
az login
az account set --subscription <your subscription ID>
- 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
- Créez une base de données pour que les utilisateurs se connectent au Portail Azure.
- 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
- En savoir plus sur RBAC pour la gestion d’Azure Cosmos DB.