Logging audit Firebase Realtime Database

Halaman ini menjelaskan log audit yang dibuat oleh Firebase sebagai bagian dari Log Audit Cloud.

Ringkasan

Layanan Firebase menulis log audit untuk membantu Anda menjawab pertanyaan, "Siapa yang melakukan apa, di mana, dan kapan?" Log tersebut adalah Cloud Audit Logs, yang disediakan sebagai bagian dari project Google Cloud yang terhubung ke project Firebase Anda.

Setiap project Firebase Anda hanya berisi log audit untuk resource yang berada langsung dalam project.

Untuk membaca ringkasan umum tentang Cloud Audit Logs, lihat Ringkasan Cloud Audit Logs. Untuk mendapatkan pemahaman yang lebih mendalam tentang format log audit, lihat Memahami log audit.

Log audit yang tersedia

Jenis log audit berikut tersedia untuk Firebase Realtime Database:

  • Log audit Aktivitas Admin

    Mencakup operasi "penulisan admin" yang menulis metadata atau informasi konfigurasi.

    Anda tidak dapat menonaktifkan log audit Aktivitas Admin.

  • Log audit Akses Data

    Mencakup operasi "pembacaan admin" yang membaca metadata atau informasi konfigurasi. Juga mencakup operasi "pembacaan data" dan "penulisan data" yang membaca atau menulis data yang disediakan pengguna.

    Untuk menerima log audit Akses Data, Anda harus mengaktifkannya secara eksplisit.

Untuk deskripsi yang lebih lengkap tentang jenis log audit, lihat Jenis log audit.

Operasi yang diaudit

Tabel berikut merangkum operasi API yang sesuai untuk setiap jenis log audit di Firebase Realtime Database:

Kategori log audit Operasi Firebase Realtime Database
Log Audit Aktivitas Admin (ADMIN_WRITE)
  • CreateDatabaseInstance
  • DeleteDatabaseInstance
  • DisableDatabaseInstance
  • ReenableDatabaseInstance
Log Audit Akses Data (ADMIN_READ)
  • GetDatabaseInstance
  • ListDatabaseInstances
Log Audit Akses Data (DATA_READ atau DATA_WRITE)
Log Audit Akses Data (DATA_READ)
Log Audit Akses Data (DATA_WRITE)
  • Write
  • Update. Melihat WriteMetadata terkait.
  • OnDisconnectPut
  • OnDisconnectUpdate. Melihat WriteMetadata terkait.
  • OnDisconnectCancel

Mengaudit informasi autentikasi

Entri log audit menyertakan informasi tentang identitas yang melakukan operasi yang dicatat dalam log. Untuk mengidentifikasi pemanggil permintaan, lihat kolom berikut dalam objek AuditLog:

  • Membuat koneksi realtime. Operasi Connect Realtime Database tidak mencatat data autentikasi karena Realtime Database diautentikasi setelah koneksi dibuat. Oleh karena itu, Connect tidak memiliki info autentikasi. Objek AuthenticationInfo berisi placeholder principalEmail dari audit-pending-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com.

  • Google Authentication. Operasi Realtime Database yang menggunakan Google Authentication standar, seperti traffic dari Firebase Admin SDK atau permintaan REST yang diautentikasi dengan token OAuth standar, memiliki objek AuthenticationInfo yang berisi email kredensial yang sebenarnya.

  • Firebase Authentication. Operasi Realtime Database yang menggunakan Firebase Authentication memiliki objek AuthenticationInfo yang berisi nilai principalEmail sebesar audit-third-party-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com. Hal yang sama berlaku jika Anda menerapkan solusi autentikasi Anda sendiri dengan membuat JWT kustom.

    • Jika Token Web JSON (JWT) digunakan untuk autentikasi pihak ketiga, kolom thirdPartyPrincipal akan menyertakan header dan payload token. Misalnya, log audit untuk permintaan yang diautentikasi dengan Firebase Authentication menyertakan token Firebase Authentication permintaan tersebut.
  • Tidak ada autentikasi Operasi Realtime Database yang tidak menggunakan autentikasi apa pun memiliki objek AuthenticationInfo yang berisi nilai principalEmail dari audit-no-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com Realtime Database dengan aturan keamanan terbuka dapat mengizinkan permintaan tersebut. Sebaiknya semua pengguna mengamankan database mereka dengan benar.

  • Token rahasia lama. Operasi Realtime Database yang menggunakan token lama memiliki objek AuthenticationInfo yang berisi placeholder principalEmail dari audit-secret-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com. Untuk JWT yang ditandatangani secara rahasia, thirdPartyPrincipal berisi header dan payload JWT.

