Konfigurieren der rollenbasierten Zugriffssteuerung in Azure Cosmos DB for MongoDB

GILT FÜR: MongoDB

In diesem Artikel geht es um die rollenbasierte Zugriffssteuerung für Vorgänge auf Datenebene in Azure Cosmos DB for MongoDB.

Falls Sie Vorgänge auf Verwaltungsebene verwenden, finden Sie weitere Informationen in dem Artikel zur rollenbasierten Zugriffssteuerung, die für Vorgänge auf Verwaltungsebene angewendet wird.

Azure Cosmos DB for MongoDB verfügt über ein integriertes rollenbasiertes Zugriffssteuerungssystem (RBAC), mit dem Sie Ihre Datenanforderungen mit einem fein abgestuften, rollenbasierten Berechtigungsmodell autorisieren können. Benutzer sind Rollen, die sich in einer Datenbank befinden und über die Azure CLI, Azure PowerShell oder Azure Resource Manager (ARM) verwaltet werden.

Konzepte

Resource

Eine Ressource ist eine Sammlung oder Datenbank, auf die Zugriffssteuerungsregeln angewendet werden.

Rechte

Berechtigungen sind Aktionen, die für eine bestimmte Ressource ausgeführt werden können. Beispiel: „Lesezugriff auf Sammlung xyz“. Berechtigungen werden einer bestimmten Rolle zugewiesen.

Role

Eine Rolle verfügt über mindestens eine Berechtigung. Rollen werden Benutzern (null oder mehr) zugewiesen, damit sie die in diesen Berechtigungen definierten Aktionen ausführen können. Rollen werden in einer einzelnen Datenbank gespeichert.

Diagnoseprotokollüberwachung

Eine weitere Spalte mit dem Namen userId wurde der Tabelle MongoRequests in der Diagnosefunktion des Azure-Portals hinzugefügt. Diese Spalte identifiziert, welche*r Benutzer*in welchen Vorgang des Datenplans ausgeführt hat. Der Wert in dieser Spalte ist leer, wenn RBAC nicht aktiviert ist.

Verfügbare Berechtigungen

Abfragen und Schreiben

  • Suchen
  • insert
  • Entfernen
  • Update

Ändern von Streams

  • changeStream

Datenbankverwaltung

  • createCollection
  • createIndex
  • dropCollection
  • killCursors
  • killAnyCursor

Serververwaltung

  • dropDatabase
  • dropIndex
  • reIndex

Diagnose

  • collStats
  • dbStats
  • listDatabases
  • listCollections
  • listIndexes

Integrierte Rollen

Diese Rollen sind bereits in jeder Datenbank vorhanden und müssen nicht erstellt werden.

Lesen

Weist die folgenden Berechtigungen auf: changeStream, collStats, find, killCursors, listIndexes, listCollections

readWrite

Weist die folgenden Berechtigungen auf: collStats, createCollection, dropCollection, createIndex, dropIndex, find, insert, killCursors, listIndexes, listCollections, remove, update

dbAdmin

Weist die folgenden Berechtigungen auf: collStats, createCollection, createIndex, dbStats, dropCollection, dropDatabase, dropIndex, listCollections, listIndexes, reIndex

dbowner

Weist die folgenden Berechtigungen auf: collStats, createCollection, createIndex, dbStats, dropCollection, dropDatabase, dropIndex, listCollections, listIndexes, reIndex, find, insert, killCursors, listIndexes, listCollections, remove, update

Azure CLI-Setup (Schnellstart)

Es wird empfohlen, unter Windows cmd zu verwenden.

  1. Stellen Sie sicher, dass Sie die neueste CLI-Version(nicht die Erweiterung) lokal installiert haben. Versuchen Sie den Befehl az upgrade.
  2. Stellen Sie eine Verbindung mit Ihrem Abonnement her.
