Ikuti semua informasi yang diumumkan di Firebase Summit, dan pelajari bagaimana Firebase dapat membantu Anda mempercepat pengembangan aplikasi dan menjalankan aplikasi dengan percaya diri. Pelajari Lebih Lanjut

Kelola dan terapkan Aturan Keamanan Firebase

Tetap teratur dengan koleksi Simpan dan kategorikan konten berdasarkan preferensi Anda.

Firebase memberi Anda beberapa alat untuk mengelola Aturan Anda, masing-masing berguna dalam kasus tertentu, dan masing-masing menggunakan API pengelolaan Aturan Keamanan Firebase back-end yang sama.

Apa pun alat yang digunakan untuk memanggilnya, API manajemen:

  • Menyerap sumber Aturan : sekumpulan aturan, biasanya file kode yang berisi pernyataan Aturan Keamanan Firebase.
  • Menyimpan sumber yang diserap sebagai kumpulan aturan yang tidak dapat diubah .
  • Melacak penerapan setiap kumpulan aturan dalam rilis . Layanan yang mengaktifkan Aturan Keamanan Firebase mencari rilis proyek untuk mengevaluasi setiap permintaan untuk sumber daya yang diamankan.
  • Menyediakan kemampuan untuk menjalankan pengujian sintaksis dan semantik dari kumpulan aturan.

Gunakan Firebase CLI

Dengan Firebase CLI , Anda dapat mengupload sumber lokal dan menerapkan rilis . Firebase Local Emulator Suite CLI memungkinkan Anda melakukan pengujian lokal lengkap dari sources .

Menggunakan CLI memungkinkan Anda menjaga aturan di bawah kontrol versi dengan kode aplikasi dan menerapkan aturan sebagai bagian dari proses penerapan yang ada.

Menghasilkan file konfigurasi

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

Toko Api Awan

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

Basis Data Waktu Nyata

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

Penyimpanan awan

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

Edit dan perbarui aturan Anda

Edit sumber aturan Anda langsung di file konfigurasi .rules . Pastikan setiap pengeditan yang Anda lakukan di Firebase CLI tercermin di Firebase console, atau Anda secara konsisten melakukan pembaruan menggunakan Firebase console atau Firebase CLI. Jika tidak, Anda dapat menimpa pembaruan apa pun yang dibuat di konsol Firebase.

Uji pembaruan Anda

Local Emulator Suite menyediakan emulator untuk semua produk yang mendukung Aturan Keamanan. Mesin Aturan Keamanan untuk setiap emulator melakukan evaluasi aturan sintaksis dan semantik, sehingga melebihi pengujian sintaksis yang ditawarkan API manajemen Aturan Keamanan.

Jika Anda bekerja dengan CLI, Suite adalah alat yang sangat baik untuk pengujian Aturan Keamanan Firebase. Gunakan Rangkaian Emulator Lokal untuk menguji pembaruan Anda secara lokal dan mengonfirmasi bahwa Aturan aplikasi Anda menunjukkan perilaku yang Anda inginkan.

Terapkan pembaruan Anda

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

Toko Api Awan

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

Basis Data Waktu Nyata

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

Penyimpanan awan

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

Gunakan konsol Firebase

Anda juga dapat mengedit sumber Aturan dan menerapkannya sebagai rilis dari konsol Firebase. Pengujian sintaksis dilakukan saat Anda mengedit di UI konsol Firebase, dan pengujian simbolis tersedia menggunakan Rules Playground.

Edit dan perbarui aturan Anda

  1. Buka konsol Firebase dan pilih proyek 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.

Uji pembaruan Anda

Selain menguji sintaks di UI editor, Anda bisa menguji perilaku Aturan semantik, menggunakan basis data dan sumber daya penyimpanan proyek Anda, langsung di konsol Firebase, menggunakan Rules Playground . Buka layar Rules Playground di editor Rules, ubah pengaturan dan klik Run . Cari pesan konfirmasi di bagian atas editor.

Terapkan pembaruan Anda

Setelah Anda puas bahwa pembaruan sesuai dengan yang Anda harapkan, klik Terbitkan .

Gunakan Admin SDK

Anda dapat menggunakan SDK Admin untuk kumpulan aturan Node.js . Dengan akses terprogram ini, Anda dapat:

  • Terapkan alat khusus, skrip, dasbor, dan pipeline CI/CD untuk mengelola aturan.
  • Kelola aturan dengan lebih mudah di beberapa proyek Firebase.

Saat memperbarui aturan secara terprogram, sangat penting untuk menghindari membuat perubahan yang tidak diinginkan pada kontrol akses untuk aplikasi Anda. Tulis kode Admin SDK Anda dengan mengutamakan keamanan, terutama saat memperbarui atau menerapkan aturan.

Hal penting lainnya yang perlu diingat adalah bahwa rilis Aturan Keamanan Firebase membutuhkan waktu beberapa menit untuk disebarkan sepenuhnya. Saat menggunakan Admin SDK untuk menerapkan aturan, pastikan untuk menghindari kondisi balapan di mana aplikasi Anda langsung bergantung pada aturan yang penerapannya belum selesai. Jika kasus penggunaan Anda memerlukan pembaruan yang sering untuk mengakses aturan kontrol, pertimbangkan solusi menggunakan Cloud Firestore, yang dirancang untuk mengurangi kondisi balapan meskipun sering diperbarui.

