Firebase 實時數據庫審核日誌記錄

本頁介紹了 Firebase 創建的審計日誌,作為Cloud Audit Logs的一部分。

概述

Firebase 服務編寫審計日誌來幫助您回答“誰在何時何地做了什麼?”等問題。這些是 Cloud Audit Logs,作為連接到您的 Firebase 項目的 Google Cloud 項目的一部分提供。

您的每個 Firebase 項目僅包含直接位於項目內的資源的審核日誌。

有關 Cloud Audit Logs 的一般概述,請參閱Cloud Audit Logs 概述。要更深入地了解審計日誌格式,請參閱了解審計日誌

可用的審計日誌

以下類型的審核日誌可用於 Firebase 實時數據庫:

  • 管理員活動審核日誌

    包括寫入元數據或配置信息的“管理寫入”操作。

    您不能禁用管理員活動審核日誌。

  • 數據訪問審計日誌

    包括讀取元數據或配置信息的“管理員讀取”操作。還包括讀取或寫入用戶提供的數據的“數據讀取”和“數據寫入”操作。

    要接收數據訪問審核日誌,您必須明確啟用它們。

有關審核日誌類型的更完整描述,請參閱審核日誌類型。

經審計的操作

下面總結了 Firebase 實時數據庫中每種審計日誌類型對應的 API 操作:

審核日誌類別Firebase 實時數據庫操作
管理員活動審核日誌 (ADMIN_WRITE)
  • 創建數據庫實例
  • 刪除數據庫實例
  • 禁用數據庫實例
  • 重新啟用數據庫實例
數據訪問審計日誌 (ADMIN_READ)
  • 獲取數據庫實例
  • 列表數據庫實例
數據訪問審計日誌(DATA_READ 或 DATA_WRITE)
數據訪問審計日誌 (DATA_READ)
數據訪問審計日誌 (DATA_WRITE)
  • 更新。請參閱關聯的WriteMetadata
  • OnDisconnectPut
  • 斷開連接更新。請參閱關聯的WriteMetadata
  • 斷開連接取消

審核認證信息

審核日誌條目包括有關執行記錄操作的身份的信息。要識別請求調用者,請查看 AuditLog 對像中的以下字段:

  • 建立實時連接。實時數據庫Connect操作不會記錄身份驗證數據,因為實時數據庫會在連接建立後進行身份驗證。因此, Connect沒有身份驗證信息。 AuthenticationInfo對象包含audit-pending-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com的佔位符principalEmail

  • 谷歌身份驗證。使用標準 Google 身份驗證的實時數據庫操作(例如來自 Firebase Admin SDK 的流量或使用標準 OAuth 令牌進行身份驗證的 REST 請求)具有包含實際憑據電子郵件的AuthenticationInfo對象。

  • 火力地堡身份驗證。使用 Firebase 身份驗證的實時數據庫操作有一個AuthenticationInfo對象,其中包含audit-third-party-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.comprincipalEmail值。如果您通過創建自定義 JWT 來實現自己的身份驗證解決方案,情況也是如此。

    • 如果 JSON Web 令牌 (JWT) 用於第三方身份驗證,則thirdPartyPrincipal字段包含令牌的標頭和負載。例如,使用 Firebase 身份驗證進行身份驗證的請求的審核日誌包括該請求的 Firebase 身份驗證令牌。
  • 沒有身份驗證。不使用任何身份驗證的實時數據庫操作具有AuthenticationInfo對象,該對象包含audit-no-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.comprincipalEmail值。具有開放安全規則的實時數據庫實例可以授予此類請求.我們建議所有用戶妥善保護他們的數據庫。

  • 遺留秘密令牌。使用遺留令牌的實時數據庫操作有一個AuthenticationInfo對象,其中包含audit-secret-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com的佔位符principalEmail 。對於秘密簽名的 JWT, thirdPartyPrincipal包含 JWT 標頭和負載。

審核 Firebase 安全規則評估

Cloud Audit 日誌可用於識別可能會受到規則更改影響的請求。

AuthorizationInfo對像中, authorization.permission可以是以下之一:

  • firebasedatabase.data.get :在resource中指定的路徑上授予讀取訪問權限。
  • firebasedatabase.data.update :在resource中指定的路徑上授予寫入訪問權限。
  • firebasedatabase.data.connectConnectDisconnect的佔位符。無需授權即可連接到實時數據庫實例。
  • firebasedatabase.data.cancel :用於UnlistenOnDisconnectCancel 。撤銷或取消先前授權的操作不需要額外的授權。

將雲審計日誌與實時數據庫分析器結果相關聯

