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
- update
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.
read |
readWrite |
dbAdmin |
dbOwner |
|
---|---|---|---|---|
changeStream |
✅ Ya | ✅ Ya | ✅ Ya | ✅ Ya |
collStats |
✅ Ya | ✅ Ya | ✅ Ya | ✅ Ya |
listCollections |
✅ Ya | ✅ Ya | ✅ Ya | ✅ Ya |
listIndexes |
✅ Ya | ✅ Ya | ✅ Ya | ✅ Ya |
createCollection |
✖️ Tidak | ✅ Ya | ✅ Ya | ✅ Ya |
createIndex |
✖️ Tidak | ✅ Ya | ✅ Ya | ✅ Ya |
dropCollection |
✖️ Tidak | ✅ Ya | ✅ Ya | ✅ Ya |
dbStats |
✖️ Tidak | ✖️ Tidak | ✅ Ya | ✅ Ya |
dropDatabase |
✖️ Tidak | ✖️ Tidak | ✅ Ya | ✅ Ya |
reIndex |
✖️ Tidak | ✖️ Tidak | ✅ Ya | ✅ Ya |
find |
✅ Ya | ✅ Ya | ✖️ Tidak | ✅ Ya |
killCursors |
✅ Ya | ✅ Ya | ✖️ Tidak | ✅ Ya |
dropIndex |
✖️ Tidak | ✅ Ya | ✅ Ya | ✅ Ya |
insert |
✖️ Tidak | ✅ Ya | ✖️ Tidak | ✅ Ya |
remove |
✖️ Tidak | ✅ Ya | ✖️ Tidak | ✅ Ya |
update |
✖️ Tidak | ✅ Ya | ✖️ Tidak | ✅ Ya |
Penyiapan Azure CLI (Mulai Cepat)
Sebaiknya gunakan cmd saat menggunakan Windows.
- Pastikan Anda memiliki versi CLI terbaru (bukan ekstensi) yang terinstal secara lokal. coba perintah
az upgrade
. - Hubungkan ke langganan Anda.
az cloud set -n AzureCloud
az login
az account set --subscription <your subscription ID>
- 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
- Buat database untuk disambungkan pengguna di portal Azure.
- 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"
Mengautentikasi menggunakan 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>";
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
- Pelajari selengkapnya tentang RBAC untuk manajemen Azure Cosmos DB.