Mengonfigurasi kontrol akses berbasis peran di Azure Cosmos DB for MongoDB

BERLAKU UNTUK: MongoDB

Artikel ini tentang kontrol akses berbasis peran untuk operasi sarana data di Azure Cosmos DB untuk MongoDB.

Jika Anda menggunakan operasi bidang manajemen, lihat artikel kontrol akses berbasis peran yang diterapkan ke operasi sarana manajemen Anda.

Azure Cosmos DB for MongoDB mengekspos sistem kontrol akses berbasis peran (RBAC) bawaan yang memungkinkan Anda mengotorisasi permintaan data Anda dengan model izin berbasis peran yang halus. Pengguna dan peran berada dalam database dan dikelola menggunakan Azure CLI, Azure PowerShell, atau Azure Resource Manager (ARM).

Konsep

Sumber daya

Sumber daya adalah kumpulan atau database tempat kami menerapkan aturan kontrol akses.

Hak Istimewa

Hak istimewa adalah tindakan yang dapat dilakukan pada sumber daya tertentu. Misalnya, "akses baca ke koleksi xyz". Hak istimewa ditetapkan ke peran tertentu.

Peran

Peran memiliki satu atau beberapa hak istimewa. Peran ditetapkan kepada pengguna (nol atau lebih) untuk memungkinkan mereka melakukan tindakan yang ditentukan dalam hak istimewa tersebut. Peran disimpan dalam satu database.

Audit log diagnostik

Kolom lain yang disebut userId telah ditambahkan ke MongoRequests tabel di fitur Diagnostik Portal Azure. Kolom ini mengidentifikasi pengguna mana yang melakukan operasi paket data mana. Nilai dalam kolom ini kosong ketika RBAC tidak diaktifkan.

Hak Istimewa yang Tersedia

Kueri dan Tulis

  • cari
  • insert
  • buka
  • pembaruan

Mengubah Stream

  • changeStream

Manajemen Database

  • createCollection
  • createIndex
  • dropCollection
  • killCursors
  • killAnyCursor

Administrasi Server

  • dropDatabase
  • dropIndex
  • reIndex

Diagnostik

  • collStats
  • dbStats
  • listDatabases
  • listCollections
  • listIndexes

Peran Bawaan

Peran ini sudah ada di setiap database dan tidak perlu dibuat.

baca

Memiliki hak istimewa berikut: changeStream, collStats, find, killCursors, listIndexes, listCollections

readWrite

Memiliki hak istimewa berikut: collStats, createCollection, dropCollection, createIndex, dropIndex, find, insert, killCursors, listIndexes, listCollections, remove, update

dbAdmin

Memiliki hak istimewa berikut: collStats, createCollection, createIndex, dbStats, dropCollection, dropDatabase, dropIndex, listCollections, listIndexes, reIndex

dbOwner

Memiliki hak istimewa berikut: collStats, createCollection, createIndex, dbStats, dropCollection, dropDatabase, dropIndex, listCollections, listIndexes, reIndex, find, insert, killCursors, listIndexes, listCollections, remove, update

Penyiapan Azure CLI (Mulai Cepat)

Sebaiknya gunakan cmd saat menggunakan Windows.

  1. Pastikan Anda memiliki versi CLI terbaru (bukan ekstensi) yang terinstal secara lokal. coba perintah az upgrade.
  2. Hubungkan ke langganan Anda.
az cloud set -n  AzureCloud
az login
az account set --subscription <your subscription ID>
  1. Aktifkan kemampuan RBAC pada API yang ada untuk akun database MongoDB. Anda perlu menambahkan kemampuan "EnableMongoRoleBasedAccessControl" ke akun database Anda. RBAC juga dapat diaktifkan melalui tab fitur di portal Azure sebagai gantinya. Jika Anda lebih suka akun database baru, buat akun database baru dengan kemampuan RBAC yang diatur ke true.
az cosmosdb create -n <account_name> -g <azure_resource_group> --kind MongoDB --capabilities EnableMongoRoleBasedAccessControl
  1. Buat database untuk disambungkan pengguna di portal Azure.
  2. Buat pengguna RBAC dengan peran baca bawaan.
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>\"}]}

Mengautentikasi menggunakan 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>")

Mengautentikasi menggunakan driver 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 });

Mengautentikasi menggunakan driver 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);

Mengautentikasi menggunakan 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"

Perintah Azure CLI RBAC

Perintah manajemen RBAC hanya akan berfungsi dengan versi Azure CLI yang lebih baru yang diinstal. Lihat Mulai Cepat di atas tentang cara memulai.

Buat Definisi Peran

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

Buat Peran dengan meneruskan isi file JSON

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

Perbarui Definisi Peran

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

Perbarui peran dengan meneruskan isi file JSON

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

Mencantumkan peran

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

Periksa apakah peran ada

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

Hapus peran

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

Membuat definisi pengguna

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

Membuat pengguna dengan meneruskan isi file JSON

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

Memperbarui definisi pengguna

Untuk memperbarui kata sandi pengguna, kirim kata sandi baru di bidang kata sandi.

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

Perbarui pengguna dengan melewati isi file JSON

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

Mencantumkan pengguna

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

Periksa apakah pengguna ada

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

Menghapus pengguna

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

Batasan

  • Jumlah pengguna dan peran yang dapat Anda buat harus sama dengan kurang dari 10.000.
  • Perintah listCollections, listDatabases, killCursors, dan currentOp dikecualikan dari RBAC.
  • Pengguna dan Peran di seluruh database tidak didukung.
  • Kata sandi pengguna hanya dapat diatur/direset melalui Azure CLI/Azure PowerShell.
  • Mengonfigurasi Pengguna dan Peran hanya didukung melalui Azure CLI/PowerShell.
  • Menonaktifkan autentikasi kunci primer/sekunder tidak didukung. Sebaiknya putar kunci Anda untuk mencegah akses saat mengaktifkan RBAC.
  • Kebijakan RBAC untuk Cosmos DB untuk Mongo DB RU tidak akan dipulihkan secara otomatis setelah operasi pemulihan. Anda akan diminta untuk mengonfigurasi ulang kebijakan ini setelah proses pemulihan selesai.

Pertanyaan Umum

Apakah mungkin untuk mengelola definisi peran dan penetapan peran dari portal Microsoft Azure?

portal Azure dukungan untuk manajemen peran tidak tersedia. Namun, RBAC dapat diaktifkan melalui tab fitur di portal Azure.

Bagaimana saya dapat mengubah kata sandi pengguna?

Perbarui definisi pengguna dengan kata sandi baru.

Versi Cosmos DB for MongoDB apa yang mendukung kontrol akses berbasis peran (RBAC)?

Versi 3.6 dan yang lebih tinggi mendukung RBAC.

Langkah berikutnya