Mengamankan akses ke data di Azure Cosmos DB

BERLAKU UNTUK: NoSQL

Artikel ini memberikan gambaran umum kontrol akses data di Azure Cosmos DB.

Azure Cosmos DB menyediakan tiga cara untuk mengontrol akses ke data Anda.

Jenis kontrol akses Karakteristik
Kunci primer/sekunder Rahasia bersama yang memungkinkan manajemen atau operasi data apa pun. Muncul dalam varian baca-tulis dan baca-saja.
Kontrol akses berbasis peran (RBAC) Model izin berbasis peran yang halus menggunakan identitas Microsoft Entra untuk autentikasi.
Token sumber daya Model izin yang mendetail berdasarkan pengguna dan izin Azure Cosmos DB asli.

Kunci primer/sekunder

Kunci primer menyediakan akses ke semua sumber daya administratif untuk akun database. Setiap akun terdiri dari dua kunci: kunci primer dan kunci sekunder. Tujuan dari kunci ganda adalah untuk memungkinkan Anda meregenerasi, atau menggulung, kunci, menyediakan akses berkelanjutan ke akun dan data Anda. Untuk mempelajari selengkapnya tentang kunci primer/sekunder, lihat Gambaran umum keamanan database di Azure Cosmos DB.

Untuk melihat kunci akun Anda, di menu sebelah kiri pilih Kunci. Kemudian, pilih ikon Tampilan di sebelah kanan setiap kunci. Pilih tombol Salin untuk menyalin kunci yang dipilih. Anda dapat menyembunyikannya setelah itu dengan memilih ikon yang sama per kunci, yang memperbarui ikon ke tombol Sembunyikan .

Screenshot of the View account key for Azure Cosmos DB.

Regenerasi dan rotasi kunci

Catatan

Bagian berikut menjelaskan langkah-langkah untuk memutar dan meregenerasi kunci untuk API untuk NoSQL. Jika Anda menggunakan API yang berbeda, lihat bagian API untuk MongoDB, API untuk Cassandra, API untuk Gremlin, atau API untuk Tabel .

Untuk memantau akun Anda untuk pembaruan utama dan regenerasi kunci, lihat Memantau akun Azure Cosmos DB Anda untuk pembaruan utama dan regenerasi kunci.

Proses regenerasi dan rotasi kunci sederhana. Pertama, pastikan bahwa aplikasi Anda secara konsisten menggunakan kunci primer atau kunci sekunder untuk mengakses akun Azure Cosmos DB. Kemudian, ikuti langkah-langkah di bagian berikutnya.

  1. Buka akun Azure Cosmos DB Anda di portal Azure.

  2. Pilih Tombol di menu sebelah kiri lalu pilih Regenerasi Kunci Sekunder dari elipsis di sebelah kanan kunci sekunder Anda.

    Screenshot that shows the Azure portal showing how to regenerate the secondary key.

  3. Validasi bahwa kunci sekunder baru berfungsi secara konsisten terhadap akun Azure Cosmos DB Anda. Regenerasi kunci dapat memakan waktu dari satu menit hingga beberapa jam tergantung pada ukuran akun Azure Cosmos DB.

  4. Ganti kunci primer Anda dengan kunci sekunder di aplikasi Anda.

  5. Kembali ke portal Microsoft Azure dan picu regenerasi kunci primer.

    Screenshot that shows the Azure portal showing how to regenerate the primary key.

Sampel kode untuk menggunakan kunci primer

Sampel kode berikut mengilustrasikan cara menggunakan titik akhir akun Azure Cosmos DB dan kunci primer untuk membuat instans CosmosClient:

// Read the Azure Cosmos DB endpointUrl and authorization keys from config.
// These values are available from the Azure portal on the Azure Cosmos DB account blade under "Keys".
// Keep these values in a safe and secure location. Together they provide Administrative access to your Azure Cosmos DB account.

