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.GetDatabaseInstance google.firebase.database.v1beta.RealtimeDatabaseService.ListDatabaseInstances |
ADMIN_WRITE |
google.firebase.database.v1beta.RealtimeDatabaseService.CreateDatabaseInstance google.firebase.database.v1beta.RealtimeDatabaseService.DeleteDatabaseInstance google.firebase.database.v1beta.RealtimeDatabaseService.DisableDatabaseInstance google.firebase.database.v1beta.RealtimeDatabaseService.ReenableDatabaseInstance google.firebase.database.v1beta.RealtimeDatabaseService.UndeleteDatabaseInstance |
DATA_READ |
google.firebase.database.v1.RealtimeDatabase.Connect google.firebase.database.v1.RealtimeDatabase.Disconnect google.firebase.database.v1.RealtimeDatabase.Listen google.firebase.database.v1.RealtimeDatabase.OnDisconnectCancel google.firebase.database.v1.RealtimeDatabase.Read google.firebase.database.v1.RealtimeDatabase.Unlisten |
DATA_WRITE |
google.firebase.database.v1.RealtimeDatabase.OnDisconnectPut google.firebase.database.v1.RealtimeDatabase.OnDisconnectUpdate google.firebase.database.v1.RealtimeDatabase.RunOnDisconnect google.firebase.database.v1.RealtimeDatabase.Update google.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_WRITE
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.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
Connect
tidak mencatat data autentikasi karena Realtime Database diautentikasi setelah koneksi dibuat. Oleh karena itu,Connect
tidak memiliki info autentikasi. ObjekAuthenticationInfo
berisi placeholderprincipalEmail
dariaudit-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 nilaiprincipalEmail
sebesaraudit-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.
- 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
AuthenticationInfo
yang berisi nilaiprincipalEmail
dariaudit-no-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com
Instance 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 placeholderprincipalEmail
dariaudit-secret-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com
. Untuk JWT yang ditandatangani secara rahasia,thirdPartyPrincipal
berisi 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 untukConnect
danDisconnect
. Tidak diperlukan otorisasi untuk terhubung ke instance Realtime Database.firebasedatabase.data.cancel
: Digunakan untukUnlisten
danOnDisconnectCancel
. 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 |
---|---|---|
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 |