Firebase 即時資料庫稽核記錄

本文說明 Firebase 即時資料庫的稽核記錄功能。Google Cloud 服務會產生稽核記錄,記錄 Google Cloud 資源中的管理和存取活動。如要進一步瞭解 Cloud 稽核記錄,請參閱下列文章:

附註

如要進一步瞭解 protoPayload.metadataDATA_READDATA_WRITE 作業的 DATA_WRITE 欄位,請參閱參考說明文件

服務名稱

Firebase Realtime Database 稽核記錄會使用服務名稱 firebasedatabase.googleapis.com。篩選這項服務:

    protoPayload.serviceName="firebasedatabase.googleapis.com"
  

依權限類型劃分的方法

每個 IAM 權限都有 type 屬性,其值為列舉,可以是下列四個值之一:ADMIN_READADMIN_WRITEDATA_READDATA_WRITE。呼叫方法時,Firebase 即時資料庫會產生稽核記錄,記錄的類別取決於執行方法所需的權限的 type 屬性。如果方法需要 IAM 權限,且 type 屬性值為 DATA_READDATA_WRITEADMIN_READ,就會產生「資料存取」稽核記錄。需要 IAM 權限且 type 屬性值為 ADMIN_WRITE 的方法,會產生管理員活動稽核記錄。

下列清單中標示 (LRO) 的 API 方法,都是長時間執行的作業 (LRO)。這些方法通常會產生兩筆稽核記錄項目:一筆是在作業開始時產生,另一筆則是在作業結束時產生。詳情請參閱長時間執行的作業的稽核記錄
權限類型 方法
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

API 介面稽核記錄

如要瞭解系統如何評估每種方法的權限,請參閱 Firebase 即時資料庫的 Cloud Identity and Access Management 說明文件。

google.firebase.database.v1.RealtimeDatabase

下列稽核記錄與屬於 google.firebase.database.v1.RealtimeDatabase 的方法相關聯。

Connect

  • 方法google.firebase.database.v1.RealtimeDatabase.Connect
  • 稽核記錄類型資料存取
  • 權限
    • firebasedatabase.data.connect - DATA_READ
  • 方法是長時間執行的作業或串流作業: 否。
  • 篩選這個方法 protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Connect"

Disconnect

  • 方法google.firebase.database.v1.RealtimeDatabase.Disconnect
  • 稽核記錄類型資料存取
  • 權限
    • firebasedatabase.data.connect - DATA_READ
  • 方法是長時間執行的作業或串流作業: 否。
  • 篩選這個方法 protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Disconnect"

Listen

  • 方法google.firebase.database.v1.RealtimeDatabase.Listen
  • 稽核記錄類型資料存取
  • 權限
    • firebasedatabase.data.get - DATA_READ
  • 方法是長時間執行的作業或串流作業: 否。
  • 篩選這個方法 protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Listen"

OnDisconnectCancel

  • 方法google.firebase.database.v1.RealtimeDatabase.OnDisconnectCancel
  • 稽核記錄類型資料存取
  • 權限
    • firebasedatabase.data.cancel - DATA_READ
  • 方法是長時間執行的作業或串流作業: 否。
  • 篩選這個方法 protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.OnDisconnectCancel"

OnDisconnectPut

  • 方法google.firebase.database.v1.RealtimeDatabase.OnDisconnectPut
  • 稽核記錄類型資料存取
  • 權限
    • firebasedatabase.data.update - DATA_WRITE
  • 方法是長時間執行的作業或串流作業: 否。
  • 篩選這個方法 protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.OnDisconnectPut"

OnDisconnectUpdate

  • 方法google.firebase.database.v1.RealtimeDatabase.OnDisconnectUpdate
  • 稽核記錄類型資料存取
  • 權限
    • firebasedatabase.data.update - DATA_WRITE
  • 方法是長時間執行的作業或串流作業: 否。
  • 篩選這個方法 protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.OnDisconnectUpdate"

Read

  • 方法google.firebase.database.v1.RealtimeDatabase.Read
  • 稽核記錄類型資料存取
  • 權限
    • firebasedatabase.data.get - DATA_READ
  • 方法是長時間執行的作業或串流作業: 否。
  • 篩選這個方法 protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Read"

