Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Mengelola dan menerapkan Aturan Keamanan Firebase

Menggunakan Firebase CLI

Edit dan terapkan Aturan menggunakan Firebase CLI. Dengan CLI, Anda dapat menjaga aturan Anda di bawah kontrol versi dengan kode aplikasi Anda dan menerapkan aturan sebagai bagian dari proses penerapan yang ada.

Membuat file konfigurasi

Saat mengonfigurasi project Firebase menggunakan Firebase CLI, Anda membuat file konfigurasi .rules di direktori project. Gunakan perintah berikut untuk mulai mengonfigurasi project Firebase Anda:

Cloud Firestore

// Set up Firestore in your project directory, creates a .rules file
firebase init firestore

Realtime Database

// Set up Realtime Database in your project directory, creates a .rules file
firebase init database

Cloud Storage

// Set up Storage in your project directory, creates a .rules file
firebase init storage

Mengedit dan mengupdate aturan Anda

Edit aturan Anda secara langsung di file konfigurasi .rules. Pastikan bahwa setiap pengeditan yang Anda buat di Firebase CLI tercermin dalam Firebase console, atau bahwa Anda secara konsisten melakukan update menggunakan Firebase console atau Firebase CLI. Jika tidak, Anda kemungkinan akan menimpa update yang dibuat di Firebase console.

Menguji update Anda

Gunakan emulator Firebase untuk menguji update secara lokal dan mengonfirmasi bahwa Aturan aplikasi menunjukkan perilaku yang Anda inginkan.

Menerapkan update Anda

Setelah Anda memperbarui dan menguji Aturan, terapkan Aturan tersebut pada produksi. Gunakan perintah berikut untuk secara selektif menerapkan Aturan Anda atau menerapkannya sebagai bagian dari proses penerapan normal.

Cloud Firestore

// Deploy your .rules file
firebase deploy --only firestore:rules

Realtime Database

// Deploy your .rules file
firebase deploy --only database

Cloud Storage

// Deploy your .rules file
firebase deploy --only storage

Menggunakan Firebase console

Anda juga dapat mengedit dan menerapkan Aturan dari Firebase console.

Mengedit dan mengupdate aturan Anda

  1. Buka Firebase console dan pilih project Anda.
  2. Kemudian, pilih Realtime Database, Cloud Firestore, atau Storage dari navigasi produk, lalu klik Aturan untuk membuka editor Aturan.
  3. Edit aturan Anda langsung di editor.

Menguji update Anda

Anda dapat menguji perilaku Aturan langsung di Firebase console, dengan menggunakan Simulator Aturan. Buka layar Simulator di editor Aturan, ubah setelan dan klik Jalankan. Cari pesan konfirmasi di bagian atas editor.

Menerapkan update Anda

Setelah Anda puas dengan pembaruan yang diharapkan, klik Publikasikan.

Menggunakan Admin SDK

Anda dapat menggunakan Admin SDK untuk Node.js guna membuat, mengelola, dan men-deploy aturan keamanan secara terprogram. Dengan akses terprogram ini, Anda dapat:

  • Menerapkan alat khusus, skrip, dasbor, dan pipeline CI/CD untuk mengelola aturan.
  • Mengelola aturan dengan lebih mudah di beberapa project Firebase.

Saat memperbarui aturan secara terprogram, sangat penting untuk tidak membuat perubahan yang tidak diinginkan pada kontrol akses untuk aplikasi Anda. Tulis kode Admin SDK Anda dengan memperhatikan keamanan, khususnya saat memperbarui atau men-deploy aturan.

Hal penting lainnya yang perlu diingat adalah bahwa aturan keamanan Firebase memerlukan waktu beberapa menit untuk di-deploy sepenuhnya. Saat menggunakan Admin SDK untuk men-deploy aturan, pastikan untuk menghindari kondisi race di mana aplikasi Anda langsung bergantung pada aturan dengan deployment yang belum selesai. Jika kasus penggunaan Anda memerlukan pembaruan berkala untuk mengakses aturan kontrol, pertimbangkan solusi yang menggunakan Cloud Firestore, yang dirancang untuk mengurangi kondisi race meskipun sering diperbarui.

