Menggunakan kontrol akses berbasis peran sarana kontrol dengan Azure Cosmos DB untuk NoSQL
BERLAKU UNTUK: NoSQL
Diagram urutan panduan penyebaran termasuk lokasi ini, secara berurutan: Gambaran Umum, Konsep, Persiapan, Kontrol akses berbasis peran, Jaringan, dan Referensi. Lokasi 'Kontrol akses berbasis peran' saat ini disorot.
Artikel ini menjelaskan langkah-langkah untuk memberikan akses identitas untuk mengelola akun Azure Cosmos DB for NoSQL dan sumber dayanya.
Penting
Langkah-langkah dalam artikel ini hanya mencakup akses sarana kontrol untuk melakukan operasi pada akun itu sendiri dari sumber daya apa pun dalam hierarki akun. Untuk mempelajari cara mengelola peran, definisi, dan penugasan untuk sarana kontrol, lihat memberikan akses berbasis peran bidang data.
Prasyarat
- Akun Azure dengan langganan aktif. Buat akun secara gratis.
- Akun Azure Cosmos DB yang sudah ada.
- Satu atau beberapa identitas yang sudah ada di ID Microsoft Entra.
Gunakan lingkungan Bash di Azure Cloud Shell. Untuk informasi selengkapnya, lihat Mulai Cepat untuk Bash di Azure Cloud Shell.
Jika Anda lebih suka menjalankan perintah referensi CLI secara lokal, instal Azure CLI. Jika Anda menjalankan Windows atau macOS, pertimbangkan untuk menjalankan Azure CLI dalam kontainer Docker. Untuk informasi lebih lanjut, lihat Cara menjalankan Azure CLI di kontainer Docker.
Jika Anda menggunakan instalasi lokal, masuk ke Azure CLI dengan menggunakan perintah login az. Untuk menyelesaikan proses autentikasi, ikuti langkah-langkah yang ditampilkan di terminal Anda. Untuk opsi masuk lainnya, lihat Masuk dengan Azure CLI.
Saat Anda diminta, instal ekstensi Azure CLI pada penggunaan pertama. Untuk informasi selengkapnya tentang ekstensi, lihat Menggunakan ekstensi dengan Azure CLI.
Jalankan versi az untuk menemukan versi dan pustaka dependen yang diinstal. Untuk meningkatkan ke versi terbaru, jalankan peningkatan az.
- Jika Anda memilih untuk menggunakan Azure PowerShell secara lokal:
- Instal versi terbaru modul Az PowerShell.
- Sambungkan ke akun Azure Anda menggunakan cmdlet Connect-AzAccount.
- Jika Anda memilih untuk menggunakan Azure Cloud Shell:
- Lihat Gambaran Umum Azure Cloud Shell untuk informasi selengkapnya.
Menyiapkan definisi peran
Pertama, Anda harus menyiapkan definisi peran dengan daftar actions
untuk memberikan akses untuk mengelola sumber daya akun di Azure Cosmos DB.
Cantumkan semua definisi peran yang terkait dengan akun Azure Cosmos DB Anda menggunakan az role definition list
. Tinjau output dan temukan definisi peran bernama Kontributor Data Bawaan Cosmos DB. Output berisi pengidentifikasi unik definisi peran dalam id
properti . Rekam nilai ini karena diperlukan untuk digunakan dalam langkah penetapan nanti dalam panduan ini.
az role definition list \
--name "Cosmos DB Operator"
[
{
"assignableScopes": [
"/"
],
"description": "Lets you manage Azure Cosmos DB accounts, but not access data in them. Prevents access to account keys and connection strings.",
"id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/providers/Microsoft.Authorization/roleDefinitions/230815da-be43-4aae-9cb4-875f7bd000aa",
"name": "230815da-be43-4aae-9cb4-875f7bd000aa",
"permissions": [
{
"actions": [
"Microsoft.DocumentDb/databaseAccounts/*",
"Microsoft.Insights/alertRules/*",
"Microsoft.Authorization/*/read",
"Microsoft.ResourceHealth/availabilityStatuses/read",
"Microsoft.Resources/deployments/*",
"Microsoft.Resources/subscriptions/resourceGroups/read",
"Microsoft.Support/*",
"Microsoft.Network/virtualNetworks/subnets/joinViaServiceEndpoint/action"
],
"condition": null,
"conditionVersion": null,
"dataActions": [],
"notActions": [
"Microsoft.DocumentDB/databaseAccounts/dataTransferJobs/*",
"Microsoft.DocumentDB/databaseAccounts/readonlyKeys/*",
"Microsoft.DocumentDB/databaseAccounts/regenerateKey/*",
"Microsoft.DocumentDB/databaseAccounts/listKeys/*",
"Microsoft.DocumentDB/databaseAccounts/listConnectionStrings/*",
"Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/write",
"Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/delete",
"Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments/write",
"Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments/delete",
"Microsoft.DocumentDB/databaseAccounts/mongodbRoleDefinitions/write",
"Microsoft.DocumentDB/databaseAccounts/mongodbRoleDefinitions/delete",
"Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/write",
"Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/delete"
],
"notDataActions": []
}
],
"roleName": "Cosmos DB Operator",
"roleType": "BuiltInRole",
"type": "Microsoft.Authorization/roleDefinitions",
}
]
Catatan
Dalam contoh ini, nilainya id
adalah /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/providers/Microsoft.Authorization/roleDefinitions/230815da-be43-4aae-9cb4-875f7bd000aa
. Contoh ini menggunakan data fiktif dan pengidentifikasi Anda akan berbeda dari contoh ini. Namun, pengidentifikasi (230815da-be43-4aae-9cb4-875f7bd000aa
) unik secara global di semua definisi peran di Azure.
Masuk ke portal Azure (https://portal.azure.com).
Masukkan Grup sumber daya di bilah pencarian global.
Dalam Layanan, pilih Grup sumber daya.
Di panel Grup sumber daya, pilih grup sumber daya yang sudah ada.
Catatan
Contoh cuplikan
msdocs-identity-example
layar ini mencakup grup sumber daya. Nama grup sumber daya Anda yang sebenarnya mungkin berbeda.Di dalam panel untuk grup sumber daya, pilih Kontrol akses (IAM) di menu layanan.
Di panel Kontrol akses (IAM), pilih Peran.
Di bagian Peran , gunakan frasa pencarian Cosmos DB dan temukan definisi peran Operator Cosmos DB. Kemudian, pilih opsi Tampilan yang terkait dengan definisi tersebut.
Dalam dialog definisi peran Operator Cosmos DB, amati tindakan yang ditetapkan sebagai bagian dari definisi peran ini.
Tutup dialog definisi peran Operator Cosmos DB.
Gunakan Get-AzRoleDefinition
untuk mencantumkan semua definisi peran yang terkait dengan akun Azure Cosmos DB Anda. Tinjau output dan temukan definisi peran bernama Kontributor Data Bawaan Cosmos DB. Output berisi pengidentifikasi unik definisi peran dalam Id
properti . Rekam nilai ini karena diperlukan untuk digunakan dalam langkah penetapan nanti dalam panduan ini.
$parameters = @{
Name = "Cosmos DB Operator"
}
Get-AzRoleDefinition @parameters
Name : Cosmos DB Operator
Id : 230815da-be43-4aae-9cb4-875f7bd000aa
IsCustom : False
Description : Lets you manage Azure Cosmos DB accounts, but not access data in them. Prevents access to account keys and connection strings.
Actions : {Microsoft.DocumentDb/databaseAccounts/*, Microsoft.Insights/alertRules/*, Microsoft.Authorization/*/read, Microsoft.ResourceHealth/availabilityStatuses/read…}
NotActions : {Microsoft.DocumentDB/databaseAccounts/dataTransferJobs/*, Microsoft.DocumentDB/databaseAccounts/readonlyKeys/*, Microsoft.DocumentDB/databaseAccounts/regenerateKey/*, Microsoft.DocumentDB/databaseAccounts/listKeys/*…}
DataActions : {}
NotDataActions : {}
AssignableScopes : {/}
Catatan
Dalam contoh ini, nilainya Id
adalah 230815da-be43-4aae-9cb4-875f7bd000aa
. Pengidentifikasi unik secara global di semua definisi peran di Azure.
Menetapkan peran ke identitas
Sekarang, tetapkan peran yang baru ditentukan ke identitas sehingga aplikasi Anda dapat mengakses sumber daya di Azure Cosmos DB.
Penting
Tugas penugasan ini mengharuskan Anda untuk sudah memiliki pengidentifikasi unik identitas apa pun yang ingin Anda berikan izin kontrol akses berbasis peran.
Gunakan
az group show
untuk mendapatkan metadata untuk grup sumber daya Anda saat ini lagi.az group show \ --name "<name-of-existing-resource-group>"
Amati output perintah sebelumnya. Catat nilai
id
properti untuk grup sumber daya ini karena diperlukan untuk digunakan pada langkah berikutnya.{ "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example", "location": "westus", "name": "msdocs-identity-example", "type": "Microsoft.Resources/resourceGroups" }
Catatan
Dalam contoh ini, nilainya
id
adalah/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example
. Contoh ini menggunakan data fiktif dan pengidentifikasi Anda akan berbeda dari contoh ini. Ini adalah contoh output yang dipotong.Tetapkan peran baru menggunakan
az role assignment create
. Gunakan pengidentifikasi grup sumber daya Anda untuk--scope
argumen, pengidentifikasi peran untuk-role
argumen, dan pengidentifikasi unik untuk identitas Anda ke--assignee
argumen.az role assignment create \ --assignee "<your-principal-identifier>" \ --role "subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0" \ --scope "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example"
Catatan
Dalam perintah contoh ini,
scope
diatur ke contoh/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example
fiktif dari contoh langkah sebelumnya. Pengidentifikasi grup sumber daya Anda akan berbeda dari contoh ini. Iturole
juga diatur ke fiktif/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0
. Sekali lagi, pengidentifikasi peran Anda akan berbeda.Amati output dari perintah . Output mencakup pengidentifikasi unik untuk penugasan di
id
properti .{ "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0", "name": "ffffffff-5555-6666-7777-aaaaaaaaaaaa", "principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222", "resourceGroup": "msdocs-identity-example", "roleDefinitionId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0", "scope": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example", "type": "Microsoft.Authorization/roleAssignments" }
Catatan
Dalam contoh ini,
id
properti adalah yang merupakan/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0
contoh fiktif lain.Ulangi langkah-langkah ini untuk memberikan akses ke akun dari identitas lain yang ingin Anda gunakan.
Tip
Anda dapat mengulangi langkah-langkah ini untuk identitas sebanyak yang Anda inginkan. Biasanya, langkah-langkah ini setidaknya diulang untuk memungkinkan pengembang mengakses akun menggunakan identitas manusia mereka dan untuk memungkinkan aplikasi mengakses menggunakan identitas terkelola.
Buat file Bicep baru untuk menentukan penetapan peran Anda. Beri nama file control-plane-role-assignment.bicep.
metadata description = 'Assign RBAC role for control plane access to Azure Cosmos DB.' @description('Id of the role definition to assign to the targeted principal in the context of the account.') param roleDefinitionId string @description('Id of the identity/principal to assign this role in the context of the account.') param identityId string resource assignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = { name: guid(subscription().id, resourceGroup().id, roleDefinitionId, identityId) scope: resourceGroup() properties: { roleDefinitionId: roleDefinitionId principalId: identityId } }
Buat file parameter Bicep baru bernama control-plane-role-assignment.
bicepparam
. Dalam file parameter ini; tetapkan pengidentifikasi definisi peran yang direkam sebelumnya keroleDefinitionId
parameter , dan pengidentifikasi unik untuk identitas Anda keidentityId
parameter .using './control-plane-role-assignment.bicep' param roleDefinitionId = '<id-of-new-role-definition>' param identityId = '<id-of-existing-identity>'
Sebarkan templat Bicep ini menggunakan
az deployment group create
.az deployment group create \ --resource-group "<name-of-existing-resource-group>" \ --parameters control-plane-role-assignment.bicepparam \ --template-file control-plane-role-assignment.bicep
Ulangi langkah-langkah ini untuk memberikan akses ke akun dari identitas lain yang ingin Anda gunakan.
Tip
Anda dapat mengulangi langkah-langkah ini untuk identitas sebanyak yang Anda inginkan. Biasanya, langkah-langkah ini setidaknya diulang untuk memungkinkan pengembang mengakses akun menggunakan identitas manusia mereka dan untuk memungkinkan aplikasi mengakses menggunakan identitas terkelola.
Di panel Kontrol akses (IAM), pilih Tambahkan lalu Tambahkan penetapan peran.
Di panel Peran , cari
Azure Cosmos DB
lalu pilih peran Pemilik Sarana Kontrol Azure Cosmos DB yang dibuat sebelumnya dalam panduan ini. Kemudian, pilih Berikutnya.Tip
Anda dapat secara opsional memfilter daftar peran untuk hanya menyertakan peran kustom.
Di panel Anggota , pilih opsi Pilih anggota . Dalam dialog anggota, pilih identitas yang ingin Anda berikan tingkat akses ini untuk akun Azure Cosmos DB Anda lalu gunakan opsi Pilih untuk mengonfirmasi pilihan Anda.
Catatan
Cuplikan layar ini menggambarkan contoh pengguna bernama "Kai Carter" dengan prinsipal
kai@adventure-works.com
.Kembali ke panel Anggota , tinjau anggota yang dipilih lalu pilih Tinjau + tetapkan.
Di panel Tinjau + tetapkan , tinjau opsi yang ditentukan untuk penetapan peran baru. Terakhir, pilih Tinjau + tetapkan.
Tunggu hingga portal selesai membuat penetapan peran.
Tetapkan peran baru menggunakan
New-AzRoleAssignment
. Gunakan nama peran untukRoleDefinitionName
parameter dan pengidentifikasi unik untuk identitas Anda keObjectId
parameter .$parameters = @{ ResourceGroupName = "<name-of-existing-resource-group>" ObjectId = "<your-principal-identifier>" RoleDefinitionName = "Azure Cosmos DB Control Plane Owner" } New-AzRoleAssignment @parameters
Amati output dari perintah . Output mencakup pengidentifikasi unik untuk penugasan di
RoleAssignmentId
properti .RoleAssignmentName : ffffffff-5555-6666-7777-aaaaaaaaaaaa RoleAssignmentId : /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0 Scope : /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example DisplayName : Kai Carter SignInName : <kai@adventure-works.com> RoleDefinitionName : Azure Cosmos DB Control Plane Owner RoleDefinitionId : e4e4e4e4-ffff-aaaa-bbbb-c5c5c5c5c5c5
Catatan
Dalam contoh ini,
RoleAssignmentId
properti adalah yang merupakan/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0
contoh fiktif lain. Ini adalah subset dari output khas penyebaran untuk kejelasan.Ulangi langkah-langkah ini untuk memberikan akses ke akun dari identitas lain yang ingin Anda gunakan.
Tip
Anda dapat mengulangi langkah-langkah ini untuk identitas sebanyak yang Anda inginkan. Biasanya, langkah-langkah ini setidaknya diulang untuk memungkinkan pengembang mengakses akun menggunakan identitas manusia mereka dan untuk memungkinkan aplikasi mengakses menggunakan identitas terkelola.
Memvalidasi akses sarana kontrol dalam kode
Terakhir, validasi bahwa Anda memberikan akses dengan benar menggunakan kode aplikasi dan Azure Management SDK dalam bahasa pemrograman pilihan Anda.
using Azure.Identity;
using Azure.ResourceManager;
DefaultAzureCredential credential = new();
ArmClient client = new(credential);
Penting
Sampel kode ini menggunakan Azure.ResourceManager.CosmosDB
pustaka dan Azure.Identity
dari NuGet.