Perhatikan juga batasan ini:

  • Aturan harus lebih kecil dari 256 KiB teks berenkode UTF-8 saat diserialisasi.
  • Sebuah proyek dapat memiliki paling banyak 2.500 kumpulan aturan yang diterapkan. Setelah batas ini tercapai, Anda harus menghapus beberapa kumpulan aturan lama sebelum membuat yang baru.

Buat dan terapkan kumpulan aturan Cloud Storage atau Cloud Firestore

Alur kerja tipikal untuk mengelola aturan keamanan dengan Admin SDK dapat mencakup tiga langkah terpisah:

  1. Buat sumber file aturan (opsional)
  2. Buat aturan
  3. Rilis, atau sebarkan, kumpulan aturan baru

SDK menyediakan metode untuk menggabungkan langkah-langkah ini menjadi satu panggilan API untuk aturan keamanan Cloud Storage dan Cloud Firestore. Sebagai 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() .

Sebagai alternatif, Anda dapat membuat file aturan sebagai objek dalam memori, membuat kumpulan aturan, dan menerapkan kumpulan aturan secara terpisah untuk kontrol yang lebih dekat atas kejadian ini. Sebagai contoh:

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

Perbarui kumpulan aturan Realtime Database

Untuk mengupdate 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);

Kelola kumpulan aturan

Untuk membantu mengelola kumpulan aturan yang besar, Admin SDK memungkinkan Anda mencantumkan semua aturan yang ada dengan admin.securityRules().listRulesetMetadata . Sebagai 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 penerapan yang sangat besar yang mencapai batas 2500 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.createTime) < thirtyDays) {
        promises.push(admin.securityRules().deleteRuleset(rs.name));
      }
    });
    await Promise.all(promises);
    console.log(`Deleted ${promises.length} rulesets.`);

Gunakan API REST

Alat yang dijelaskan di atas sangat cocok untuk berbagai alur kerja, tetapi Anda mungkin ingin mengelola dan menerapkan Aturan Keamanan Firebase menggunakan API manajemen itu sendiri. API manajemen memberi Anda fleksibilitas terbesar.

Ketahuilah bahwa rilis Aturan Keamanan Firebase membutuhkan waktu beberapa menit untuk disebarkan sepenuhnya. Saat menggunakan REST API manajemen untuk menerapkan, pastikan untuk menghindari kondisi balapan di mana aplikasi Anda langsung bergantung pada aturan yang penerapannya belum selesai.

Perhatikan juga batasan ini:

  • Aturan harus lebih kecil dari 256 KiB teks berenkode UTF-8 saat diserialisasi.
  • Sebuah proyek dapat memiliki paling banyak 2.500 kumpulan aturan yang diterapkan. Setelah batas ini tercapai, Anda harus menghapus beberapa kumpulan aturan lama sebelum membuat yang baru.

Buat dan terapkan kumpulan aturan Cloud Storage atau Cloud Firestore dengan REST

Contoh di bagian ini menggunakan Aturan Penyimpanan, meskipun juga berlaku untuk Aturan Cloud Firestore.

Contoh juga menggunakan cURL untuk melakukan panggilan API. Langkah-langkah untuk menyiapkan dan meneruskan token autentikasi dihilangkan. Anda dapat bereksperimen dengan API ini menggunakan API Explorer yang terintegrasi dengan dokumentasi referensi .

Langkah umum untuk membuat dan menerapkan kumpulan aturan menggunakan API manajemen adalah:

  1. Buat file aturan sources
  2. Buat aturan
  3. Lepaskan (terapkan) kumpulan aturan baru

Misalkan Anda sedang mengerjakan proyek Firebase secure_commerce dan ingin menerapkan Aturan Cloud Storage yang terkunci. Anda dapat menerapkan aturan ini dalam file storage.rules .

service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if false;
    }
  }
}

Sekarang, hasilkan sidik jari berenkode base64 untuk file ini. Anda kemudian dapat menggunakan sumber dalam file ini untuk mengisi payload yang diperlukan untuk membuat kumpulan aturan dengan panggilan projects.rulesets.create REST. Di sini, kami menggunakan perintah cat untuk memasukkan konten storage.rules ke dalam payload REST.

curl -X POST -d '{
  "source": {
    {
      "files": [
        {
          "content": "' $(cat storage.rules) '",
          "name": "storage.rules",
          "fingerprint": <sha fingerprint>
        }
      ]
    }
  }
}' 'https://firebaserules.googleapis.com/v1/projects/secure_commerce/rulesets'

API mengembalikan respons validasi dan nama kumpulan aturan, misalnya projects/secure_commerce/rulesets/uuid123 . Jika kumpulan aturan valid, langkah terakhir adalah menerapkan kumpulan aturan baru dalam rilis bernama.