RunOnDisconnect

  • 方法google.firebase.database.v1.RealtimeDatabase.RunOnDisconnect
  • 稽核記錄類型資料存取
  • 權限
    • firebasedatabase.data.update - DATA_WRITE
  • 方法是長時間執行的作業或串流作業: 否。
  • 篩選這個方法 protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.RunOnDisconnect"

Unlisten

  • 方法google.firebase.database.v1.RealtimeDatabase.Unlisten
  • 稽核記錄類型資料存取
  • 權限
    • firebasedatabase.data.cancel - DATA_READ
  • 方法是長時間執行的作業或串流作業: 否。
  • 篩選這個方法 protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Unlisten"

Update

  • 方法google.firebase.database.v1.RealtimeDatabase.Update
  • 稽核記錄類型資料存取
  • 權限
    • firebasedatabase.data.get - DATA_WRITE
    • firebasedatabase.data.update - DATA_WRITE
  • 方法是長時間執行的作業或串流作業: 否。
  • 篩選這個方法 protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Update"

Write

  • 方法google.firebase.database.v1.RealtimeDatabase.Write
  • 稽核記錄類型資料存取
  • 權限
    • firebasedatabase.data.update - DATA_WRITE
  • 方法是長時間執行的作業或串流作業: 否。
  • 篩選這個方法 protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Write"

google.firebase.database.v1beta.RealtimeDatabaseService

下列稽核記錄與屬於 google.firebase.database.v1beta.RealtimeDatabaseService 的方法相關聯。

CreateDatabaseInstance

  • 方法google.firebase.database.v1beta.RealtimeDatabaseService.CreateDatabaseInstance
  • 稽核記錄類型管理員活動
  • 權限
    • firebasedatabase.instances.create - ADMIN_WRITE
  • 方法是長時間執行的作業或串流作業: 否。
  • 篩選這個方法 protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.CreateDatabaseInstance"

DeleteDatabaseInstance

  • 方法google.firebase.database.v1beta.RealtimeDatabaseService.DeleteDatabaseInstance
  • 稽核記錄類型管理員活動
  • 權限
    • firebasedatabase.instances.delete - ADMIN_WRITE
  • 方法是長時間執行的作業或串流作業: 否。
  • 篩選這個方法 protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.DeleteDatabaseInstance"

DisableDatabaseInstance

  • 方法google.firebase.database.v1beta.RealtimeDatabaseService.DisableDatabaseInstance
  • 稽核記錄類型管理員活動
  • 權限
    • firebasedatabase.instances.disable - ADMIN_WRITE
  • 方法是長時間執行的作業或串流作業: 否。
  • 篩選這個方法 protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.DisableDatabaseInstance"

GetDatabaseInstance

  • 方法google.firebase.database.v1beta.RealtimeDatabaseService.GetDatabaseInstance
  • 稽核記錄類型資料存取
  • 權限
    • firebasedatabase.instances.get - ADMIN_READ
  • 方法是長時間執行的作業或串流作業: 否。
  • 篩選這個方法 protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.GetDatabaseInstance"

ListDatabaseInstances

  • 方法google.firebase.database.v1beta.RealtimeDatabaseService.ListDatabaseInstances
  • 稽核記錄類型資料存取
  • 權限
    • firebasedatabase.instances.list - ADMIN_READ
  • 方法是長時間執行的作業或串流作業: 否。
  • 篩選這個方法 protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.ListDatabaseInstances"

ReenableDatabaseInstance

  • 方法google.firebase.database.v1beta.RealtimeDatabaseService.ReenableDatabaseInstance
  • 稽核記錄類型管理員活動
  • 權限
    • firebasedatabase.instances.reenable - ADMIN_WRITE
  • 方法是長時間執行的作業或串流作業: 否。
  • 篩選這個方法 protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.ReenableDatabaseInstance"

UndeleteDatabaseInstance

  • 方法google.firebase.database.v1beta.RealtimeDatabaseService.UndeleteDatabaseInstance
  • 稽核記錄類型管理員活動
  • 權限
    • firebasedatabase.instances.undelete - ADMIN_WRITE
  • 方法是長時間執行的作業或串流作業: 否。
  • 篩選這個方法 protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.UndeleteDatabaseInstance"

稽核驗證資訊

