Configurare il controllo degli accessi in base al ruolo in Azure Cosmos DB for MongoDB

SI APPLICA A: MongoDB

Questo articolo descrive il controllo degli accessi in base al ruolo per le operazioni del piano dati in Azure Cosmos DB for MongoDB.

Se si usano operazioni del piano di gestione, vedere l'articolo sul controllo degli accessi in base al ruolo applicato alle operazioni del piano di gestione.

Azure Cosmos DB for MongoDB espone un sistema di controllo degli accessi in base al ruolo predefinito che consente di autorizzare le richieste di dati con un modello di autorizzazione basato su ruoli con granularità fine. Gli utenti e i ruoli si trovano all'interno di un database e vengono gestiti usando l'interfaccia della riga di comando di Azure, Azure PowerShell o Azure Resource Manager (ARM).

Concetti

Conto risorse

Una risorsa è una raccolta o un database a cui vengono applicate le regole di controllo di accesso.

Privilegi

I privilegi sono azioni che possono essere eseguite su una risorsa specifica. Ad esempio, "accesso in lettura alla raccolta xyz". I privilegi vengono assegnati a un ruolo specifico.

Ruolo

Un ruolo dispone di uno o più privilegi. I ruoli vengono assegnati agli utenti (zero o più) per consentire loro di eseguire le azioni definite in tali privilegi. I ruoli vengono archiviati all'interno di un singolo database.

Controllo dei log di diagnostica

Nella funzionalità Diagnostica del portale di Azure è stata aggiunta un'altra colonna denominata userId alla tabella MongoRequests. La colonna identifica l'utente che ha eseguito l'operazione del piano dati. Il valore nella colonna è vuoto quando il controllo degli accessi in base al ruolo non è abilitato.

Privilegi disponibili

Query e scrittura

  • find
  • insert
  • remove
  • update

Modifica di flussi

  • changeStream

Gestione di database

  • createCollection
  • createIndex
  • dropCollection
  • killCursors
  • killAnyCursor

Amministrazione server

  • dropDatabase
  • dropIndex
  • reIndex

Diagnostica

  • collStats
  • dbStats
  • listDatabases
  • listCollections
  • listIndexes

Ruoli predefiniti

Questi ruoli esistono già in ogni database e non devono essere creati.

lettura

Dispone dei privilegi seguenti: changeStream, collStats, find, killCursors, listIndexes, listCollections

readWrite

Dispone dei privilegi seguenti: collStats, createCollection, dropCollection, createIndex, dropIndex, find, insert, killCursors, listIndexes, listCollections, remove, update

dbAdmin

Dispone dei privilegi seguenti: collStats, createCollection, createIndex, dbStats, dropCollection, dropDatabase, dropIndex, listCollections, listIndexes, reIndex

dbOwner

Dispone dei privilegi seguenti: collStats, createCollection, createIndex, dbStats, dropCollection, dropDatabase, dropIndex, listCollections, listIndexes, reIndex, find, insert, killCursors, listIndexes, listCollections, remove, update

Configurazione dell'interfaccia della riga di comando di Azure (Avvio rapido)

In Windows è consigliabile usare cmd.

  1. Assicurarsi di avere installato localmente la versione più recente dell'interfaccia della riga di comando (non estensione). Provare il comando az upgrade.
  2. Connettersi alla sottoscrizione.
az cloud set -n  AzureCloud
az login
az account set --subscription <your subscription ID>
  1. Abilitare la funzionalità di controllo degli accessi in base al ruolo nell'account di database dell'API per MongoDB esistente. A tal fine, è necessario aggiungere la funzionalità "EnableMongoRoleBasedAccessControl" all'account di database. Il controllo degli accessi in base al ruolo può anche essere abilitato tramite la scheda delle funzionalità nel portale di Azure. Se invece si preferisce usare un nuovo account di database, crearne uno nuovo con la funzionalità di controllo degli accessi in base al ruolo impostata su true.
az cosmosdb create -n <account_name> -g <azure_resource_group> --kind MongoDB --capabilities EnableMongoRoleBasedAccessControl
  1. Creare un database a cui gli utenti si connettono nel portale di Azure.
  2. Creare un utente del controllo degli accessi in base al ruolo con ruolo di lettura predefinito.
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>\"}]}

Eseguire l'autenticazione con 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>")

Eseguire l'autenticazione con il driver 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 });

Eseguire l'autenticazione con il driver 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);

Eseguire l'autenticazione con 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"

Comandi del controllo degli accessi in base al ruolo dell'interfaccia della riga di comando di Azure

I comandi di gestione del controllo degli accessi in base al ruolo funzionano solo con le versioni più recenti dell'interfaccia della riga di comando di Azure installate. Vedere la sezione di avvio rapido precedente su come iniziare.

Creare una definizione di ruolo

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\":[]}

Creare un ruolo passando il corpo del file JSON

az cosmosdb mongodb role definition create --account-name <account-name> --resource-group <resource-group-name> --body role.json
File 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": []
}

Aggiornare la definizione del ruolo

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\":[]}

Aggiornare il ruolo passando il corpo del file JSON

az cosmosdb mongodb role definition update --account-name <account-name> --resource-group <resource-group-name> --body role.json
File 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": []
}

Elencare i ruoli

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

Controllare se il ruolo esiste

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

Eliminare un ruolo

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

Creare una definizione utente

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\"}]}

Creare un utente passando il corpo del file JSON

az cosmosdb mongodb user definition create --account-name <account-name> --resource-group <resource-group-name> --body user.json
File 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"
	}]
}

Aggiornare la definizione utente

Per aggiornare la password dell'utente, inserire la nuova password nel campo password.

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\"}]}

Aggiornare l'utente passando il corpo del file JSON

az cosmosdb mongodb user definition update --account-name <account-name> --resource-group <resource-group-name> --body user.json
File 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"
	}]
}

Elencare gli utenti

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

Controllare se l'utente esiste

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

Eliminare un utente

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

Limiti

  • Il numero di utenti e ruoli che è possibile creare deve essere minore di 10.000.
  • I comandi listCollections, listDatabases, killCursors e currentOp sono esclusi dal controllo degli accessi in base al ruolo.
  • Gli utenti e i ruoli su più database non sono supportati.
  • La password di un utente può essere impostata o reimpostata solo tramite l'interfaccia della riga di comando di Azure/Azure PowerShell.
  • La configurazione di utenti e ruoli è supportata solo tramite l'interfaccia della riga di comando di Azure/PowerShell.
  • La disabilitazione dell'autenticazione con chiave primaria/secondaria non è supportata. È consigliabile ruotare le chiavi per impedire l'accesso quando si abilita il controllo degli accessi in base al ruolo.
  • I criteri di controllo degli accessi in base al ruolo per UR Cosmos DB for MongoDB non vengono ripristinati automaticamente dopo un'operazione di ripristino. È necessario riconfigurare questi criteri al termine del processo di ripristino.

Domande frequenti

È possibile gestire le definizioni e le assegnazioni di ruolo nel portale di Azure?

Il supporto del portale di Azure per la gestione dei ruoli non è disponibile. Tuttavia, il controllo degli accessi in base al ruolo può essere abilitato tramite la scheda Funzionalità nel portale di Azure.

Come è possibile modificare la password di un utente?

Aggiornare la definizione dell'utente con la nuova password.

Quali versioni di Cosmos DB per MongoDB supportano il controllo degli accessi in base al ruolo?

La versione 3.6 e le versioni successive supportano il controllo degli accessi in base al ruolo.

Passaggi successivi