private static readonly string endpointUrl = ConfigurationManager.AppSettings["EndPointUrl"];
private static readonly string authorizationKey = ConfigurationManager.AppSettings["AuthorizationKey"];

CosmosClient client = new CosmosClient(endpointUrl, authorizationKey);

Kontrol Akses Berbasis Peran

Azure Cosmos DB mengekspos sistem RBAC bawaan yang memungkinkan Anda:

  • Autentikasi permintaan data Anda dengan identitas Microsoft Entra.
  • Mengotorisasi permintaan data dengan model izin berbasis peran yang mendetail.

RBAC Azure Cosmos DB adalah metode kontrol akses yang ideal dalam situasi di mana:

  • Anda tidak ingin menggunakan rahasia bersama seperti kunci utama dan lebih suka mengandalkan mekanisme autentikasi berbasis token.
  • Anda ingin menggunakan identitas Microsoft Entra untuk mengautentikasi permintaan Anda.
  • Anda memerlukan model izin halus untuk membatasi operasi database mana yang diizinkan untuk dilakukan oleh identitas Anda.
  • Anda ingin mewujudkan kebijakan kontrol akses sebagai "peran" yang dapat Anda tetapkan ke beberapa identitas.

Untuk mempelajari selengkapnya tentang Azure Cosmos DB RBAC, lihat Mengonfigurasi kontrol akses berbasis peran untuk akun Azure Cosmos DB Anda.

Untuk informasi dan kode sampel untuk mengonfigurasi RBAC untuk Azure Cosmos DB for MongoDB, lihat Mengonfigurasi kontrol akses berbasis peran untuk Azure Cosmos DB untuk MongoDB Anda.

Token sumber daya

Token sumber daya menyediakan akses ke sumber daya aplikasi dalam database. Token sumber daya:

  • Menyediakan akses ke kontainer, kunci partisi, dokumen, dan lampiran tertentu.
  • Dibuat saat pengguna diberi izin ke sumber daya tertentu.
  • Dibuat ulang saat sumber daya izin ditindaklanjuti oleh panggilan POST, GET, atau PUT.
  • Menggunakan token sumber daya hash yang secara khusus dibuat untuk pengguna, sumber daya, dan izin.
  • Terikat waktu dengan masa berlaku yang dapat disesuaikan. Rentang waktu default yang valid adalah satu jam. Namun, masa pakai token mungkin ditentukan secara eksplisit, hingga maksimum 24 jam.
  • Menyediakan alternatif yang aman untuk memberikan kunci primer.
  • Memungkinkan klien membaca, menulis, dan menghapus sumber daya di akun Azure Cosmos DB sesuai dengan izin yang diberikan.

Anda dapat menggunakan token sumber daya (dengan membuat pengguna dan izin Azure Cosmos DB) saat Anda ingin memberikan akses ke sumber daya di akun Azure Cosmos DB Anda ke klien yang tidak dapat dipercaya dengan kunci utama.

Token sumber daya Azure Cosmos DB menyediakan alternatif aman yang memungkinkan klien membaca, menulis, dan menghapus sumber daya di akun Azure Cosmos DB Anda sesuai dengan izin yang Diberikan, dan tanpa perlu kunci utama atau baca-saja.

Berikut adalah pola desain umum di mana token sumber daya dapat diminta, dihasilkan, dan dikirimkan ke klien:

  1. Layanan tingkat menengah disiapkan untuk melayani aplikasi seluler dalam berbagi foto pengguna.

  2. Layanan tingkat menengah memiliki kunci utama akun Azure Cosmos DB.

  3. Aplikasi foto diinstal pada perangkat seluler pengguna.

  4. Saat masuk, aplikasi foto menetapkan identitas pengguna dengan layanan tingkat menengah. Mekanisme pembentukan identitas ini murni hingga aplikasi.

  5. Setelah identitas ditetapkan, layanan tingkat menengah meminta izin berdasarkan identitas.

  6. Layanan tingkat menengah mengirim token sumber daya kembali ke aplikasi telepon.

  7. Aplikasi telepon dapat terus menggunakan token sumber daya untuk langsung mengakses sumber daya Azure Cosmos DB dengan izin yang ditentukan oleh token sumber daya dan untuk interval yang diizinkan oleh token sumber daya.

  8. Ketika token sumber daya kedaluwarsa, permintaan berikutnya menerima pengecualian 401 yang tidak sah. Pada titik ini, aplikasi telepon membangun kembali identitas dan meminta token sumber daya baru.

    Screenshot that shows an Azure Cosmos DB resource tokens workflow.