稽核記錄項目包含執行記錄作業的身分相關資訊。如要識別要求呼叫端,請參閱 AuditLog 物件中的下列欄位:

  • 建立即時連線。Realtime Database Connect 作業不會記錄驗證資料,因為 Realtime Database 會在連線建立後進行驗證。因此,Connect 沒有驗證資訊。AuthenticationInfo 物件包含 audit-pending-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com 的預留位置 principalEmail

  • Google 驗證。使用標準 Google 驗證的 Realtime Database 作業 (例如來自 Firebase Admin SDK 的流量或以標準 OAuth 權杖驗證的 REST 要求),會包含含有實際憑證電子郵件的 AuthenticationInfo 物件。

  • Firebase Authentication使用 Firebase AuthenticationRealtime Database 作業具有 AuthenticationInfo 物件,其中包含 principalEmailaudit-third-party-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com。如果您透過鑄造自訂 JWT 實作自己的驗證解決方案,也會發生同樣的情況。

    • 如果第三方驗證使用 JSON Web Token (JWT),thirdPartyPrincipal 欄位會包含權杖的標頭和酬載。舉例來說,以 Firebase Authentication 驗證的要求稽核記錄會包含該要求的 Firebase Authentication 權杖。
  • 沒有任何驗證機制。未採用任何驗證機制的 Realtime Database 作業會包含 AuthenticationInfo 物件,其中含有 principalEmailaudit-no-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com。具有開放式安全規則的 Realtime Database 執行個體可能會授予這類要求。建議所有使用者妥善保護資料庫。

  • 舊版密鑰權杖。使用舊版權杖Realtime Database 作業具有 AuthenticationInfo 物件,其中包含 audit-secret-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.comprincipalEmail 預留位置。如果是以密鑰簽署的 JWT,thirdPartyPrincipal 包含 JWT 標頭和酬載。

稽核 Firebase Security Rules 評估

您可以使用 Cloud 稽核記錄,找出可能受到 Rules 變更影響的要求。

AuthorizationInfo 物件中,authorization.permission 可以是下列其中一個值:

  • firebasedatabase.data.get:在 resource 指定的路徑中授予讀取權限。
  • firebasedatabase.data.update:在 resource 中指定的路徑授予寫入存取權。
  • firebasedatabase.data.connectConnectDisconnect 的預留位置。 連線至 Realtime Database 執行個體時,不需要授權。
  • firebasedatabase.data.cancel:用於 UnlistenOnDisconnectCancel。 如要撤銷或取消先前授權的作業,不需要額外授權。

將 Cloud 稽核記錄與 Realtime Database 分析器結果相互關聯

您可以搭配使用 Realtime Database 剖析器Realtime Database 稽核記錄,對 Realtime Database 進行深入的效能分析。每項工具都有其優勢。

Cloud 稽核記錄 Realtime Database profiler
  • 稽核資料庫存取權
  • 持續擷取所有要求
  • 允許回溯查詢
  • 包含詳細的驗證權杖資訊
  • 產生使用費
  • 用於成效分析
  • 提供實用的工具,可找出熱點,進而最佳化效能
  • 可測量 listener-broadcast,但由於資料量可能過大,因此稽核記錄中不會提供這項資訊
  • 輕量級且即時,適合用於即時負載測試。稽核記錄項目可能需要幾分鐘才會顯示。

稽核記錄內容對應的剖析器指標如下所示。

稽核記錄作業名稱
RealtimeDatabaseAuditMetadata 中的特殊值
剖析器作業名稱
連線 RequestType」現為「REALTIME concurrent-connect
中斷連線 RequestType」現為「REALTIME concurrent-disconnect
讀取 RequestType」現為「REALTIME realtime-read
讀取 RequestType」現為「REST rest-read
寫入 RequestType」現為「REALTIME realtime-write
寫入 RequestType」現為「REST rest-write
更新 RequestTypeREALTIME
檢查 PreconditionType
realtime-update
realtime-transaction
更新 RequestTypeREST
檢查 PreconditionType
rest-update
rest-transaction
ListenerListen RequestType」現為「REALTIME listener-listen
ListenerUnlisten RequestType」現為「REALTIME listener-unlisten
OnDisconnectPut RequestType」現為「REALTIME on-disconnect-put
OnDisconnectUpdate RequestType」現為「REALTIME on-disconnect-update
OnDisconnectCancel RequestType」現為「REALTIME on-disconnect-cancel
RunOnDisconnect RequestType」現為「REALTIME run-on-disconnect