Configure role-based access control in Azure Cosmos DB for MongoDB

A KÖVETKEZŐKRE VONATKOZIK: MongoDB

Ez a cikk az adatsík-műveletek szerepköralapú hozzáférés-vezérléséről szól az Azure Cosmos DB for MongoDB-ben.

Ha felügyeletisík-műveleteket használ, tekintse meg a felügyeleti sík műveleti cikkére alkalmazott szerepköralapú hozzáférés-vezérlést .

Az Azure Cosmos DB for MongoDB egy beépített szerepköralapú hozzáférés-vezérlési (RBAC) rendszert tesz elérhetővé, amellyel részletes, szerepköralapú engedélymodellel engedélyezheti az adatkéréseket. A felhasználók és szerepkörök egy adatbázisban találhatók, és az Azure CLI, az Azure PowerShell vagy az Azure Resource Manager (ARM) használatával kezelhetők.

Fogalmak

Resource

Az erőforrás olyan gyűjtemény vagy adatbázis, amelyre hozzáférés-vezérlési szabályokat alkalmazunk.

Privileges

A jogosultságok olyan műveletek, amelyek egy adott erőforráson végrehajthatók. Például: "olvasási hozzáférés a gyűjteményhez xyz". A jogosultságok egy adott szerepkörhöz vannak rendelve.

Role

Egy szerepkör egy vagy több jogosultsággal rendelkezik. A szerepkörök a felhasználókhoz vannak hozzárendelve (nulla vagy több), hogy lehetővé tegyék számukra az ezekben a jogosultságokban meghatározott műveletek végrehajtását. A szerepkörök egyetlen adatbázisban vannak tárolva.

Diagnosztikai napló naplózása

Az Azure Portal Diagnostics szolgáltatásban egy másik, úgynevezett userId oszlop lett hozzáadva MongoRequests a táblához. Ez az oszlop azt határozza meg, hogy melyik felhasználó hajtotta végre az adatterv-műveletet. Az oszlop értéke üres, ha az RBAC nincs engedélyezve.

Elérhető jogosultságok

Lekérdezés és írás

  • find
  • insert
  • eltávolít
  • update

Adatfolyamok módosítása

  • changeStream

Adatbázis-kezelés

  • createCollection
  • createIndex
  • dropCollection
  • killCursors
  • killAnyCursor

Kiszolgálói Rendszergazda istration

  • dropDatabase
  • dropIndex
  • reIndex

Diagnosztika

  • collStats
  • dbStats
  • listDatabases
  • listCollections
  • listIndexes

Beépített szerepkörök

Ezek a szerepkörök már léteznek minden adatbázisban, és nem kell létrehozni őket.

olvasás

A következő jogosultságokkal rendelkezik: changeStream, collStats, find, killCursors, listIndexes, listCollections

readWrite

A következő jogosultságokkal rendelkezik: collStats, createCollection, dropCollection, createIndex, dropIndex, find, insert, killCursors, listIndexes, listCollections, remove, update

db Rendszergazda

A következő jogosultságokkal rendelkezik: collStats, createCollection, createIndex, dbStats, dropCollection, dropDatabase, dropIndex, listCollections, listIndexes, reIndex

dbOwner

A következő jogosultságokkal rendelkezik: collStats, createCollection, createIndex, dbStats, dropCollection, dropDatabase, dropIndex, listCollections, listIndexes, reIndex, find, insert, killCursors, listIndexes, listCollections, remove, update

Az Azure CLI beállítása (rövid útmutató)

Windows használata esetén a parancsmag használatát javasoljuk.

  1. Győződjön meg arról, hogy a cli legújabb verziója (nem bővítmény) telepítve van helyileg. próbálja ki az upgrade a parancsot.
  2. Csatlakozzon az előfizetéséhez.
az cloud set -n  AzureCloud
az login
az account set --subscription <your subscription ID>
  1. Engedélyezze az RBAC-képességet a mongoDB-adatbázisfiókhoz tartozó meglévő API-n. Hozzá kell adnia az "EnableMongoRoleBasedAccessControl" képességet az adatbázisfiókhoz. Az RBAC az Azure Portal szolgáltatások lapján is engedélyezhető. Ha inkább egy új adatbázisfiókot szeretne, hozzon létre egy új adatbázisfiókot, amelynek RBAC-képessége true (igaz) értékű.
az cosmosdb create -n <account_name> -g <azure_resource_group> --kind MongoDB --capabilities EnableMongoRoleBasedAccessControl
  1. Hozzon létre egy adatbázist a felhasználók számára, amelyhez csatlakozni szeretne az Azure Portalon.
  2. Hozzon létre egy RBAC-felhasználót beépített olvasási szerepkörrel.
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>\"}]}

Hitelesítés pymongo használatával

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

Hitelesítés a Node.js illesztőprogram használatával

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

Hitelesítés Java-illesztőprogram használatával

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

Hitelesítés a Mongosh használatával

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

Azure CLI RBAC-parancsok

Az RBAC felügyeleti parancsai csak az Azure CLI újabb verzióival működnek. Első lépésként tekintse meg a fenti rövid útmutatót.

Szerepkördefiníció létrehozása

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

Szerepkör létrehozása JSON-fájl törzsének átadásával

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

Szerepkördefiníció frissítése

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

Szerepkör frissítése A JSON-fájl törzsének átadásával

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

Szerepkörök felsorolása

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

Ellenőrizze, hogy létezik-e szerepkör

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

Szerepkör törlése

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

Felhasználói definíció létrehozása

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

Felhasználó létrehozása JSON-fájl törzsének átadásával

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

Felhasználódefiníció frissítése

A felhasználó jelszavának frissítéséhez küldje el az új jelszót a jelszó mezőben.

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

Felhasználó frissítése JSON-fájl törzsének átadásával

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

Felhasználók listázása

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

Ellenőrizze, hogy létezik-e felhasználó

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

Felhasználó törlése

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

Korlátozások

  • A létrehozható felhasználók és szerepkörök maximális száma 10 000.
  • A listCollections, listDatabases, killCursors és currentOp parancsok ki vannak zárva az RBAC-ből.
  • Az adatbázisok felhasználói és szerepkörei nem támogatottak.
  • A felhasználói jelszavak beállítása és alaphelyzetbe állítása kizárólag az Azure CLI vagy az Azure PowerShell használatával lehetséges.
  • A felhasználók és a szerepkörök konfigurálása kizárólag az Azure CLI vagy az Azure PowerShell használatával lehetséges.
  • Az elsődleges/másodlagos kulcs hitelesítésének letiltása nem támogatott. Javasoljuk, hogy az RBAC engedélyezésekor rendszeresen módosítsa a kulcsokat a hozzáférés megakadályozása érdekében.
  • A Mongo DB-hez készült Cosmos DB RBAC-szabályzatai a visszaállítási művelet után nem lesznek automatikusan visszaállítva. A visszaállítási folyamat befejeződése után újra kell konfigurálnia ezeket a házirendeket.

Gyakori kérdések (GYIK)

Is it possible to manage role definitions and role assignments from the Azure portal?

Az Azure Portal szerepkör-kezelési támogatása nem érhető el. Azonban az RBAC engedélyezhető az Azure Portal Funkciók lapján.

Hogyan módosíthatom egy felhasználó jelszavát?

Frissítse a felhasználó definícióját az új jelszóval.

Mely MongoDB-hez készült Cosmos DB-verziók támogatják a szerepköralapú hozzáférés-vezérlést (RBAC)?

A 3.6-os és újabb verziók támogatják az RBAC-t.

Következő lépések