Dokumen ini menjelaskan logging audit untuk Firebase Realtime Database. Layanan Google Cloud membuat log audit yang mencatat aktivitas administratif dan akses dalam resource Google Cloud Anda. Untuk informasi selengkapnya tentang Cloud Audit Logs, lihat referensi berikut:
- Jenis log audit
- Struktur entri log audit
- Menyimpan dan merutekan log audit
- Ringkasan harga Cloud Logging
- Mengaktifkan log audit Akses Data
Catatan
Informasi tambahan tentang kolom di protoPayload.metadata untuk operasi DATA_READ dan DATA_WRITE tersedia di dokumentasi referensi.
Nama layanan
Log audit Firebase Realtime Database menggunakan nama layanan firebasedatabase.googleapis.com.
Filter untuk layanan ini:
protoPayload.serviceName="firebasedatabase.googleapis.com"
Metode menurut jenis izin
Setiap izin IAM memiliki properti type, yang nilainya adalah enum
yang dapat berupa salah satu dari empat nilai: ADMIN_READ, ADMIN_WRITE,
DATA_READ, atau DATA_WRITE. Saat Anda memanggil metode, Firebase Realtime Database akan membuat log audit yang kategorinya bergantung pada properti type izin yang diperlukan untuk menjalankan metode.
Metode yang memerlukan izin IAM dengan nilai properti type DATA_READ, DATA_WRITE, atau ADMIN_READ akan menghasilkan log audit Akses Data.
Metode yang memerlukan izin IAM dengan nilai properti type dari ADMIN_WRITE akan membuat log audit Aktivitas Admin.
| Jenis izin | Metode |
|---|---|
ADMIN_READ |
google.firebase.database.v1beta.RealtimeDatabaseService.GetDatabaseInstancegoogle.firebase.database.v1beta.RealtimeDatabaseService.ListDatabaseInstances |
ADMIN_WRITE |
google.firebase.database.v1beta.RealtimeDatabaseService.CreateDatabaseInstancegoogle.firebase.database.v1beta.RealtimeDatabaseService.DeleteDatabaseInstancegoogle.firebase.database.v1beta.RealtimeDatabaseService.DisableDatabaseInstancegoogle.firebase.database.v1beta.RealtimeDatabaseService.ReenableDatabaseInstancegoogle.firebase.database.v1beta.RealtimeDatabaseService.UndeleteDatabaseInstance |
DATA_READ |
google.firebase.database.v1.RealtimeDatabase.Connectgoogle.firebase.database.v1.RealtimeDatabase.Disconnectgoogle.firebase.database.v1.RealtimeDatabase.Listengoogle.firebase.database.v1.RealtimeDatabase.OnDisconnectCancelgoogle.firebase.database.v1.RealtimeDatabase.Readgoogle.firebase.database.v1.RealtimeDatabase.Unlisten |
DATA_WRITE |
google.firebase.database.v1.RealtimeDatabase.OnDisconnectPutgoogle.firebase.database.v1.RealtimeDatabase.OnDisconnectUpdategoogle.firebase.database.v1.RealtimeDatabase.RunOnDisconnectgoogle.firebase.database.v1.RealtimeDatabase.Updategoogle.firebase.database.v1.RealtimeDatabase.Write |
Log audit antarmuka API
Untuk mengetahui informasi tentang cara dan izin mana yang dievaluasi untuk setiap metode, lihat dokumentasi Cloud Identity and Access Management untuk Firebase Realtime Database.
google.firebase.database.v1.RealtimeDatabase
Log audit berikut dikaitkan dengan metode yang termasuk dalam google.firebase.database.v1.RealtimeDatabase.
Connect
- Metode:
google.firebase.database.v1.RealtimeDatabase.Connect - Jenis log audit: Akses data
- Izin:
firebasedatabase.data.connect - DATA_READ
- Metode adalah operasi streaming atau yang berjalan lama:
Tidak.
- Filter untuk metode ini:
protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Connect"
Disconnect
- Metode:
google.firebase.database.v1.RealtimeDatabase.Disconnect - Jenis log audit: Akses data
- Izin:
firebasedatabase.data.connect - DATA_READ
- Metode adalah operasi streaming atau yang berjalan lama:
Tidak.
- Filter untuk metode ini:
protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Disconnect"
Listen
- Metode:
google.firebase.database.v1.RealtimeDatabase.Listen - Jenis log audit: Akses data
- Izin:
firebasedatabase.data.get - DATA_READ
- Metode adalah operasi streaming atau yang berjalan lama:
Tidak.
- Filter untuk metode ini:
protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Listen"
OnDisconnectCancel
- Metode:
google.firebase.database.v1.RealtimeDatabase.OnDisconnectCancel - Jenis log audit: Akses data
- Izin:
firebasedatabase.data.cancel - DATA_READ
- Metode adalah operasi streaming atau yang berjalan lama:
Tidak.
- Filter untuk metode ini:
protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.OnDisconnectCancel"
OnDisconnectPut
- Metode:
google.firebase.database.v1.RealtimeDatabase.OnDisconnectPut - Jenis log audit: Akses data
- Izin:
firebasedatabase.data.update - DATA_WRITE
- Metode adalah operasi streaming atau yang berjalan lama:
Tidak.
- Filter untuk metode ini:
protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.OnDisconnectPut"
OnDisconnectUpdate
- Metode:
google.firebase.database.v1.RealtimeDatabase.OnDisconnectUpdate - Jenis log audit: Akses data
- Izin:
firebasedatabase.data.update - DATA_WRITE
- Metode adalah operasi streaming atau yang berjalan lama:
Tidak.
- Filter untuk metode ini:
protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.OnDisconnectUpdate"
Read
- Metode:
google.firebase.database.v1.RealtimeDatabase.Read - Jenis log audit: Akses data
- Izin:
firebasedatabase.data.get - DATA_READ
- Metode adalah operasi streaming atau yang berjalan lama:
Tidak.
- Filter untuk metode ini:
protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Read"
RunOnDisconnect
- Metode:
google.firebase.database.v1.RealtimeDatabase.RunOnDisconnect - Jenis log audit: Akses data
- Izin:
firebasedatabase.data.update - DATA_WRITE
- Metode adalah operasi streaming atau yang berjalan lama:
Tidak.
- Filter untuk metode ini:
protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.RunOnDisconnect"
Unlisten
- Metode:
google.firebase.database.v1.RealtimeDatabase.Unlisten - Jenis log audit: Akses data
- Izin:
firebasedatabase.data.cancel - DATA_READ
- Metode adalah operasi streaming atau yang berjalan lama:
Tidak.
- Filter untuk metode ini:
protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Unlisten"
Update
- Metode:
google.firebase.database.v1.RealtimeDatabase.Update - Jenis log audit: Akses data
- Izin:
firebasedatabase.data.get - DATA_WRITEfirebasedatabase.data.update - DATA_WRITE
- Metode adalah operasi streaming atau yang berjalan lama:
Tidak.
- Filter untuk metode ini:
protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Update"
Write
- Metode:
google.firebase.database.v1.RealtimeDatabase.Write - Jenis log audit: Akses data
- Izin:
firebasedatabase.data.update - DATA_WRITE
- Metode adalah operasi streaming atau yang berjalan lama:
Tidak.
- Filter untuk metode ini:
protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Write"
google.firebase.database.v1beta.RealtimeDatabaseService
Log audit berikut dikaitkan dengan metode yang termasuk dalam google.firebase.database.v1beta.RealtimeDatabaseService.
CreateDatabaseInstance
- Metode:
google.firebase.database.v1beta.RealtimeDatabaseService.CreateDatabaseInstance - Jenis log audit: Aktivitas admin
- Izin:
firebasedatabase.instances.create - ADMIN_WRITE
- Metode adalah operasi streaming atau yang berjalan lama:
Tidak.
- Filter untuk metode ini:
protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.CreateDatabaseInstance"
DeleteDatabaseInstance
- Metode:
google.firebase.database.v1beta.RealtimeDatabaseService.DeleteDatabaseInstance - Jenis log audit: Aktivitas admin
- Izin:
firebasedatabase.instances.delete - ADMIN_WRITE
- Metode adalah operasi streaming atau yang berjalan lama:
Tidak.
- Filter untuk metode ini:
protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.DeleteDatabaseInstance"
DisableDatabaseInstance
- Metode:
google.firebase.database.v1beta.RealtimeDatabaseService.DisableDatabaseInstance - Jenis log audit: Aktivitas admin
- Izin:
firebasedatabase.instances.disable - ADMIN_WRITE
- Metode adalah operasi streaming atau yang berjalan lama:
Tidak.
- Filter untuk metode ini:
protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.DisableDatabaseInstance"
GetDatabaseInstance
- Metode:
google.firebase.database.v1beta.RealtimeDatabaseService.GetDatabaseInstance - Jenis log audit: Akses data
- Izin:
firebasedatabase.instances.get - ADMIN_READ
- Metode adalah operasi streaming atau yang berjalan lama:
Tidak.
- Filter untuk metode ini:
protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.GetDatabaseInstance"
ListDatabaseInstances
- Metode:
google.firebase.database.v1beta.RealtimeDatabaseService.ListDatabaseInstances - Jenis log audit: Akses data
- Izin:
firebasedatabase.instances.list - ADMIN_READ
- Metode adalah operasi streaming atau yang berjalan lama:
Tidak.
- Filter untuk metode ini:
protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.ListDatabaseInstances"
ReenableDatabaseInstance
- Metode:
google.firebase.database.v1beta.RealtimeDatabaseService.ReenableDatabaseInstance - Jenis log audit: Aktivitas admin
- Izin:
firebasedatabase.instances.reenable - ADMIN_WRITE
- Metode adalah operasi streaming atau yang berjalan lama:
Tidak.
- Filter untuk metode ini:
protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.ReenableDatabaseInstance"
UndeleteDatabaseInstance
- Metode:
google.firebase.database.v1beta.RealtimeDatabaseService.UndeleteDatabaseInstance - Jenis log audit: Aktivitas admin
- Izin:
firebasedatabase.instances.undelete - ADMIN_WRITE
- Metode adalah operasi streaming atau yang berjalan lama:
Tidak.
- Filter untuk metode ini:
protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.UndeleteDatabaseInstance"
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 Realtime Database
Connecttidak mencatat data autentikasi karena Realtime Database diautentikasi setelah koneksi dibuat. Oleh karena itu,Connecttidak memiliki info autentikasi. ObjekAuthenticationInfoberisi placeholderprincipalEmaildariaudit-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
AuthenticationInfoyang berisi email kredensial yang sebenarnya.Firebase Authentication. Operasi Realtime Database yang menggunakan Firebase Authentication memiliki objek
AuthenticationInfoyang berisi nilaiprincipalEmailsebesaraudit-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
thirdPartyPrincipalakan menyertakan header dan payload token. Misalnya, log audit untuk permintaan yang diautentikasi dengan Firebase Authentication menyertakan token Firebase Authentication permintaan tersebut.
- Jika Token Web JSON (JWT) digunakan untuk autentikasi pihak ketiga, kolom
Tidak ada autentikasi Operasi Realtime Database yang tidak menggunakan autentikasi apa pun memiliki objek
AuthenticationInfoyang berisi nilaiprincipalEmaildariaudit-no-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.comInstance 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
AuthenticationInfoyang berisi placeholderprincipalEmaildariaudit-secret-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com. Untuk JWT yang ditandatangani secara rahasia,thirdPartyPrincipalberisi header dan payload JWT.
Mengaudit evaluasi Firebase Security Rules
Cloud Audit Logs dapat digunakan untuk mengidentifikasi permintaan yang berpotensi terpengaruh oleh perubahan Rules.
Di objek AuthorizationInfo, authorization.permission dapat berupa salah satu dari:
firebasedatabase.data.get: Akses baca diberikan pada jalur yang ditentukan diresource.firebasedatabase.data.update: Akses tulis yang diberikan di jalur yang ditentukan diresource.firebasedatabase.data.connect: Placeholder untukConnectdanDisconnect. Tidak diperlukan otorisasi untuk terhubung ke instance Realtime Database.firebasedatabase.data.cancel: Digunakan untukUnlistendanOnDisconnectCancel. Mencabut atau membatalkan operasi yang sebelumnya diizinkan tidak memerlukan otorisasi tambahan.
Menghubungkan Cloud Audit Logs 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 |
|---|---|
|
|
Konten log audit sesuai dengan metrik profiler seperti yang ditunjukkan di bawah.
| Nama operasi Logging Audit | Nilai khusus dalamRealtimeDatabaseAuditMetadata |
Nama operasi profiler |
|---|---|---|
| Hubungkan | RequestType is REALTIME |
concurrent-connect |
| Putuskan Sambungkan | RequestType is REALTIME |
concurrent-disconnect |
| Baca | RequestType is REALTIME |
realtime-read |
| Baca | RequestType is REST |
rest-read |
| Tulis | RequestType is REALTIME |
realtime-write |
| Tulis | RequestType is REST |
rest-write |
| Perbarui | RequestType is REALTIME.
Check PreconditionType. |
realtime-update realtime-transaction |
| Perbarui | 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 |