您可以結合使用實時數據庫分析器和實時數據庫審核日誌記錄,對實時數據庫執行深入的性能分析。每種工具都有其優勢。

雲審計日誌實時數據庫分析器
  • 審計對數據庫的訪問
  • 持續捕獲所有請求
  • 允許追溯查詢
  • 包含詳細的身份驗證令牌信息
  • 產生使用成本
  • 用於性能分析
  • 為熱點識別提供有用的工具,從而優化性能
  • 可以測量listener-broadcast ,由於潛在的數據量,它在審計日誌中不可用
  • 輕量級和實時性,非常適合實時負載測試。審核日誌條目可能需要幾分鐘才能顯示。

審計日誌內容對應於分析器指標,如下所示。

審計日誌記錄操作名稱中的特殊值
RealtimeDatabaseAuditMetadata
探查器操作名稱
連接RequestTypeREALTIME並發連接
斷開RequestTypeREALTIME並發斷開
RequestTypeREALTIME實時閱讀
RequestType類型是REST休息閱讀
RequestTypeREALTIME實時寫入
RequestType類型是REST休寫
更新RequestTypeREALTIME
檢查PreconditionType
實時更新
實時交易
更新RequestType類型是REST
檢查PreconditionType
休息更新
休息交易
聽眾聽RequestTypeREALTIME聽眾-聽
聽者不聽RequestTypeREALTIME聽者不聽
OnDisconnectPut RequestTypeREALTIME斷開連接
斷開連接更新RequestTypeREALTIME斷開連接更新
斷開連接取消RequestTypeREALTIME斷開連接取消
斷開連接時運行RequestTypeREALTIME斷開連接時運行

審計日誌格式

審核日誌條目包括以下對象:

  • 日誌條目本身,它是LogEntry類型的對象。有用的字段包括:

    • logName包含資源 ID 和審計日誌類型。
    • resource包含已審計操作的目標。
    • timestamp包含審計操作的時間。
    • protoPayload包含審核信息。
  • 審計日誌數據,它是日誌條目的protoPayload字段中保存的AuditLog對象。

  • 可選的特定於服務的審計信息,它是特定於服務的對象。對於較舊的集成,此對象保存在AuditLog對象的serviceData字段中;較新的集成使用metadata字段。

對於這些對像中的其他字段以及如何解釋它們,請查看了解審計日誌

有關protoPayload.metadata中用於DATA_READDATA_WRITE操作的字段的更多信息,請參閱參考文檔

日誌名稱

Cloud Audit Logs 資源名稱指示擁有審計日誌的 Firebase 項目或其他 Google Cloud 實體,以及該日誌是否包含管理活動、數據訪問、策略被拒絕或系統事件審計日誌記錄數據。例如,下面顯示了項目級管理活動審核日誌和組織的數據訪問審核日誌的日誌名稱。變量表示 Firebase 項目和組織標識符。

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

服務名稱

Firebase 實時數據庫審核日誌使用服務名稱firebasedatabase.googleapis.com

有關所有 Cloud Logging API 服務名稱及其相應受監控資源類型的完整列表,請參閱將服務映射到資源

資源類型

Firebase 實時數據庫審計日誌對所有審計日誌使用資源類型audited_resource

有關所有 Cloud Logging 監控的資源類型和描述信息的列表,請參閱監控的資源類型

啟用審計日誌

管理員活動審核日誌始終處於啟用狀態;你不能禁用它們。

數據訪問審核日誌默認情況下處於禁用狀態,除非明確啟用,否則不會寫入(BigQuery 的數據訪問審核日誌除外,它無法禁用)。

通過檢查 GCP 控制台中的DATA_READ和/或DATA_WRITE來切換實時數據庫的數據訪問審計日誌。在 GCP Console 中啟用/禁用日誌的時間與日誌開始/停止傳送的時間之間最多有一個小時的延遲。

有關啟用部分或全部數據訪問審核日誌的說明,請參閱配置數據訪問日誌

權限和角色

Cloud IAM權限和角色決定了您訪問 Google Cloud 資源中審核日誌數據的能力。

在決定哪些特定於日誌記錄的權限和角色適用於您的用例時,請考慮以下因素:

  • 日誌查看者角色 ( roles/logging.viewer ) 為您提供對管理活動、策略被拒絕和系統事件審核日誌的只讀訪問權限。如果您只有此角色,則無法查看_Default存儲桶中的數據訪問審核日誌。

  • 私人日誌查看者角色(roles/logging.privateLogViewer ) 包括roles/logging.viewer /logging.viewer 中包含的權限,以及讀取_Default存儲桶中的數據訪問審核日誌的能力。

    請注意,如果這些私有日誌存儲在用戶定義的存儲桶中,那麼任何有權讀取這些存儲桶中的日誌的用戶都可以讀取私有日誌。有關日誌桶的更多信息,請參閱路由和存儲概述

