Configuración del control de acceso basado en rol de Azure Cosmos DB for MongoDB
SE APLICA A: MongoDB
Este artículo trata sobre el control de acceso basado en rol para las operaciones del plano de datos en Azure Cosmos DB for MongoDB.
Si usa operaciones del plano de administración, consulte la documentación sobre el control de acceso basado en roles aplicado a las operaciones de este plano.
Azure Cosmos DB for MongoDB expone un sistema de control de acceso basado en rol (RBAC) integrado que permite autorizar las solicitudes de datos con un modelo de permisos específico basado en roles. Los usuarios y los roles residen en una base de datos y se administran mediante la CLI de Azure, Azure PowerShell o Azure Resource Manager (ARM).
Conceptos
Resource
Un recurso es una colección o base de datos a la que estamos aplicando reglas de control de acceso.
Privilegios
Los privilegios son acciones que se pueden realizar en un recurso específico. Por ejemplo, "acceso de lectura a la colección xyz". Los privilegios se asignan a un rol específico.
Rol
Un rol tiene uno o varios privilegios. Los roles se asignan a los usuarios (cero o más) para permitirles realizar las acciones definidas en dichos privilegios. Los roles se almacenan en una base de datos única.
Auditoría del registro de diagnóstico
Se ha agregado otra columna denominada userId
a la tabla MongoRequests
en la característica de diagnóstico de Azure Portal. Esta columna identifica qué usuario realizó cada operación del plan de datos. El valor de esta columna está vacío cuando RBAC no está habilitado.
Privilegios disponibles
Consulta y escritura
- find
- insert
- quitar
- actualización
Flujos de cambios
- changeStream
Administración de bases de datos
- createCollection
- createIndex
- dropCollection
- killCursors
- killAnyCursor
administración del servidor
- dropDatabase
- dropIndex
- reIndex
Diagnóstico
- collStats
- dbStats
- listDatabases
- listCollections
- listIndexes
Roles integrados
Estos roles ya existen en todas las bases de datos y no es necesario crearlos.
read |
readWrite |
dbAdmin |
dbOwner |
|
---|---|---|---|---|
changeStream |
✅ Sí | ✅ Sí | ✅ Sí | ✅ Sí |
collStats |
✅ Sí | ✅ Sí | ✅ Sí | ✅ Sí |
listCollections |
✅ Sí | ✅ Sí | ✅ Sí | ✅ Sí |
listIndexes |
✅ Sí | ✅ Sí | ✅ Sí | ✅ Sí |
createCollection |
✖️ No | ✅ Sí | ✅ Sí | ✅ Sí |
createIndex |
✖️ No | ✅ Sí | ✅ Sí | ✅ Sí |
dropCollection |
✖️ No | ✅ Sí | ✅ Sí | ✅ Sí |
dbStats |
✖️ No | ✖️ No | ✅ Sí | ✅ Sí |
dropDatabase |
✖️ No | ✖️ No | ✅ Sí | ✅ Sí |
reIndex |
✖️ No | ✖️ No | ✅ Sí | ✅ Sí |
find |
✅ Sí | ✅ Sí | ✖️ No | ✅ Sí |
killCursors |
✅ Sí | ✅ Sí | ✖️ No | ✅ Sí |
dropIndex |
✖️ No | ✅ Sí | ✅ Sí | ✅ Sí |
insert |
✖️ No | ✅ Sí | ✖️ No | ✅ Sí |
remove |
✖️ No | ✅ Sí | ✖️ No | ✅ Sí |
update |
✖️ No | ✅ Sí | ✖️ No | ✅ Sí |
Configuración de la CLI de Azure (inicio rápido)
Se recomienda usar la consola cmd al utilizar Windows.
- Asegúrese de que tiene instalada localmente la versión más reciente de la CLI (no la extensión). Pruebe el comando
az upgrade
. - Conéctese a su suscripción.
az cloud set -n AzureCloud
az login
az account set --subscription <your subscription ID>
- Habilite la funcionalidad de RBAC en la cuenta de base de datos existente de la API para MongoDB. Debe agregar la funcionalidad "EnableMongoRoleBasedAccessControl" a la cuenta de base de datos. RBAC también se puede habilitar desde la pestaña características de Azure Portal. Si prefiere una nueva cuenta de base de datos, créela con la funcionalidad RBAC establecida en true.
az cosmosdb create -n <account_name> -g <azure_resource_group> --kind MongoDB --capabilities EnableMongoRoleBasedAccessControl
- Cree una base de datos para que los usuarios se conecten a ella en Azure Portal.
- Cree un usuario de RBAC con un rol de lectura integrado.
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>\"}]}
Autenticación mediante 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>")
Autenticación mediante el controlador de 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 });
Autenticación mediante el controlador de 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);
Autenticación mediante 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"
Autenticación mediante 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>";
Comandos de RBAC de la CLI de Azure
Los comandos de administración de RBAC solo funcionarán con las versiones más recientes de la CLI de Azure instaladas. Consulte la guía de inicio rápido anterior para obtener información sobre cómo empezar.
Creación de una definición de roles
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\":[]}
Creación de un rol pasando el cuerpo de un archivo JSON
az cosmosdb mongodb role definition create --account-name <account-name> --resource-group <resource-group-name> --body role.json
Archivo 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": []
}
Actualización de una definición de roles
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\":[]}
Actualización de un rol pasando el cuerpo de un archivo JSON
az cosmosdb mongodb role definition update --account-name <account-name> --resource-group <resource-group-name> --body role.json
Archivo 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": []
}
Lista de roles
az cosmosdb mongodb role definition list --account-name <account-name> --resource-group <resource-group-name>
Comprobación de si existe un rol
az cosmosdb mongodb role definition exists --account-name <account-name> --resource-group <resource-group-name> --id test.My_Read_Only_Role
Eliminación de un rol
az cosmosdb mongodb role definition delete --account-name <account-name> --resource-group <resource-group-name> --id test.My_Read_Only_Role
Creación de una definición de usuario
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\"}]}
Creación de un usuario pasando el cuerpo de un archivo JSON
az cosmosdb mongodb user definition create --account-name <account-name> --resource-group <resource-group-name> --body user.json
Archivo 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"
}]
}
Actualización de una definición de usuario
Para actualizar la contraseña del usuario, envíe la nueva contraseña en el campo de contraseña.
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\"}]}
Actualización de un usuario pasando el cuerpo de un archivo JSON
az cosmosdb mongodb user definition update --account-name <account-name> --resource-group <resource-group-name> --body user.json
Archivo 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"
}]
}
Enumerar usuarios
az cosmosdb mongodb user definition list --account-name <account-name> --resource-group <resource-group-name>
Comprobación de si existe un usuario
az cosmosdb mongodb user definition exists --account-name <account-name> --resource-group <resource-group-name> --id test.myName
Eliminación de usuario
az cosmosdb mongodb user definition delete --account-name <account-name> --resource-group <resource-group-name> --id test.myName
Limitaciones
- El número de usuarios y roles que puede crear debe ser inferior a 10 000.
- Los comandos listCollections, listDatabases, killCursors y currentOp están excluidos de RBAC.
- No se admite el uso de usuarios y roles entre bases de datos.
- Las contraseñas de usuario solo se pueden establecer o restablecer mediante la CLI de Azure o Azure PowerShell.
- La configuración de usuarios y roles solo se admite mediante la CLI de Azure o PowerShell.
- No se admite la deshabilitación de la autenticación con clave principal o secundaria. Se recomienda rotar las claves para evitar el acceso al habilitar RBAC.
- Las directivas de RBAC para Cosmos DB para RU de Mongo DB no se restablecerán automáticamente después de una operación de restauración. Deberá volver a configurar estas directivas una vez completado el proceso de restauración.
Preguntas más frecuentes (P+F)
¿Es posible administrar las definiciones de roles y las asignaciones de roles desde Azure Portal?
La compatibilidad de Azure Portal con la administración de roles no está disponible. Sin embargo, RBAC también se puede habilitar desde la pestaña características de Azure Portal.
¿Cómo puedo cambiar la contraseña de un usuario?
Actualice la definición del usuario con la nueva contraseña.
¿Qué versiones de Cosmos DB for MongoDB admiten el control de acceso basado en rol (RBAC)?
Las versiones 3.6 y posteriores.
Pasos siguientes
- Más información sobre la administración del control de acceso basado en roles de Azure Cosmos DB.