A szerepköralapú hozzáférés-vezérlés konfigurálása a MongoDB-hez készült Azure Cosmos DB-ben
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
Erőforrás
Az erőforrás olyan gyűjtemény vagy adatbázis, amelyre hozzáférés-vezérlési szabályokat alkalmazunk.
Jogosultságok
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.
Szerepkör
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
Egy másik, úgynevezett userId
oszlop lett hozzáadva a MongoRequests
táblához az Azure Portal diagnosztikai funkciójában. 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
Streamek módosítása
- changeStream
Adatbázis-kezelés
- createCollection
- createIndex
- dropCollection
- killCursors
- killAnyCursor
Kiszolgálófelügyelet
- 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.
read |
readWrite |
dbAdmin |
dbOwner |
|
---|---|---|---|---|
changeStream |
✅ Igen | ✅ Igen | ✅ Igen | ✅ Igen |
collStats |
✅ Igen | ✅ Igen | ✅ Igen | ✅ Igen |
listCollections |
✅ Igen | ✅ Igen | ✅ Igen | ✅ Igen |
listIndexes |
✅ Igen | ✅ Igen | ✅ Igen | ✅ Igen |
createCollection |
✖️ Nem | ✅ Igen | ✅ Igen | ✅ Igen |
createIndex |
✖️ Nem | ✅ Igen | ✅ Igen | ✅ Igen |
dropCollection |
✖️ Nem | ✅ Igen | ✅ Igen | ✅ Igen |
dbStats |
✖️ Nem | ✖️ Nem | ✅ Igen | ✅ Igen |
dropDatabase |
✖️ Nem | ✖️ Nem | ✅ Igen | ✅ Igen |
reIndex |
✖️ Nem | ✖️ Nem | ✅ Igen | ✅ Igen |
find |
✅ Igen | ✅ Igen | ✖️ Nem | ✅ Igen |
killCursors |
✅ Igen | ✅ Igen | ✖️ Nem | ✅ Igen |
dropIndex |
✖️ Nem | ✅ Igen | ✅ Igen | ✅ Igen |
insert |
✖️ Nem | ✅ Igen | ✖️ Nem | ✅ Igen |
remove |
✖️ Nem | ✅ Igen | ✖️ Nem | ✅ Igen |
update |
✖️ Nem | ✅ Igen | ✖️ Nem | ✅ Igen |
Az Azure CLI beállítása (rövid útmutató)
Windows használata esetén a parancsmag használatát javasoljuk.
- 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. - Csatlakozzon az előfizetéséhez.
az cloud set -n AzureCloud
az login
az account set --subscription <your subscription ID>
- 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
- Hozzon létre egy adatbázist a felhasználók számára, amelyhez csatlakozni szeretne az Azure Portalon.
- 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 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"
Hitelesítés a MongoDB Compass/Azure Data Studio használatával
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>";
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)
Elvégezhető a szerepkör-definíciók és szerepkör-hozzárendelések kezelése az Azure Portalon?
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.