Perhatikan juga batasan berikut:

  • Aturan harus lebih kecil dari 64 KiB teks berenkode UTF-8 saat diserialisasi.
  • Sebuah project dapat memiliki maksimal 2.500 kumpulan aturan yang di-deploy. Setelah batas ini tercapai, Anda harus menghapus beberapa kumpulan aturan lama sebelum membuat yang baru.

Membuat dan men-deploy kumpulan aturan Cloud Storage atau Cloud Firestore

Alur kerja standar untuk mengelola aturan keamanan dengan Admin SDK dapat mencakup tiga langkah berbeda:

  1. Membuat file aturan (opsional)
  2. Membuat kumpulan aturan
  3. Merilis atau men-deploy kumpulan aturan baru

SDK menyediakan metode untuk menggabungkan langkah-langkah ini ke dalam satu panggilan API untuk aturan keamanan Cloud Storage dan Cloud Firestore. Contoh:

    const source = `service cloud.firestore {
      match /databases/{database}/documents {
        match /carts/{cartID} {
          allow create: if request.auth != null && request.auth.uid == request.resource.data.ownerUID;
          allow read, update, delete: if request.auth != null && request.auth.uid == resource.data.ownerUID;
        }
      }
    }`;
    // Alternatively, load rules from a file
    // const fs = require('fs');
    // const source = fs.readFileSync('path/to/firestore.rules', 'utf8');

    await admin.securityRules().releaseFirestoreRulesetFromSource(source);

Pola yang sama ini berfungsi untuk aturan Cloud Storage dengan releaseFirestoreRulesetFromSource().

Cara lainnya, Anda dapat membuat file aturan sebagai objek dalam memori, membuat kumpulan aturan, dan men-deploy kumpulan aturan secara terpisah untuk kontrol yang lebih dekat terhadap peristiwa ini. Contoh:

    const rf = admin.securityRules().createRulesFileFromSource('firestore.rules', source);
    const rs = await admin.securityRules().createRuleset(rf);
    await admin.securityRules().releaseFirestoreRuleset(rs);

Memperbarui kumpulan aturan Realtime Database

Untuk memperbarui kumpulan aturan Realtime Database dengan Admin SDK, gunakan metode getRules() dan setRules() dari admin.database. Anda dapat mengambil kumpulan aturan dalam format JSON, atau sebagai string dengan menyertakan komentar.

Untuk memperbarui kumpulan aturan:

    const source = `{
      "rules": {
        "scores": {
          ".indexOn": "score"
            "$uid": {
            ".read": "$uid == auth.uid",
            ".write": "$uid == auth.uid"
          }
        }
      }
    }`;
    await admin.database().setRules(source);

Mengelola kumpulan aturan

Untuk membantu mengelola kumpulan aturan berukuran besar, Admin SDK memungkinkan Anda mencantumkan semua aturan yang ada dengan admin.securityRules().listRulesetMetadata. Contoh:

    const allRulesets = [];
    let pageToken = null;
    while (true) {
      const result = await admin.securityRules().listRulesetMetadata(pageToken: pageToken);
      allRulesets.push(...result.rulesets);
      pageToken = result.nextPageToken;
      if (!pageToken) {
        break;
      }
    }

Untuk kumpulan aturan yang berukuran sangat besar yang mencapai batas 2.500 aturan dari waktu ke waktu, Anda dapat membuat logika untuk menghapus aturan terlama pada siklus waktu tetap. Misalnya, untuk menghapus SEMUA kumpulan aturan yang diterapkan selama lebih dari 30 hari:

    const thirtyDays = new Date(Date.now() - THIRTY_DAYS_IN_MILLIS);
    const promises = [];
    allRulesets.forEach((rs) => {
      if (new Date(rs.crateTime) < thirtyDays) {
        promises.push(admin.securityRules().deleteRuleset(rs.name));
      }
    });
    await Promise.all(promises);
    console.log(`Deleted ${promises.length} rulesets.`);