Mengaudit evaluasi Aturan Keamanan Firebase

Log Audit Cloud dapat digunakan untuk mengidentifikasi permintaan yang berpotensi terpengaruh oleh perubahan Aturan.

Di objek AuthorizationInfo, authorization.permission dapat berupa salah satu dari:

  • firebasedatabase.data.get: Akses baca diberikan pada jalur yang ditentukan di resource.
  • firebasedatabase.data.update: Akses tulis yang diberikan di jalur yang ditentukan di resource.
  • firebasedatabase.data.connect: Placeholder untuk Connect dan Disconnect. Tidak diperlukan otorisasi untuk terhubung ke instance Realtime Database.
  • firebasedatabase.data.cancel: Digunakan untuk Unlisten dan OnDisconnectCancel. Mencabut atau membatalkan operasi yang sebelumnya diizinkan tidak memerlukan otorisasi tambahan.

Menghubungkan log Audit Cloud dengan hasil profiler Realtime Database

Anda dapat melakukan analisis performa yang mendalam di Realtime Database menggunakan profiler Realtime Database yang dikombinasikan dengan logging audit Realtime Database. Setiap alat memiliki keunggulannya.

Cloud Audit Logging Profiler Realtime Database
  • Akses audit ke database
  • Terus-menerus menangkap semua permintaan
  • Mengizinkan kueri retrospektif
  • Berisi info token autentikasi mendetail
  • Dikenakan biaya penggunaan
  • Digunakan untuk analisis performa
  • Menyediakan alat yang berguna untuk identifikasi hotspot dan pengoptimalan performa
  • Dapat mengukur listener-broadcast, yang tidak tersedia di Log audit karena adanya potensi volume data
  • Ringan dan realtime, sehingga cocok untuk pengujian live load. Mungkin perlu waktu beberapa menit untuk menampilkan entri log audit.

Konten log audit sesuai dengan metrik profiler seperti yang ditunjukkan di bawah.

Nama operasi Logging Audit Nilai khusus dalam
RealtimeDatabaseAuditMetadata
Nama operasi profiler
Connect RequestType is REALTIME concurrent-connect
Disconnect RequestType is REALTIME concurrent-disconnect
Read RequestType is REALTIME realtime-read
Read RequestType is REST rest-read
Write RequestType is REALTIME realtime-write
Write RequestType is REST rest-write
Update RequestType is REALTIME.
Check PreconditionType.
realtime-update
realtime-transaction
Update RequestType is REST.
Check PreconditionType.
rest-update
rest-transaction
ListenerListen RequestType is REALTIME listener-listen
ListenerUnlisten RequestType is REALTIME listener-unlisten
OnDisconnectPut RequestType is REALTIME on-disconnect-put
OnDisconnectUpdate RequestType is REALTIME on-disconnect-update
OnDisconnectCancel RequestType is REALTIME on-disconnect-cancel
RunOnDisconnect RequestType is REALTIME run-on-disconnect

Format log audit

Entri log audit mencakup objek berikut:

  • Entri log itu sendiri, yang merupakan objek dengan jenis LogEntry. Kolom berguna yang meliputi hal berikut ini:

    • logName berisi ID resource dan jenis log audit.
    • resource berisi target operasi yang diaudit.
    • timestamp berisi waktu operasi yang diaudit.
    • protoPayload berisi informasi yang diaudit.
  • Data logging audit, yang merupakan objek AuditLog yang disimpan di kolom protoPayload entri log.

  • Informasi audit khusus layanan opsional, yang merupakan objek khusus layanan. Untuk integrasi yang lebih lama, objek ini disimpan di kolom serviceData pada objek AuditLog; integrasi yang lebih baru menggunakan kolom metadata.

Untuk kolom lain dalam objek ini, dan cara menafsirkannya, pelajari Memahami log audit.

Informasi tambahan tentang kolom di protoPayload.metadata untuk operasi DATA_READ dan DATA_WRITE tersedia di dokumentasi referensi.

Nama log

Nama resource Cloud Audit Logs menunjukkan project Firebase atau entity Google Cloud lainnya yang memiliki log audit, dan apakah log berisi data logging audit Aktivitas Admin, Akses Data, Kebijakan Ditolak, atau Peristiwa Sistem. Misalnya, berikut ini nama log untuk log audit Aktivitas Admin level project dan log audit Akses Data organisasi. Variabel menunjukkan project Firebase dan ID organisasi.

projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity
organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com%2Fdata_access

Nama layanan

Log audit Firebase Realtime Database menggunakan nama layanan firebasedatabase.googleapis.com.

Untuk mengetahui daftar lengkap semua nama layanan Cloud Logging API dan jenis resource yang dimonitor, lihat Memetakan layanan ke resource.

Jenis resource

Log audit Firebase Realtime Database menggunakan jenis resource audited_resource untuk semua log audit.

Untuk mengetahui daftar semua jenis resource yang dimonitor dan informasi deskriptif Cloud Logging, lihat Jenis resource yang dimonitor.

Mengaktifkan logging audit

Log audit Aktivitas Admin selalu diaktifkan; Anda tidak dapat menonaktifkannya.

Log audit Akses Data dinonaktifkan secara default dan tidak ditulis kecuali diaktifkan secara eksplisit (dengan pengecualian log audit Akses Data untuk BigQuery, yang tidak dapat dinonaktifkan).

Log audit Akses Data untuk Realtime Database dialihkan dengan memeriksa DATA_READ dan/atau DATA_WRITE di GCP Console. Terdapat penundaan hingga satu jam antara waktu log diaktifkan/dinonaktifkan di GCP Console dan waktu log dimulai/berhenti dikirimkan.

Untuk melihat petunjuk cara mengaktifkan sebagian atau semua log audit Akses Data Anda, lihat Mengonfigurasi log Akses Data.

Izin dan peran

Izin dan peran Cloud IAM menentukan kemampuan Anda untuk mengakses data log audit di resource Google Cloud.

Saat memutuskan izin dan peran khusus Logging mana yang berlaku untuk kasus penggunaan Anda, pertimbangkan hal berikut:

  • Peran Logs Viewer (roles/logging.viewer) memberi Anda akses hanya baca ke log audit Aktivitas Admin, Kebijakan Ditolak, dan Peristiwa Sistem. Jika hanya memiliki peran ini, Anda tidak dapat melihat log audit Akses Data yang ada di bucket _Default.

  • Peran Private Logs Viewer(roles/logging.privateLogViewer) mencakup izin yang ada di roles/logging.viewer, serta kemampuan untuk membaca log audit Akses Data di bucket _Default.

    Perlu diperhatikan bahwa jika log pribadi ini disimpan dalam bucket yang ditentukan pengguna, maka setiap pengguna yang memiliki izin untuk membaca log dalam bucket tersebut dapat membaca log pribadi. Untuk informasi selengkapnya tentang bucket log, lihat Ringkasan perutean dan penyimpanan.

Untuk informasi lebih lanjut tentang peran dan izin Cloud IAM yang berlaku pada data log audit, lihat Kontrol akses.

Melihat log

Untuk menemukan dan melihat log audit, Anda harus mengetahui ID project, folder, atau organisasi Firebase yang informasi log audit-nya ingin Anda lihat. Anda dapat menentukan lebih lanjut kolom LogEntry lainnya yang diindeks, seperti resource.type; untuk mengetahui detailnya, tinjau Menemukan entri log dengan cepat.

Berikut adalah nama log audit yang menyertakan variabel untuk ID project, folder, atau organisasi Firebase:

   projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity
   projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fdata_access
   projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fsystem_event
   projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fpolicy

   folders/FOLDER_ID/logs/cloudaudit.googleapis.com%2Factivity
   folders/FOLDER_ID/logs/cloudaudit.googleapis.com%2Fdata_access
   folders/FOLDER_ID/logs/cloudaudit.googleapis.com%2Fsystem_event
   folders/FOLDER_ID/logs/cloudaudit.googleapis.com%2Fpolicy

   organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com%2Factivity
   organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com%2Fdata_access
   organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com%2Fsystem_event
   organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com%2Fpolicy

Anda dapat melihat log audit di Cloud Logging menggunakan GCP Console, alat command line gcloud, atau Logging API.

Konsol

