Bagikan melalui


Menggunakan kontrol akses berbasis peran sarana kontrol dengan Azure Cosmos DB untuk NoSQL

BERLAKU UNTUK: NoSQL

Diagram lokasi saat ini ('Kontrol akses berbasis peran') dalam urutan panduan penyebaran.

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.

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.

  1. Masuk ke portal Azure (https://portal.azure.com).

  2. Masukkan Grup sumber daya di bilah pencarian global.

    Cuplikan layar bilah pencarian global di portal Azure.

  3. Dalam Layanan, pilih Grup sumber daya.

    Cuplikan layar opsi 'Grup sumber daya' dipilih di menu pencarian.

  4. Di panel Grup sumber daya, pilih grup sumber daya yang sudah ada.

    Cuplikan layar grup sumber daya yang ada dalam daftar grup sumber daya untuk langganan.

    Catatan

    Contoh cuplikan msdocs-identity-example layar ini mencakup grup sumber daya. Nama grup sumber daya Anda yang sebenarnya mungkin berbeda.

  5. Di dalam panel untuk grup sumber daya, pilih Kontrol akses (IAM) di menu layanan.

    Cuplikan layar opsi 'Access Control (IAM)' di menu layanan untuk grup sumber daya.

  6. Di panel Kontrol akses (IAM), pilih Peran.

    Cuplikan layar opsi 'Peran' di panel 'Kontrol Akses (IAM)'.

  7. Di bagian Peran , gunakan frasa pencarian Cosmos DB dan temukan definisi peran Operator Cosmos DB. Kemudian, pilih opsi Tampilan yang terkait dengan definisi tersebut.

    Cuplikan layar daftar definisi peran pada cakupan yang dapat ditetapkan saat ini yang difilter untuk menyertakan hanya definisi dengan 'Cosmos DB' dalam judul.

  8. Dalam dialog definisi peran Operator Cosmos DB, amati tindakan yang ditetapkan sebagai bagian dari definisi peran ini.

    Cuplikan layar dialog 'Operator Cosmos DB' dengan detail tentang definisi peran bawaan.

  9. 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.

  1. Gunakan az group show untuk mendapatkan metadata untuk grup sumber daya Anda saat ini lagi.

    az group show \
        --name "<name-of-existing-resource-group>"
    
  2. 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.

  3. 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. Itu role 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.

  4. 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.

  5. 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.

  1. 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
      }
    }
    
  2. Buat file parameter Bicep baru bernama control-plane-role-assignment.bicepparam. Dalam file parameter ini; tetapkan pengidentifikasi definisi peran yang direkam sebelumnya ke roleDefinitionId parameter , dan pengidentifikasi unik untuk identitas Anda ke identityId parameter .

    using './control-plane-role-assignment.bicep'
    
    param roleDefinitionId = '<id-of-new-role-definition>'
    param identityId = '<id-of-existing-identity>'
    
  3. 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
    
  4. 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.

  1. Di panel Kontrol akses (IAM), pilih Tambahkan lalu Tambahkan penetapan peran.

    Cuplikan layar opsi 'Tambahkan penetapan peran' di menu 'Kontrol Akses (IAM)' untuk opsi 'Tambahkan'.

  2. 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.

    Cuplikan layar panel 'Peran' untuk menambahkan penetapan peran.

    Tip

    Anda dapat secara opsional memfilter daftar peran untuk hanya menyertakan peran kustom.

  3. 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.

    Cuplikan layar panel 'Anggota' untuk menambahkan penetapan peran.

    Cuplikan layar dialog pemilihan identitas untuk menambahkan penetapan peran.

    Catatan

    Cuplikan layar ini menggambarkan contoh pengguna bernama "Kai Carter" dengan prinsipal kai@adventure-works.com.

  4. Kembali ke panel Anggota , tinjau anggota yang dipilih lalu pilih Tinjau + tetapkan.

    Cuplikan layar panel 'Anggota' dengan identitas yang dipilih untuk penetapan peran.

  5. Di panel Tinjau + tetapkan , tinjau opsi yang ditentukan untuk penetapan peran baru. Terakhir, pilih Tinjau + tetapkan.

    Cuplikan layar panel 'Tinjau + buat' untuk penetapan peran.

  6. Tunggu hingga portal selesai membuat penetapan peran.

  1. Tetapkan peran baru menggunakan New-AzRoleAssignment. Gunakan nama peran untuk RoleDefinitionName parameter dan pengidentifikasi unik untuk identitas Anda ke ObjectId parameter .

    $parameters = @{
        ResourceGroupName = "<name-of-existing-resource-group>"
        ObjectId = "<your-principal-identifier>"
        RoleDefinitionName = "Azure Cosmos DB Control Plane Owner"
    }
    New-AzRoleAssignment @parameters
    
  2. 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.

  3. 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.

Langkah selanjutnya