curl -X POST -d '{
  "name": "projects/secure_commerce/releases/prod/v23   "  ,
  "rulesetName": "projects/secure_commerce/rulesets/uuid123",
}' 'https://firebaserules.googleapis.com/v1/projects/secure_commerce/releases'

Perbarui kumpulan aturan Realtime Database dengan REST

Realtime Database menyediakan antarmuka REST sendiri untuk mengelola Aturan. Lihat Mengelola Aturan Firebase Realtime Database melalui REST .

Kelola kumpulan aturan dengan REST

Untuk membantu mengelola penerapan aturan besar, selain metode REST untuk membuat kumpulan aturan dan rilis, API manajemen menyediakan metode untuk:

  • daftar, dapatkan, dan hapus kumpulan aturan
  • daftar, dapatkan, dan hapus rilis aturan

Untuk penerapan yang sangat besar yang mencapai batas 2500 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, Anda dapat memanggil metode projects.rulesets.list , mengurai daftar JSON dari objek Ruleset pada kunci createTime mereka, lalu memanggil project.rulesets.delete pada kumpulan aturan yang sesuai dengan ruleset_id .

Uji pembaruan Anda dengan REST

Terakhir, API manajemen memungkinkan Anda menjalankan pengujian sintaksis dan semantik pada resource Cloud Firestore dan Cloud Storage dalam project produksi Anda.

Pengujian dengan komponen API ini terdiri dari:

  1. Menentukan objek JSON TestSuite untuk mewakili sekumpulan objek TestCase
  2. Mengirimkan TestSuite
  3. Parsing mengembalikan objek TestResult

Mari kita definisikan objek TestSuite dengan satu TestCase dalam file testcase.json . Dalam contoh ini, kami meneruskan sumber bahasa Rules yang sejalan dengan payload REST, di samping test suite untuk menjalankan aturan tersebut. Kami menentukan harapan evaluasi Aturan, dan permintaan klien yang akan diuji oleh kumpulan aturan. Anda juga dapat menentukan seberapa lengkap laporan pengujian, menggunakan nilai "FULL" untuk menunjukkan hasil untuk semua ekspresi bahasa Aturan yang harus disertakan dalam laporan, termasuk ekspresi yang tidak cocok dengan permintaan.

 {
  "source":
  {
    "files":
    [
      {
        "name": "firestore.rules",
        "content": "service cloud.firestore {
          match /databases/{database}/documents {
            match /users/{userId}{
              allow read: if (request.auth.uid == userId);
            }
            function doc(subpath) {
              return get(/databases/$(database)/documents/$(subpath)).data;
            }
            function isAccountOwner(accountId) {
              return request.auth.uid == accountId 
                  || doc(/users/$(request.auth.uid)).accountId == accountId;
            }
            match /licenses/{accountId} {
              allow read: if isAccountOwner(accountId);
            }
          }
        }"
      }
    ]
  },
  "testSuite":
  {
    "testCases":
    [
      {
        "expectation": "ALLOW",
        "request": {
           "auth": {"uid": "123"},
           "path": "/databases/(default)/documents/licenses/abcd",
           "method": "get"},
        "functionMocks": [
            {
            "function": "get",
            "args": [{"exact_value": "/databases/(default)/documents/users/123"}],
            "result": {"value": {"data": {"accountId": "abcd"}}}
            }
          ]
      }
    ]
  }
}

Kami kemudian dapat mengirimkan TestSuite ini untuk dievaluasi dengan metode projects.test .

curl -X POST -d '{
    ' $(cat testcase.json) '
}' 'https://firebaserules.googleapis.com/v1/projects/secure_commerce/rulesets/uuid123:test'

TestReport yang dikembalikan (berisi status SUCCESS/GAGAL pengujian, daftar pesan debug, daftar ekspresi Aturan yang dikunjungi dan laporan evaluasinya) akan mengonfirmasi dengan status SUCCESS bahwa akses diizinkan dengan benar.

Kelola izin untuk Aturan Keamanan Cloud Storage lintas layanan

Jika Anda membuat Aturan Keamanan Cloud Storage yang menggunakan konten dokumen Cloud Firestore untuk mengevaluasi kondisi keamanan , Anda akan diminta di Firebase console atau Firebase CLI untuk mengaktifkan izin untuk menghubungkan kedua produk.

Jika Anda memutuskan untuk menonaktifkan keamanan lintas layanan tersebut:

  1. Pertama, sebelum menonaktifkan fitur, edit aturan Anda, hapus semua pernyataan yang menggunakan fungsi Aturan untuk mengakses Cloud Firestore. Jika tidak, setelah fitur dinonaktifkan, evaluasi Aturan akan menyebabkan permintaan Penyimpanan Anda gagal.

  2. Gunakan halaman IAM di Google Cloud Console untuk menghapus peran "Firebase Rules Firestore Service Agent" dengan mengikuti panduan Cloud untuk mencabut peran .

Anda akan diminta untuk mengaktifkan kembali fitur ini saat berikutnya Anda menyimpan Aturan lintas-layanan dari Firebase CLI atau konsol Firebase.