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-portalens 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 Flöden

  • 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.

läsa

Har följande behörigheter: changeStream, collStats, find, killCursors, listIndexes, listCollections

readWrite

Har följande behörigheter: collStats, createCollection, dropCollection, createIndex, dropIndex, find, insert, killCursors, listIndexes, listCollections, remove, update

dbAdmin

Har följande behörigheter: collStats, createCollection, createIndex, dbStats, dropCollection, dropDatabase, dropIndex, listCollections, listIndexes, reIndex

dbOwner

Har följande behörigheter: collStats, createCollection, createIndex, dbStats, dropCollection, dropDatabase, dropIndex, listCollections, listIndexes, reIndex, find, insert, killCursors, listIndexes, listCollections, remove, update

Konfiguration av Azure CLI (snabbstart)

Vi rekommenderar att du använder cmd när du använder Windows.

  1. Kontrollera att du har den senaste CLI-versionen (inte tillägget) installerad lokalt. prova az upgrade kommandot.
  2. Ansluta till din prenumeration.
az cloud set -n  AzureCloud
az login
az account set --subscription <your subscription ID>
  1. 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-portalen 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
  1. Skapa en databas som användarna kan ansluta till i Azure-portalen.
  2. 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-drivrutinen

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"

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?

Stöd för rollhantering i Azure-portalen ä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