Share via


Op rollen gebaseerd toegangsbeheer configureren in Azure Cosmos DB voor MongoDB

VAN TOEPASSING OP: MongoDB

Dit artikel gaat over op rollen gebaseerd toegangsbeheer voor gegevensvlakbewerkingen in Azure Cosmos DB voor MongoDB.

Als u bewerkingen in het beheervlak gebruikt, raadpleegt u op rollen gebaseerd toegangsbeheer dat is toegepast op het artikel over bewerkingen van het beheervlak.

Azure Cosmos DB voor MongoDB biedt een ingebouwd RBAC-systeem (op rollen gebaseerd toegangsbeheer) waarmee u uw gegevensaanvragen kunt autoriseren met een fijnmazig, op rollen gebaseerd machtigingsmodel. Gebruikers en rollen bevinden zich in een database en worden beheerd met behulp van de Azure CLI, Azure PowerShell of Azure Resource Manager (ARM).

Concepten

Bron

Een resource is een verzameling of database waarop we toegangsbeheerregels toepassen.

Rechten

Bevoegdheden zijn acties die kunnen worden uitgevoerd op een specifieke resource. Bijvoorbeeld 'leestoegang tot verzameling xyz'. Bevoegdheden worden toegewezen aan een specifieke rol.

Role

Een rol heeft een of meer bevoegdheden. Rollen worden toegewezen aan gebruikers (nul of meer) om ze in staat te stellen de acties uit te voeren die zijn gedefinieerd in deze bevoegdheden. Rollen worden opgeslagen in één database.

Controle van diagnostische logboeken

Er is een andere kolom userId toegevoegd aan de MongoRequests tabel in de diagnostische functie van Azure Portal. In deze kolom wordt aangegeven welke gebruiker welke gegevensplanbewerking heeft uitgevoerd. De waarde in deze kolom is leeg wanneer RBAC niet is ingeschakeld.

Beschikbare bevoegdheden

Query's uitvoeren en schrijven

  • find
  • insert
  • remove
  • update

Streams wijzigen

  • changeStream

Databasebeheer

  • createCollection
  • createIndex
  • dropCollection
  • killCursors
  • killAnyCursor

Serverbeheer

  • dropDatabase
  • dropIndex
  • reIndex

Diagnostiek

  • collStats
  • dbStats
  • listDatabases
  • listCollections
  • listIndexes

Ingebouwde rollen

Deze rollen bestaan al in elke database en hoeven niet te worden gemaakt.

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 ✖️ Nee ✅ Ja ✅ Ja ✅ Ja
createIndex ✖️ Nee ✅ Ja ✅ Ja ✅ Ja
dropCollection ✖️ Nee ✅ Ja ✅ Ja ✅ Ja
dbStats ✖️ Nee ✖️ Nee ✅ Ja ✅ Ja
dropDatabase ✖️ Nee ✖️ Nee ✅ Ja ✅ Ja
reIndex ✖️ Nee ✖️ Nee ✅ Ja ✅ Ja
find ✅ Ja ✅ Ja ✖️ Nee ✅ Ja
killCursors ✅ Ja ✅ Ja ✖️ Nee ✅ Ja
dropIndex ✖️ Nee ✅ Ja ✅ Ja ✅ Ja
insert ✖️ Nee ✅ Ja ✖️ Nee ✅ Ja
remove ✖️ Nee ✅ Ja ✖️ Nee ✅ Ja
update ✖️ Nee ✅ Ja ✖️ Nee ✅ Ja

Azure CLI instellen (quickstart)

U wordt aangeraden de cmd te gebruiken bij het gebruik van Windows.

  1. Zorg ervoor dat de meest recente CLI-versie (geen extensie) lokaal is geïnstalleerd. probeer az upgrade de opdracht.
  2. Maak verbinding met uw abonnement.
az cloud set -n  AzureCloud
az login
az account set --subscription <your subscription ID>
  1. Schakel de RBAC-functie in voor uw bestaande API voor een MongoDB-databaseaccount. U moet de mogelijkheid EnableMongoRoleBasedAccessControl toevoegen aan uw databaseaccount. RBAC kan ook worden ingeschakeld via het tabblad Functies in Azure Portal. Als u liever een nieuw databaseaccount hebt, maakt u een nieuw databaseaccount met de RBAC-mogelijkheid ingesteld op waar.
az cosmosdb create -n <account_name> -g <azure_resource_group> --kind MongoDB --capabilities EnableMongoRoleBasedAccessControl
  1. Maak een database waarmee gebruikers verbinding kunnen maken in Azure Portal.
  2. Maak een RBAC-gebruiker met een ingebouwde leesrol.
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>\"}]}

Verifiëren met 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>")

Verifiëren met Node.js stuurprogramma

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 });

Verifiëren met java-stuurprogramma

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);

Verifiëren met 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"

Verifiëren met 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-opdrachten

De RBAC-beheeropdrachten werken alleen met nieuwere versies van de Azure CLI die is geïnstalleerd. Zie de quickstart hierboven voor informatie over hoe u aan de slag kunt gaan.

Roldefinitie maken

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

Rol maken door de hoofdtekst van het JSON-bestand door te geven

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

Roldefinitie bijwerken

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

Rol bijwerken door de hoofdtekst van het JSON-bestand door te geven

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

Rollen weergeven

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

Controleren of de rol bestaat

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

Rol verwijderen

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

Gebruikersdefinitie maken

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

Een gebruiker maken door de hoofdtekst van het JSON-bestand door te geven

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

Gebruikersdefinitie bijwerken

Als u het wachtwoord van de gebruiker wilt bijwerken, verzendt u het nieuwe wachtwoord in het wachtwoordveld.

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

Gebruiker bijwerken door de hoofdtekst van het JSON-bestand door te geven

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

Gebruikers weergeven

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

Controleren of de gebruiker bestaat

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

Gebruiker verwijderen

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

Beperkingen

  • Het aantal gebruikers en rollen dat u kunt maken, moet kleiner zijn dan 10.000.
  • De opdrachten listCollections, listDatabases, killCursors en currentOp zijn uitgesloten van RBAC.
  • Gebruikers en rollen tussen databases worden niet ondersteund.
  • Het wachtwoord van een gebruiker kan alleen (opnieuw) worden ingesteld via de Azure CLI/Azure PowerShell.
  • Het configureren van Gebruikers en Rollen wordt alleen ondersteund via Azure CLI/PowerShell.
  • Het uitschakelen van verificatie van primaire/secundaire sleutels wordt niet ondersteund. We raden u aan uw sleutels te roteren om toegang te voorkomen bij het inschakelen van RBAC.
  • RBAC-beleid voor Cosmos DB voor Mongo DB RU wordt niet automatisch opnieuw ingesteld na een herstelbewerking. U moet dit beleid opnieuw configureren nadat het herstelproces is voltooid.

Veelgestelde vragen (FAQ's)

Is het mogelijk om roldefinities en roltoewijzingen te beheren vanuit de Azure Portal?

Azure Portal-ondersteuning voor rolbeheer is niet beschikbaar. RBAC kan echter worden ingeschakeld via het tabblad Functies in de Azure-portal.

Hoe kan ik het wachtwoord van een gebruiker wijzigen?

Werk de gebruikersdefinitie bij met het nieuwe wachtwoord.

Welke Cosmos DB voor MongoDB-versies ondersteunen op rollen gebaseerd toegangsbeheer (RBAC)?

Versies 3.6 en hoger ondersteunen RBAC.

Volgende stappen