Pembuatan dan manajemen token sumber daya ditangani oleh pustaka klien Azure Cosmos DB asli. Namun, jika Anda menggunakan REST, Anda harus membuat header permintaan/autentikasi. Untuk informasi selengkapnya tentang membuat header autentikasi untuk REST, lihat Kontrol akses pada sumber daya Azure Cosmos DB atau kode sumber untuk .NET SDK atau Node.js SDK kami.

Untuk contoh layanan tingkat menengah yang digunakan untuk menghasilkan atau broker token sumber daya, lihat aplikasi ResourceTokenBroker.

Pengguna

Pengguna Azure Cosmos DB dikaitkan dengan database Azure Cosmos DB. Setiap database dapat berisi nol atau lebih pengguna Azure Cosmos DB. Sampel kode berikut menunjukkan cara membuat pengguna Azure Cosmos DB dengan menggunakan Azure Cosmos DB .NET SDK v3.

// Create a user.
Database database = client.GetDatabase("SalesDatabase");
User user = await database.CreateUserAsync("User 1");

Catatan

Setiap pengguna Azure Cosmos DB memiliki ReadAsync() metode yang dapat Anda gunakan untuk mengambil daftar izin yang terkait dengan pengguna.

Izin

Perizinan sumber daya dikaitkan dengan pengguna dan ditetapkan ke sumber daya tertentu. Setiap pengguna dapat berisi nol izin atau lebih. Sumber daya izin menyediakan akses ke token keamanan yang dibutuhkan pengguna saat mencoba mengakses kontainer atau data tertentu dalam kunci partisi tertentu. Ada dua tingkat akses yang tersedia yang dapat disediakan oleh sumber daya izin:

  • Semua: Pengguna memiliki izin penuh pada sumber daya.
  • Baca: Pengguna hanya dapat membaca konten sumber daya tetapi tidak dapat melakukan operasi tulis, perbarui, atau hapus pada sumber daya.

Catatan

Untuk menjalankan prosedur tersimpan, pengguna harus memiliki izin Semua pada kontainer tempat prosedur tersimpan akan dijalankan.

Jika Anda mengaktifkan log diagnostik pada permintaan sarana data, dua properti berikut yang terkait dengan izin akan dicatat:

  • resourceTokenPermissionId: Properti ini menunjukkan ID izin token sumber daya yang Anda tentukan.

  • resourceTokenPermissionMode: Properti ini menunjukkan mode izin yang Anda tetapkan saat membuat token sumber daya. Mode izin dapat memiliki nilai seperti Semua atau Baca.

Sampel kode untuk membuat izin

Sampel kode berikut menunjukkan cara membuat sumber daya izin, membaca token sumber daya sumber daya sumber daya izin, dan mengaitkan izin dengan pengguna yang baru saja Anda buat.

// Create a permission on a container and specific partition key value
Container container = client.GetContainer("SalesDatabase", "OrdersContainer");
await user.CreatePermissionAsync(
    new PermissionProperties(
        id: "permissionUser1Orders", 
        permissionMode: PermissionMode.All, 
        container: container,
        resourcePartitionKey: new PartitionKey("012345")));

Sampel kode untuk membaca izin untuk pengguna

