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.
- Zorg ervoor dat de meest recente CLI-versie (geen extensie) lokaal is geïnstalleerd. probeer
az upgrade
de opdracht. - Maak verbinding met uw abonnement.
az cloud set -n AzureCloud
az login
az account set --subscription <your subscription ID>
- 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
- Maak een database waarmee gebruikers verbinding kunnen maken in Azure Portal.
- 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
- Meer informatie over RBAC voor Azure Cosmos DB-beheer.