Sdílet prostřednictvím


Konfigurace řízení přístupu na základě role ve službě Azure Cosmos DB for MongoDB

PLATÍ PRO: MongoDB

Tento článek se týká řízení přístupu na základě role pro operace roviny dat ve službě Azure Cosmos DB pro MongoDB.

Pokud používáte operace roviny správy, přečtěte si článek o řízení přístupu na základě role v článku o operacích roviny správy.

Azure Cosmos DB pro MongoDB zveřejňuje integrovaný systém řízení přístupu na základě role (RBAC), který umožňuje autorizovat žádosti o data pomocí jemně odstupňovaného modelu oprávnění na základě role. Uživatelé a role se nacházejí v databázi a spravují se pomocí Azure CLI, Azure PowerShellu nebo Azure Resource Manageru (ARM).

Koncepty

Prostředek

Prostředek je kolekce nebo databáze, na kterou používáme pravidla řízení přístupu.

Oprávnění

Oprávnění jsou akce, které je možné provést u konkrétního prostředku. Příklad: "Přístup pro čtení ke kolekci xyz". Oprávnění jsou přiřazena ke konkrétní roli.

Role

Role má jedno nebo více oprávnění. Role se přiřazují uživatelům (nula nebo více), aby mohli provádět akce definované v těchto oprávněních. Role jsou uloženy v rámci jedné databáze.

Auditování diagnostických protokolů

Do tabulky v diagnostice webu Azure Portal byl přidán MongoRequests další sloupecuserId. Tento sloupec určuje, který uživatel provedl operaci datového plánu. Hodnota v tomto sloupci je prázdná, pokud není povolený RBAC.

Dostupná oprávnění

Dotazování a zápis

  • find
  • insert
  • remove
  • update

Změna streamů

  • changeStream

Správa databází

  • createCollection
  • createIndex
  • dropCollection
  • killCursors
  • killAnyCursor

Správa serveru

  • dropDatabase
  • dropIndex
  • reIndex

Diagnostika

  • collStats
  • dbStats
  • listDatabases
  • listCollections
  • listIndexes

Předdefinované role

Tyto role již existují v každé databázi a není nutné je vytvářet.

read readWrite dbAdmin dbOwner
changeStream ✅ Ano ✅ Ano ✅ Ano ✅ Ano
collStats ✅ Ano ✅ Ano ✅ Ano ✅ Ano
listCollections ✅ Ano ✅ Ano ✅ Ano ✅ Ano
listIndexes ✅ Ano ✅ Ano ✅ Ano ✅ Ano
createCollection ✖️ Ne ✅ Ano ✅ Ano ✅ Ano
createIndex ✖️ Ne ✅ Ano ✅ Ano ✅ Ano
dropCollection ✖️ Ne ✅ Ano ✅ Ano ✅ Ano
dbStats ✖️ Ne ✖️ Ne ✅ Ano ✅ Ano
dropDatabase ✖️ Ne ✖️ Ne ✅ Ano ✅ Ano
reIndex ✖️ Ne ✖️ Ne ✅ Ano ✅ Ano
find ✅ Ano ✅ Ano ✖️ Ne ✅ Ano
killCursors ✅ Ano ✅ Ano ✖️ Ne ✅ Ano
dropIndex ✖️ Ne ✅ Ano ✅ Ano ✅ Ano
insert ✖️ Ne ✅ Ano ✖️ Ne ✅ Ano
remove ✖️ Ne ✅ Ano ✖️ Ne ✅ Ano
update ✖️ Ne ✅ Ano ✖️ Ne ✅ Ano

Nastavení Azure CLI (rychlý start)

Při používání Windows doporučujeme používat příkaz cmd.

  1. Ujistěte se, že máte místně nainstalovanou nejnovější verzi rozhraní příkazového řádku (ne rozšíření). try az upgrade command.
  2. Připojte se ke svému předplatnému.
az cloud set -n  AzureCloud
az login
az account set --subscription <your subscription ID>
  1. Povolte funkci RBAC ve vašem stávajícím databázovém účtu rozhraní API pro MongoDB. Do svého databázového účtu musíte přidat funkci EnableMongoRoleBasedAccessControl. RBAC je také možné povolit prostřednictvím karty funkcí na webu Azure Portal. Pokud místo toho dáváte přednost novému databázovému účtu, vytvořte nový účet databáze s možností RBAC nastavenou na true.
az cosmosdb create -n <account_name> -g <azure_resource_group> --kind MongoDB --capabilities EnableMongoRoleBasedAccessControl
  1. Vytvořte databázi, ke které se uživatelé budou připojovat na webu Azure Portal.
  2. Vytvořte uživatele RBAC s integrovanou rolí pro čtení.
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>\"}]}

Ověřování pomocí 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>")

Ověřování pomocí ovladače 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 });

Ověřování pomocí ovladače 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);

Ověřování pomocí 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"

Ověřování pomocí 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>";

Příkazy RBAC v Azure CLI

Příkazy pro správu RBAC budou fungovat jenom s novějšími verzemi nainstalovaného Azure CLI. Informace o tom, jak začít, najdete výše v rychlém startu.

Vytvoření definice role

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

Vytvoření role předáním textu souboru JSON

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

Aktualizace definice role

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

Aktualizace role předáním textu souboru JSON

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

Výpis rolí

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

Kontrola existence role

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

Odstranění role

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

Vytvoření definice uživatele

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

Vytvoření uživatele předáním textu souboru JSON

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

Aktualizace definice uživatele

Pokud chcete aktualizovat heslo uživatele, odešlete nové heslo do pole heslo.

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

Aktualizace uživatele předáním textu souboru JSON

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

Vypsání uživatelů

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

Kontrola, jestli uživatel existuje

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

Odstranění uživatele

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

Omezení

  • Počet uživatelů a rolí, které můžete vytvořit, musí být menší než 10 000.
  • Příkazy listCollections, listDatabases, killCursors a currentOp jsou z řízení přístupu na základě role (RBAC) vyloučené.
  • Uživatelé a role napříč databázemi se nepodporují.
  • Heslo uživatele je možné nastavit nebo resetovat pouze pomocí prostředí Azure CLI nebo Azure PowerShell.
  • Konfigurace uživatelů a rolí se podporuje jenom prostřednictvím prostředí Azure CLI nebo PowerShell.
  • Zakázání ověřování primárního nebo sekundárního klíče se nepodporuje. Pokud chcete zabránit přístupu při povolování řízení přístupu na základě role (RBAC), doporučujeme používat rotaci klíčů.
  • Zásady RBAC pro službu Cosmos DB pro Rugo DB se po operaci obnovení automaticky neobnoví. Po dokončení procesu obnovení budete muset tyto zásady překonfigurovat.

Nejčastější dotazy

Je možné spravovat definice a přiřazení rolí na webu Azure Portal?

Podpora portálu Azure Portal pro správu rolí není dostupná. Řízení přístupu na základě role (RBAC) je však možné povolit na kartě funkcí na webu Azure Portal.

Jak změním heslo uživatele?

Aktualizujte definici uživatele novým heslem.

Které verze služby Cosmos DB for MongoDB podporují řízení přístupu na základě role (RBAC)?

Řízení přístupu na základě role (RBAC) podporují verze 3.6 a vyšší.

Další kroky