Udostępnij za pośrednictwem


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.

  1. Upewnij się, że masz zainstalowaną lokalnie najnowszą wersję interfejsu wiersza polecenia (nie rozszerzenie). spróbuj wykonać az upgrade polecenie.
  2. Nawiąż połączenie ze swoją subskrypcją.
az cloud set -n  AzureCloud
az login
az account set --subscription <your subscription ID>
  1. 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
  1. Utwórz bazę danych dla użytkowników, z którymi będą się łączyć w witrynie Azure Portal.
  2. 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