az cloud set -n  AzureCloud
az login
az account set --subscription <your subscription ID>
  1. Aktivieren Sie die RBAC-Funktion für Ihre vorhandene API für das MongoDB-Datenbankkonto. Sie müssen die Funktion „EnableMongoRoleBasedAccessControl“ zu Ihrem Datenbankkonto hinzufügen. RBAC kann stattdessen auch über die Registerkarte „Features“ im Azure-Portal aktiviert werden. Erstellen Sie ein neues Datenbankkonto, wenn Sie stattdessen lieber ein neues Datenbankkonto verwenden möchten, und legen Sie die RBAC-Funktion auf „true“ fest.
az cosmosdb create -n <account_name> -g <azure_resource_group> --kind MongoDB --capabilities EnableMongoRoleBasedAccessControl
  1. Erstellen Sie eine Datenbank für Benutzer, mit der sie eine Verbindung im Azure-Portal herstellen können.
  2. Erstellen Sie einen RBAC-Benutzer mit integrierter Leserolle.
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>\"}]}

Authentifizieren mithilfe von 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>")

Authentifizieren mithilfe des Node.js-Treibers

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 });

Authentifizieren mithilfe des Java-Treibers

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);

Authentifizieren mithilfe von 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"

RBAC-Befehle der Azure CLI

Die RBAC-Verwaltungsbefehle funktionieren nur mit einer installierten neueren Version der Azure CLI. Wie Sie die ersten Schritte ausführen können, erfahren Sie im Schnellstart oben.

Erstellen einer Rollendefinition

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

Erstellen einer Rolle durch Übergeben des Texts der JSON-Datei

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

Aktualisieren einer Rollendefinition

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

Aktualisieren einer Rolle durch Übergeben des Texts der JSON-Datei

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

Auflisten der Rollen

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

Überprüfen, ob die Rolle vorhanden ist

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

Löschen einer Rolle

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

Erstellen einer Benutzerdefinition

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

Erstellen eines Benutzers durch Übergeben des Texts der JSON-Datei

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

Aktualisieren einer Benutzerdefinition

Um das Kennwort des Benutzers zu aktualisieren, senden Sie das neue Kennwort im Kennwortfeld.

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

Aktualisieren eines Benutzers durch Übergeben des Texts der JSON-Datei

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

Benutzer auflisten

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

Überprüfen, ob ein Benutzer vorhanden ist

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

Benutzer löschen

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

Einschränkungen

  • Die Anzahl der Benutzer und Rollen, die Sie erstellen können, ist kleiner als 10.000.
  • Die Befehle „listCollections“, „listDatabases“, „killCursors“ und „currentOp“ sind von RBAC ausgenommen.
  • Datenbankübergreifende Benutzer*innen und Rollen werden nicht unterstützt.
  • Das Kennwort eines Benutzers kann nur über die Azure CLI bzw. Azure PowerShell festgelegt/zurückgesetzt werden.
  • Die Konfiguration von Benutzern und Rollen wird nur über die Azure CLI bzw. PowerShell unterstützt.
  • Das Deaktivieren der Authentifizierung mit Primär-/Sekundärschlüssel wird nicht unterstützt. Wir empfehlen, die Schlüssel zu rotieren, um den Zugriff zu verhindern, wenn RBAC aktiviert ist.
  • RBAC-Richtlinien für Cosmos DB for Mongo DB-Anforderungseinheiten werden nach einem Wiederherstellungsvorgang nicht automatisch wiederhergestellt. Sie müssen diese Richtlinien nach Abschluss des Wiederherstellungsvorgangs neu konfigurieren.

Häufig gestellte Fragen (FAQs)

Können Rollendefinitionen und Rollenzuweisungen über das Azure-Portal verwaltet werden?

Eine Unterstützung für die Rollenverwaltung ist im Azure-Portal nicht verfügbar. RBAC kann aber über die Registerkarte „Features“ im Azure-Portal aktiviert werden.

Wie kann ich das Kennwort eines Benutzers ändern?

Aktualisieren Sie die Benutzerdefinition mit dem neuen Kennwort.

Welche Versionen von Cosmos DB für MongoDB unterstützen rollenbasierte Zugriffssteuerung (RBAC)?

Versionen ab 3.6 unterstützen RBAC.

Nächste Schritte