Cuplikan kode berikut menunjukkan cara mengambil izin yang terkait dengan pengguna yang Anda buat dan membuat instans baru CosmosClient untuk pengguna, yang dilingkupkan ke satu kunci partisi.

// Read a permission, create user client session.
Permission permission = await user.GetPermission("permissionUser1Orders").ReadAsync();

CosmosClient client = new CosmosClient(accountEndpoint: "MyEndpoint", authKeyOrResourceToken: permission.Resource.Token);

Perbedaan antara RBAC dan token sumber daya

Subjek RBAC Token sumber daya
Autentikasi Dengan ID Microsoft Entra. Berdasarkan pengguna Azure Cosmos DB asli.
Mengintegrasikan token sumber daya dengan MICROSOFT Entra ID memerlukan pekerjaan ekstra untuk menjenguk identitas Microsoft Entra dan pengguna Azure Cosmos DB.
Authorization Berbasis peran: Definisi peran memetakan tindakan yang diizinkan dan dapat ditetapkan ke beberapa identitas. Berbasis izin: Untuk setiap pengguna Azure Cosmos DB, Anda perlu menetapkan izin akses data.
Cakupan token Token Microsoft Entra membawa identitas pemohon. Identitas ini dicocokkan dengan semua definisi peran yang ditetapkan untuk melakukan otorisasi. Token sumber daya membawa izin yang diberikan kepada pengguna Azure Cosmos DB tertentu pada sumber daya Azure Cosmos DB tertentu. Permintaan otorisasi pada sumber daya yang berbeda mungkin memerlukan token yang berbeda.
Refresh token Token Microsoft Entra secara otomatis di-refresh oleh Azure Cosmos DB SDK saat kedaluwarsa. Refresh token sumber daya tidak didukung. Ketika token sumber daya kedaluwarsa, token baru perlu dikeluarkan.

Menambahkan pengguna dan menetapkan peran

Untuk menambahkan akses pembaca akun Azure Cosmos DB ke akun pengguna, minta pemilik langganan melakukan langkah-langkah berikut ini di portal Azure.

  1. Buka portal Azure dan pilih akun Azure Cosmos DB Anda.

  2. Pilih Kontrol akses (IAM).

  3. Pilih Tambahkan>Tambahkan penetapan peran untuk membuka halaman Tambahkan penetapan peran.

  4. Tetapkan peran berikut. Untuk langkah yang lebih detail, lihat Menetapkan peran Azure dengan menggunakan portal Azure.

    Pengaturan Nilai
    Peran Pembaca Akun Cosmos DB.
    Tetapkan akses ke Pengguna, grup, atau perwakilan layanan.
    Anggota Pengguna, grup, atau aplikasi di direktori tempat Anda ingin memberikan akses.

    Screenshot that shows the Add role assignment page in the Azure portal.

Entitas kini dapat membaca sumber daya Azure Cosmos DB.

Menghapus atau mengekspor data pengguna

Sebagai layanan database, Azure Cosmos DB memungkinkan Anda mencari, memilih, memodifikasi, dan menghapus data apa pun yang terletak di database atau kontainer Anda. Anda bertanggung jawab untuk menggunakan API yang disediakan dan menentukan logika yang diperlukan untuk menemukan dan menghapus data pribadi apa pun jika diperlukan.

Setiap API multi-model (SQL, MongoDB, Gremlin, Cassandra, atau Table) menyediakan SDK bahasa yang berbeda yang berisi metode untuk mencari dan menghapus data berdasarkan predikat kustom. Anda juga dapat mengaktifkan fitur time to live (TTL) untuk menghapus data secara otomatis setelah periode tertentu, tanpa menimbulkan biaya lagi.

Catatan

Untuk informasi tentang menampilkan atau menghapus data pribadi, lihat Permintaan Subjek Data Azure untuk GDPR. Untuk informasi selengkapnya tentang GDPR, lihat bagian GDPR di Microsoft Trust Center dan bagian GDPR dari portal Service Trust.

Langkah berikutnya