Konfigurera rollbaserad åtkomstkontroll i Azure Cosmos DB for MongoDB
GÄLLER FÖR: MongoDB
Den här artikeln handlar om rollbaserad åtkomstkontroll för dataplansåtgärder i Azure Cosmos DB för MongoDB.
Om du använder hanteringsplanåtgärder kan du läsa artikeln rollbaserad åtkomstkontroll som tillämpas på hanteringsplanets åtgärder.
Azure Cosmos DB for MongoDB exponerar ett inbyggt RBAC-system (rollbaserad åtkomstkontroll) som gör att du kan auktorisera dina databegäranden med en detaljerad rollbaserad behörighetsmodell. Användare och roller finns i en databas och hanteras med hjälp av Azure CLI, Azure PowerShell eller Azure Resource Manager (ARM).
Begrepp
Resurs
En resurs är en samling eller databas som vi tillämpar åtkomstkontrollregler på.
Privilegier
Behörigheter är åtgärder som kan utföras på en specifik resurs. Till exempel "läsåtkomst till samling xyz". Behörigheter tilldelas till en specifik roll.
Roll
En roll har en eller flera behörigheter. Roller tilldelas till användare (noll eller fler) så att de kan utföra de åtgärder som definieras i dessa privilegier. Roller lagras i en enda databas.
Granskning av diagnostiklogg
En annan kolumn med namnet userId
har lagts till i MongoRequests
tabellen i Azure Portal diagnostikfunktion. Den här kolumnen identifierar vilken användare som utförde vilken dataplansåtgärd. Värdet i den här kolumnen är tomt när RBAC inte är aktiverat.
Tillgängliga privilegier
Fråga och skriva
- find
- insert
- ta bort
- update
Ändra strömmar
- changeStream
Databashantering
- createCollection
- createIndex
- dropCollection
- killCursors
- killAnyCursor
Serveradministration
- dropDatabase
- dropIndex
- reIndex
Diagnostik
- collStats
- dbStats
- listDatabases
- listCollections
- listIndexes
Inbyggda roller
De här rollerna finns redan i varje databas och behöver inte skapas.
read |
readWrite |
dbAdmin |
dbOwner |
|
---|---|---|---|---|
changeStream |
✅ Ja | ✅ Ja | ✅ Ja | ✅ Ja |
collStats |
✅ Ja | ✅ Ja | ✅ Ja | ✅ Ja |
listCollections |
✅ Ja | ✅ Ja | ✅ Ja | ✅ Ja |
listIndexes |
✅ Ja | ✅ Ja | ✅ Ja | ✅ Ja |
createCollection |
✖️ Nej | ✅ Ja | ✅ Ja | ✅ Ja |
createIndex |
✖️ Nej | ✅ Ja | ✅ Ja | ✅ Ja |
dropCollection |
✖️ Nej | ✅ Ja | ✅ Ja | ✅ Ja |
dbStats |
✖️ Nej | ✖️ Nej | ✅ Ja | ✅ Ja |
dropDatabase |
✖️ Nej | ✖️ Nej | ✅ Ja | ✅ Ja |
reIndex |
✖️ Nej | ✖️ Nej | ✅ Ja | ✅ Ja |
find |
✅ Ja | ✅ Ja | ✖️ Nej | ✅ Ja |
killCursors |
✅ Ja | ✅ Ja | ✖️ Nej | ✅ Ja |
dropIndex |
✖️ Nej | ✅ Ja | ✅ Ja | ✅ Ja |
insert |
✖️ Nej | ✅ Ja | ✖️ Nej | ✅ Ja |
remove |
✖️ Nej | ✅ Ja | ✖️ Nej | ✅ Ja |
update |
✖️ Nej | ✅ Ja | ✖️ Nej | ✅ Ja |
Konfiguration av Azure CLI (snabbstart)
Vi rekommenderar att du använder cmd när du använder Windows.
- Kontrollera att du har den senaste CLI-versionen (inte tillägget) installerad lokalt. prova
az upgrade
kommandot. - Ansluta till din prenumeration.
az cloud set -n AzureCloud
az login
az account set --subscription <your subscription ID>
- Aktivera RBAC-funktionen på ditt befintliga API för MongoDB-databaskontot. Du måste lägga till funktionen "EnableMongoRoleBasedAccessControl" i ditt databaskonto. RBAC kan också aktiveras via fliken Funktioner i Azure Portal i stället. Om du föredrar ett nytt databaskonto i stället skapar du ett nytt databaskonto med RBAC-funktionen inställd på true.
az cosmosdb create -n <account_name> -g <azure_resource_group> --kind MongoDB --capabilities EnableMongoRoleBasedAccessControl
- Skapa en databas som användarna kan ansluta till i Azure Portal.
- Skapa en RBAC-användare med inbyggd läsroll.
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>\"}]}
Autentisera med 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>")
Autentisera med Node.js drivrutin
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 });
Autentisera med Java-drivrutin
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);
Autentisera med 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"
Autentisera med 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>";
Azure CLI RBAC-kommandon
RBAC-hanteringskommandona fungerar bara med nyare versioner av Azure CLI installerat. Se snabbstarten ovan om hur du kommer igång.
Skapa rolldefinition
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\":[]}
Skapa roll genom att skicka JSON-filtext
az cosmosdb mongodb role definition create --account-name <account-name> --resource-group <resource-group-name> --body role.json
JSON-fil
{
"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": []
}
Uppdatera rolldefinition
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\":[]}
Uppdatera rollen genom att skicka JSON-filtext
az cosmosdb mongodb role definition update --account-name <account-name> --resource-group <resource-group-name> --body role.json
JSON-fil
{
"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": []
}
Visa en lista över roller
az cosmosdb mongodb role definition list --account-name <account-name> --resource-group <resource-group-name>
Kontrollera om rollen finns
az cosmosdb mongodb role definition exists --account-name <account-name> --resource-group <resource-group-name> --id test.My_Read_Only_Role
Ta bort roll
az cosmosdb mongodb role definition delete --account-name <account-name> --resource-group <resource-group-name> --id test.My_Read_Only_Role
Skapa användardefinition
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\"}]}
Skapa användare genom att skicka JSON-filtext
az cosmosdb mongodb user definition create --account-name <account-name> --resource-group <resource-group-name> --body user.json
JSON-fil
{
"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"
}]
}
Uppdatera användardefinition
Om du vill uppdatera användarens lösenord skickar du det nya lösenordet i lösenordsfältet.
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\"}]}
Uppdatera användaren genom att skicka JSON-filtexten
az cosmosdb mongodb user definition update --account-name <account-name> --resource-group <resource-group-name> --body user.json
JSON-fil
{
"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"
}]
}
Visa användare
az cosmosdb mongodb user definition list --account-name <account-name> --resource-group <resource-group-name>
Kontrollera om användaren finns
az cosmosdb mongodb user definition exists --account-name <account-name> --resource-group <resource-group-name> --id test.myName
Ta bort användare
az cosmosdb mongodb user definition delete --account-name <account-name> --resource-group <resource-group-name> --id test.myName
Begränsningar
- Antalet användare och roller som du kan skapa måste vara mindre än 10 000.
- Kommandona listCollections, listDatabaser, killCursors och currentOp är exkluderade från RBAC.
- Användare och roller i databaser stöds inte.
- En användares lösenord kan bara anges/återställas via Azure CLI/Azure PowerShell.
- Konfigurering av användare och roller stöds endast via Azure CLI/PowerShell.
- Det går inte att inaktivera autentisering med primär/sekundär nyckel. Vi rekommenderar att du roterar dina nycklar för att förhindra åtkomst vid aktivering av RBAC.
- RBAC-principer för Cosmos DB för Mongo DB RU återställs inte automatiskt efter en återställningsåtgärd. Du måste konfigurera om dessa principer när återställningsprocessen är klar.
Vanliga frågor (FAQ)
Går det att hantera rolldefinitioner och rolltilldelningar från Azure-portalen?
Azure Portal stöd för rollhantering är inte tillgängligt. RBAC kan dock aktiveras via funktionsfliken i Azure-portalen.
Hur gör jag för att ändra en användares lösenord?
Uppdatera användardefinitionen med det nya lösenordet.
Vilka Cosmos DB for MongoDB-versioner stöder rollbaserad åtkomstkontroll (RBAC)?
Version 3.6 och senare stöder RBAC.
Nästa steg
- Läs mer om RBAC för Azure Cosmos DB-hantering.