有關適用於審核日誌數據的 Cloud IAM 權限和角色的更多信息,請參閱訪問控制

查看日誌

要查找和查看審核日誌,您需要知道要查看其審核日誌信息的 Firebase 項目、文件夾或組織的標識符。您可以進一步指定其他索引的LogEntry字段,如resource.type ;有關詳細信息,請查看快速查找日誌條目

以下是審計日誌名稱;它們包括 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

您可以使用 GCP Console、 gcloud命令行工具或 Logging API 在 Cloud Logging 中查看審核日誌。

安慰

您可以使用 GCP Console 中的日誌瀏覽器來檢索您的 Firebase 項目、文件夾或組織的審核日誌條目:

  1. 在 GCP Console 中,轉到日誌記錄 > 日誌資源管理器頁面。

    轉到日誌瀏覽器頁面

  2. Logs Explorer頁面上,選擇一個現有的 Firebase 項目、文件夾或組織。

  3. 查詢構建器窗格中,執行以下操作:

    • Resource type中,選擇您要查看其審核日誌的 Google Cloud 資源。

    • Log name中,選擇您要查看的審核日誌類型:

      • 對於管理員活動審計日誌,選擇activity
      • 對於數據訪問審計日誌,選擇data_access
      • 對於系統事件審計日誌,選擇system_event
      • 對於 Policy Denied 審計日誌,選擇policy

    如果您沒有看到這些選項,則表明 Firebase 項目、文件夾或組織中沒有任何可用的該類型的審核日誌。

    有關使用日誌資源管理器進行查詢的更多詳細信息,請參閱構建日誌查詢

雲端

gcloud命令行工具為 Cloud Logging API 提供命令行界面。在每個日誌名稱中提供有效的PROJECT_IDFOLDER_IDORGANIZATION_ID

要讀取您的 Firebase 項目級審核日誌條目,請運行以下命令:

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

要讀取文件夾級別的審核日誌條目,請運行以下命令:

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

要讀取組織級別的審核日誌條目,請運行以下命令:

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

有關使用gcloud工具的更多信息,請參閱讀取日誌條目

應用程序接口

構建查詢時,將變量替換為有效值,替換適當的項目級別、文件夾級別或組織級別的審核日誌名稱或審核日誌名稱中列出的標識符。例如,如果您的查詢包含PROJECT_ID ,那麼您提供的項目標識符必須引用當前選擇的 Firebase 項目。

要使用 Logging API 查看您的審核日誌條目,請執行以下操作:

  1. 轉到entries.list方法文檔中的試用此 API部分。

  2. 將以下內容放入Try this API表單的請求正文部分。單擊此預填充的表單會自動填寫請求正文,但您需要在每個日誌名稱中提供有效的PROJECT_ID

    {
      "resourceNames": [
        "projects/PROJECT_ID"
      ],
      "pageSize": 5,
      "filter": "logName : projects/PROJECT_ID/logs/cloudaudit.googleapis.com"
    }
    
  3. 單擊執行

有關查詢的更多詳細信息,請參閱日誌記錄查詢語言

有關審核日誌條目的示例以及如何在其中找到最重要的信息,請參閱示例審核日誌條目

路由審計日誌

您可以按照與路由其他類型的日誌相同的方式將審計日誌路由到支持的目標。以下是您可能希望路由審核日誌的一些原因:

  • 要將審計日誌保留更長時間或使用更強大的搜索功能,您可以將審計日誌的副本路由到 Google Cloud Storage、BigQuery 或 Google Cloud Pub/Sub。使用 Cloud Pub/Sub,您可以路由到其他應用程序、其他存儲庫和第三方。

  • 要管理整個組織的審計日誌,您可以創建聚合接收器,以路由來自組織中任何或所有 Firebase 項目的日誌。

  • 如果您啟用的數據訪問審核日誌將您的 Firebase 項目推到超過您的日誌分配,您可以創建從日誌記錄中排除數據訪問審核日誌的接收器。

有關路由日誌的說明,請參閱配置接收器

價錢

管理員活動審計日誌系統事件審計日誌是免費的。

數據訪問審計日誌政策拒絕審計日誌是收費的。

有關 Cloud Logging 定價的更多信息,請參閱Google Cloud 的操作套件定價:Cloud Logging