Anda dapat menggunakan Logs Explorer di GCP Console untuk mengambil entri log audit untuk project, folder, atau organisasi Firebase Anda:

  1. Di GCP Console, buka halaman Logging > Logs Explorer.

    Buka halaman Logs Explorer

  2. Di halaman Logs Explorer, pilih project, folder, atau organisasi Firebase yang sudah ada.

  3. Di panel Query builder, lakukan hal berikut:

    • Di Resource type, pilih resource Google Cloud yang log auditnya ingin Anda lihat.

    • Di Log name, pilih jenis log audit yang ingin dilihat:

      • Untuk log audit Aktivitas Admin, pilih activity.
      • Untuk log audit Akses Data, pilih data_access.
      • Untuk log audit Peristiwa Sistem, pilih system_event.
      • Untuk log audit Kebijakan Ditolak, pilih policy.

    Jika Anda tidak melihat opsi ini, berarti tidak ada log audit dengan jenis tersebut yang tersedia di project, folder, atau organisasi Firebase.

    Untuk detail lebih lanjut tentang proses kueri menggunakan Logs Explorer, lihat Mem-build kueri log.

gcloud

Alat command line gcloud menyediakan antarmuka command line ke Cloud Logging API. Berikan PROJECT_ID, FOLDER_ID, atau ORGANIZATION_ID yang valid di tiap nama log.

Untuk membaca entri log audit level project Firebase Anda, jalankan perintah berikut:

gcloud logging read "logName : projects/PROJECT_ID/logs/cloudaudit.googleapis.com" --project=PROJECT_ID

Untuk membaca entri log audit level folder, jalankan perintah berikut:

gcloud logging read "logName : folders/FOLDER_ID/logs/cloudaudit.googleapis.com" --folder=FOLDER_ID

Untuk membaca entri log audit level organisasi, jalankan perintah berikut:

gcloud logging read "logName : organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com" --organization=ORGANIZATION_ID

Untuk informasi selengkapnya tentang penggunaan alat gcloud, lihat Membaca entri log.

API

Saat membuat kueri, ganti variabel dengan nilai yang valid, ganti nama atau ID log audit level project, level folder, atau level organisasi yang sesuai seperti yang tercantum dalam nama log audit. Misalnya, jika kueri Anda menyertakan PROJECT_ID, ID project yang Anda berikan harus merujuk ke project Firebase yang saat ini dipilih.

Untuk menggunakan Logging API guna melihat entri log audit Anda, lakukan langkah berikut:

  1. Buka bagian Coba API ini dalam dokumentasi untuk metode entries.list.

  2. Masukkan string berikut ke dalam bagian Isi permintaan di formulir Coba API ini. Mengklik formulir yang telah diisi otomatis ini akan otomatis mengisi bagian permintaan, tetapi Anda harus memberikan PROJECT_ID yang valid di setiap nama log.

    {
      "resourceNames": [
        "projects/PROJECT_ID"
      ],
      "pageSize": 5,
      "filter": "logName : projects/PROJECT_ID/logs/cloudaudit.googleapis.com"
    }
    
  3. Klik Jalankan.

Untuk mengetahui kueri selengkapnya, lihat Bahasa kueri logging.

Untuk melihat contoh entri log audit dan cara mencari informasi yang paling penting di dalamnya, lihat Contoh entri log audit.

Merutekan log audit

Anda dapat merutekan log audit ke tujuan yang didukung dengan cara yang sama seperti saat merutekan jenis log lainnya. Berikut adalah beberapa alasan mengapa Anda mungkin ingin merutekan log audit Anda:

  • Untuk menyimpan log audit dalam jangka panjang atau untuk menggunakan kemampuan penelusuran yang lebih andal, Anda dapat merutekan salinan log audit Anda ke Google Cloud Storage, BigQuery, atau Google Cloud Pub/Sub. Dengan Cloud Pub/Sub, Anda dapat merutekan ke aplikasi lain, repositori lain, dan ke pihak ketiga.

  • Untuk mengelola log audit di seluruh organisasi, Anda dapat membuat sink gabungan yang dapat merutekan log dari setiap atau semua project Firebase di organisasi.

  • Jika log audit Akses Data yang diaktifkan membuat project Firebase Anda melebihi alokasi log, Anda dapat membuat sink yang mengecualikan log audit Akses Data dari Logging.

Untuk mengetahui petunjuk tentang cara merutekan log, lihat Mengonfigurasi sink.

Harga

Log audit Aktivitas Admin dan Log audit Peristiwa Sistem tidak dikenai biaya.

Log audit Akses Data dan Log audit Kebijakan Ditolak dapat dikenakan biaya.

Untuk informasi harga Cloud Logging lebih lanjut, lihat harga Google Cloud Operations Suite: Cloud Logging.