Mengamankan akses ke data di Azure Cosmos DB

BERLAKU UNTUK: SQL API

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 Model izin berbasis peran mendetail menggunakan identitas Azure Active Directory (AAD) 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 agar Anda dapat meregenerasi, atau memutar kunci, menyediakan akses berkelanjutan ke akun dan data Anda. Untuk mempelajari selengkapnya tentang kunci primer/sekunder, lihat artikel Keamanan database.

Regenerasi dan rotasi kunci

Catatan

Bagian berikut menjelaskan langkah-langkah untuk memutar dan membuat ulang kunci untuk SQL API. Jika Anda menggunakan API yang berbeda, lihat Azure Cosmos DB API for Mongo DB, Cassandra API, Gremlin API, atau bagian Tabel API.

Untuk memantau pembaruan kunci dan regenerasi kunci pada akun Anda, lihat artikel memantau pembaruan utama dengan metrik dan pemberitahuan.

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 yang diuraikan di bawah ini.

  1. Arahkan ke akun Azure Cosmos DB Anda di portal Microsoft Azure.

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

    Screenshot of 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 berlangsung dari satu menit hingga beberapa jam tergantung pada ukuran akun 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 of the Azure portal showing how to regenerate the primary key

Sampel kode untuk menggunakan kunci primer

Contoh kode berikut mengilustrasikan cara menggunakan titik akhir akun Cosmos DB dan kunci utama untuk membuat contoh 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 memaparkan sistem kontrol akses berbasis peran (RBAC) bawaan yang memungkinkan Anda:

  • Mengautentikasi permintaan data dengan identitas Azure Active Directory (AAD).
  • Mengotorisasi permintaan data dengan model izin berbasis peran yang mendetail.

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

  • Jangan gunakan rahasia bersama seperti kunci primer; sebaiknya gunakan mekanisme autentikasi berbasis token,
  • Anda ingin menggunakan identitas Azure AD untuk mengautentikasi permintaan,
  • Anda memerlukan model izin mendetail untuk membatasi operasi database mana yang boleh dilakukan oleh identitas Anda,
  • Anda ingin menyatakan kebijakan kontrol akses sebagai "peran" yang dapat ditetapkan ke beberapa identitas.

Lihat Mengonfigurasikan kontrol akses berbasis peran untuk akun Azure Cosmos DB untuk mempelajari selengkapnya tentang RBAC Azure Cosmos DB.

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

Token sumber daya

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

  • Menyediakan akses ke kontainer tertentu, kunci partisi, dokumen, lampiran, prosedur yang disimpan, pemicu, dan UDF.
  • Dibuat saat pengguna diberi izin ke sumber daya tertentu.
  • Dibuat ulang saat sumber daya izin ditindaklanjuti melalui 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 dapat ditentukan secara eksplisit, hingga maksimal lima jam.
  • Menyediakan alternatif yang aman untuk memberikan kunci primer.
  • Memungkinkan klien untuk membaca, menulis, dan menghapus sumber daya di akun Cosmos DB sesuai dengan izin yang telah diberikan.

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

Token sumber daya Cosmos DB menyediakan alternatif aman yang memungkinkan klien membaca, menulis, dan menghapus sumber daya di akun Cosmos DB Anda sesuai izin yang diberikan, dan tanpa kunci primer atau baca saja.

Berikut adalah pola desain yang khas di mana token sumber daya dapat diminta, dihasilkan, dan dikirimkan kepada klien:

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

  2. Layanan tingkat menengah memiliki kunci primer akun Cosmos DB.

  3. Aplikasi foto diinstal pada perangkat seluler pengguna akhir.

  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 secara langsung mengakses sumber daya Cosmos DB dengan izin yang ditentukan oleh token sumber daya dan selama 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.

    Azure Cosmos DB resource tokens workflow

Pembuatan dan manajemen token sumber daya ditangani oleh pustaka klien Cosmos DB asli; namun, jika menggunakan REST, Anda harus membuat header permintaan/autentikasi. Untuk informasi selengkapnya tentang pembuatan header autentikasi untuk REST, lihat Kontrol Akses pada Sumber Daya 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 Cosmos. Setiap database dapat berisi nol atau beberapa pengguna Cosmos DB. Contoh kode berikut menunjukkan cara membuat pengguna Cosmos DB menggunakan Azure Cosmos DB .NET SDK v3.

//Create a user.
Database database = benchmark.client.GetDatabase("SalesDatabase");

User user = await database.CreateUserAsync("User 1");

Catatan

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

Izin

Perizinan sumber daya dikaitkan dengan pengguna dan ditetapkan ke sumber daya tertentu. Setiap pengguna mungkin berisi nol atau beberapa izin. 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 mungkin 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 penulisan, pembaruan, atau penghapusan pada sumber daya.

Catatan

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

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

  • resourceTokenPermissionId - Properti ini mengindikasikan Id izin token sumber daya yang telah Anda tentukan.

  • resourceTokenPermissionMode - Properti ini menunjukkan mode izin yang telah 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 dari sumber daya izin, dan mengaitkan izin dengan pengguna yang dibuat di atas.

// Create a permission on a container and specific partition key value
Container container = client.GetContainer("SalesDatabase", "OrdersContainer");
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 dibuat di atas dan membuat instans CosmosClient baru atas nama pengguna, yang dicakup ke satu kunci partisi.

//Read a permission, create user client session.
PermissionProperties permissionProperties = await user.GetPermission("permissionUser1Orders")

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

Perbedaan antara RBAC dan token sumber daya

Subjek RBAC Token sumber daya
Autentikasi dengan Azure Active Directory (Azure AD). Berdasarkan pengguna Azure Cosmos DB asli
Mengintegrasikan token sumber daya dengan Azure AD memerlukan langkah tambahan untuk menjembatani identitas Azure AD dan pengguna Azure Cosmos DB.
Authorization Berbasis peran: peta definisi peran yang memungkinkan tindakan dan dapat ditetapkan ke beberapa identitas. Berbasis izin: untuk setiap pengguna Azure Cosmos DB, Anda perlu menetapkan izin akses data.
Cakupan token Token AAD 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 AAD direfresh secara otomatis oleh SDK Azure Cosmos DB 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, lalu pilih akun Azure Cosmos DB.

  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 menggunakan portal Microsoft Azure.

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

    Screenshot that shows Add role assignment page in 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 ada dalam database atau kontainer. Namun, 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, Table) menyediakan SDK bahasa 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 tambahan.

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