Konfigurowanie kontroli dostępu na podstawie ról w usłudze Azure Cosmos DB for MongoDB
DOTYCZY: MongoDB
Ten artykuł dotyczy kontroli dostępu opartej na rolach dla operacji płaszczyzny danych w usłudze Azure Cosmos DB dla bazy danych MongoDB.
Jeśli używasz operacji płaszczyzny zarządzania, zobacz artykuł Kontrola dostępu oparta na rolach zastosowana do operacji płaszczyzny zarządzania.
Usługa Azure Cosmos DB dla bazy danych MongoDB udostępnia wbudowany system kontroli dostępu opartej na rolach (RBAC), który umożliwia autoryzowanie żądań danych za pomocą szczegółowego, opartego na rolach modelu uprawnień. Użytkownicy i role znajdują się w bazie danych i są zarządzane przy użyciu interfejsu wiersza polecenia platformy Azure, programu Azure PowerShell lub usługi Azure Resource Manager (ARM).
Pojęcia
Zasób
Zasób to kolekcja lub baza danych, do której stosujemy reguły kontroli dostępu.
Uprawnienia
Uprawnienia to akcje, które można wykonać na określonym zasobie. Na przykład "odczyt dostępu do kolekcji xyz". Uprawnienia są przypisywane do określonej roli.
Rola
Rola ma co najmniej jedno uprawnienie. Role są przypisywane do użytkowników (zero lub więcej), aby umożliwić im wykonywanie akcji zdefiniowanych w tych uprawnieniach. Role są przechowywane w jednej bazie danych.
Inspekcja dziennika diagnostycznego
Kolejna kolumna o nazwie userId
została dodana do MongoRequests
tabeli w funkcji diagnostyki witryny Azure Portal. Ta kolumna określa, który użytkownik wykonał operację planu danych. Wartość w tej kolumnie jest pusta, gdy kontrola dostępu oparta na rolach nie jest włączona.
Dostępne uprawnienia
Wykonywanie zapytań i zapisywanie
- find
- insert
- remove
- update
Zmienianie strumieni
- changeStream
Zarządzanie bazami danych
- createCollection
- createIndex
- dropCollection
- killCursors
- killAnyCursor
Administracja serwerem
- dropDatabase
- dropIndex
- reIndex
Diagnostyka
- collStats
- dbStats
- listDatabases
- listCollections
- listIndexes
Wbudowane role
Te role już istnieją w każdej bazie danych i nie trzeba ich tworzyć.
read |
readWrite |
dbAdmin |
dbOwner |
|
---|---|---|---|---|
changeStream |
✅ Tak | ✅ Tak | ✅ Tak | ✅ Tak |
collStats |
✅ Tak | ✅ Tak | ✅ Tak | ✅ Tak |
listCollections |
✅ Tak | ✅ Tak | ✅ Tak | ✅ Tak |
listIndexes |
✅ Tak | ✅ Tak | ✅ Tak | ✅ Tak |
createCollection |
✖️ Nie | ✅ Tak | ✅ Tak | ✅ Tak |
createIndex |
✖️ Nie | ✅ Tak | ✅ Tak | ✅ Tak |
dropCollection |
✖️ Nie | ✅ Tak | ✅ Tak | ✅ Tak |
dbStats |
✖️ Nie | ✖️ Nie | ✅ Tak | ✅ Tak |
dropDatabase |
✖️ Nie | ✖️ Nie | ✅ Tak | ✅ Tak |
reIndex |
✖️ Nie | ✖️ Nie | ✅ Tak | ✅ Tak |
find |
✅ Tak | ✅ Tak | ✖️ Nie | ✅ Tak |
killCursors |
✅ Tak | ✅ Tak | ✖️ Nie | ✅ Tak |
dropIndex |
✖️ Nie | ✅ Tak | ✅ Tak | ✅ Tak |
insert |
✖️ Nie | ✅ Tak | ✖️ Nie | ✅ Tak |
remove |
✖️ Nie | ✅ Tak | ✖️ Nie | ✅ Tak |
update |
✖️ Nie | ✅ Tak | ✖️ Nie | ✅ Tak |
Konfiguracja interfejsu wiersza polecenia platformy Azure (Szybki start)
Zalecamy używanie narzędzia cmd w przypadku korzystania z systemu Windows.
- Upewnij się, że masz zainstalowaną lokalnie najnowszą wersję interfejsu wiersza polecenia (nie rozszerzenie). spróbuj wykonać
az upgrade
polecenie. - Nawiąż połączenie ze swoją subskrypcją.
az cloud set -n AzureCloud
az login
az account set --subscription <your subscription ID>
- Włącz funkcję RBAC na istniejącym koncie bazy danych mongoDB interfejsu API. Musisz dodać możliwość "EnableMongoRoleBasedAccessControl" do konta bazy danych. RBAC można również włączyć za pośrednictwem karty funkcje w witrynie Azure Portal. Jeśli zamiast tego wolisz nowe konto bazy danych, utwórz nowe konto bazy danych z funkcją RBAC ustawioną na wartość true.
az cosmosdb create -n <account_name> -g <azure_resource_group> --kind MongoDB --capabilities EnableMongoRoleBasedAccessControl
- Utwórz bazę danych dla użytkowników, z którymi będą się łączyć w witrynie Azure Portal.
- Utwórz użytkownika RBAC z wbudowaną rolą odczytu.
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>\"}]}
Uwierzytelnianie przy użyciu narzędzia 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>")
Uwierzytelnianie przy użyciu sterownika Node.js
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 });
Uwierzytelnianie przy użyciu sterownika Java
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);
Uwierzytelnianie przy użyciu protokołu 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"
Uwierzytelnianie przy użyciu narzędzia 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>";
Polecenia RBAC interfejsu wiersza polecenia platformy Azure
Polecenia zarządzania kontrolą dostępu opartej na rolach będą działać tylko z nowszymi wersjami zainstalowanego interfejsu wiersza polecenia platformy Azure. Zapoznaj się z powyższym przewodnikiem Szybki start, aby dowiedzieć się, jak rozpocząć pracę.
Tworzenie definicji roli
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\":[]}
Tworzenie roli przez przekazanie treści pliku JSON
az cosmosdb mongodb role definition create --account-name <account-name> --resource-group <resource-group-name> --body role.json
Plik JSON
{
"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": []
}
Aktualizowanie definicji roli
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\":[]}
Aktualizowanie roli przez przekazanie treści pliku JSON
az cosmosdb mongodb role definition update --account-name <account-name> --resource-group <resource-group-name> --body role.json
Plik JSON
{
"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": []
}
Wyświetlanie listy ról
az cosmosdb mongodb role definition list --account-name <account-name> --resource-group <resource-group-name>
Sprawdzanie, czy rola istnieje
az cosmosdb mongodb role definition exists --account-name <account-name> --resource-group <resource-group-name> --id test.My_Read_Only_Role
Usuwanie roli
az cosmosdb mongodb role definition delete --account-name <account-name> --resource-group <resource-group-name> --id test.My_Read_Only_Role
Tworzenie definicji użytkownika
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\"}]}
Tworzenie użytkownika przez przekazanie treści pliku JSON
az cosmosdb mongodb user definition create --account-name <account-name> --resource-group <resource-group-name> --body user.json
Plik JSON
{
"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"
}]
}
Aktualizowanie definicji użytkownika
Aby zaktualizować hasło użytkownika, wyślij nowe hasło w polu hasła.
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\"}]}
Aktualizowanie użytkownika przez przekazanie treści pliku JSON
az cosmosdb mongodb user definition update --account-name <account-name> --resource-group <resource-group-name> --body user.json
Plik JSON
{
"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"
}]
}
Wyświetlanie użytkowników
az cosmosdb mongodb user definition list --account-name <account-name> --resource-group <resource-group-name>
Sprawdzanie, czy użytkownik istnieje
az cosmosdb mongodb user definition exists --account-name <account-name> --resource-group <resource-group-name> --id test.myName
Usuwanie użytkownika
az cosmosdb mongodb user definition delete --account-name <account-name> --resource-group <resource-group-name> --id test.myName
Ograniczenia
- Możliwa liczba użytkowników i ról do utworzenia musi być mniejsza niż 10 000.
- Polecenia listCollections, listDatabases, killCursors i currentOp są wykluczone z kontroli dostępu na podstawie ról.
- Użytkownicy i role w bazach danych nie są obsługiwane.
- Hasło użytkownika można ustawić/zresetować tylko za pomocą interfejsu wiersza polecenia platformy Azure / programu Azure PowerShell.
- Konfigurowanie użytkowników i ról jest obsługiwane tylko za pomocą interfejsu wiersza polecenia platformy Azure / programu PowerShell.
- Wyłączenie uwierzytelniania klucza podstawowego/pomocniczego nie jest obsługiwane. Zalecamy rotację kluczy, aby uniemożliwić dostęp podczas włączania kontroli dostępu na podstawie ról.
- Zasady kontroli dostępu opartej na rolach dla usługi Cosmos DB dla jednostek RU bazy danych Mongo DB nie zostaną automatycznie przywrócone po operacji przywracania. Po zakończeniu procesu przywracania konieczne będzie ponowne skonfigurowanie tych zasad.
Często zadawane pytania (FAQ)
Czy można zarządzać definicjami ról i przypisaniami ról z poziomu witryny Azure Portal?
Obsługa witryny Azure Portal na potrzeby zarządzania rolami nie jest dostępna. Można jednak włączyć kontrolę dostępu na podstawie ról za pomocą karty Funkcje w witrynie Azure Portal.
Jak mogę zmienić hasło użytkownika?
Zaktualizuj definicję użytkownika przy użyciu nowego hasła.
Jakie wersje usługi Cosmos DB for MongoDB obsługują kontrolę dostępu na postawie ról (RBAC)?
Funkcja RBAC jest obsługiwana w wersji 3.6 i nowszych.
Następne kroki
- Dowiedz się więcej o kontroli dostępu opartej na rolach na potrzeby zarządzania usługą Azure Cosmos DB.