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.
- Ujistěte se, že máte místně nainstalovanou nejnovější verzi rozhraní příkazového řádku (ne rozšíření). try
az upgrade
command. - Připojte se ke svému předplatnému.
az cloud set -n AzureCloud
az login
az account set --subscription <your subscription ID>
- 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
- Vytvořte databázi, ke které se uživatelé budou připojovat na webu Azure Portal.
- 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
- Přečtěte si další informace o RBAC pro správu služby Azure Cosmos DB.