Firebase Realtime Database 的审核日志记录

本页面介绍由 Firebase 创建、包含在 Cloud Audit Logs 中的审核日志。

概览

Firebase 服务会写入审核日志,便于您了解谁何时在何处执行了什么操作。这些日志是作为关联到 Firebase 项目的 Google Cloud 项目的一部分提供的 Cloud Audit Logs 日志。

每个 Firebase 项目都只包含直接属于项目的资源的审核日志。

如需大致了解 Cloud Audit Logs,请参阅 Cloud Audit Logs 概览。如需深入了解审核日志格式,请参阅了解审核日志

可用的审核日志

Firebase Realtime Database 提供以下类型的审核日志:

  • 管理员活动审核日志

    包括写入元数据或配置信息的“管理员写入”操作。

    您无法停用管理员活动审核日志。

  • 数据访问审核日志

    包括读取元数据或配置信息的“管理员读取”操作。此外,还包括读取或写入用户提供的数据的“数据读取”和“数据写入”操作。

    如需接收数据访问审核日志,您必须明确启用这些日志。

如需查看审核日志类型的更完整说明,请参阅审核日志类型

审核的操作

下表汇总了 Firebase Realtime Database 中每种审核日志类型对应的 API 操作:

审核日志类别 Firebase Realtime Database 操作
管理员活动审核日志 (ADMIN_WRITE)
  • CreateDatabaseInstance
  • DeleteDatabaseInstance
  • DisableDatabaseInstance
  • ReenableDatabaseInstance
数据访问审核日志 (ADMIN_READ)
  • GetDatabaseInstance
  • ListDatabaseInstances
数据访问审核日志(DATA_READ 和 DATA_WRITE)
数据访问审核日志 (DATA_READ)
数据访问审核日志 (DATA_WRITE)
  • Write
  • Update。 请参阅关联的 WriteMetadata
  • OnDisconnectPut
  • OnDisconnectUpdate。 请参阅关联的 WriteMetadata
  • OnDisconnectCancel

审核身份验证信息

审核日志条目包含有关执行所记录操作的身份的信息。如需识别请求调用方,请查看 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 Authentication 的 Realtime Database 操作具有一个 AuthenticationInfo 对象,该对象包含值为 audit-third-party-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.comprincipalEmail。如果您通过创建自定义 JWT 实现自己的身份验证解决方案,也是如此。

    • 如果 JSON Web 令牌 (JWT) 用于第三方身份验证,则 thirdPartyPrincipal 字段会包含该令牌的标头和载荷。例如,使用 Firebase Authentication 进行身份验证的请求的审核日志包括该请求的 Firebase Authentication 令牌。
  • 无身份验证。不使用任何身份验证的 Realtime Database 操作具有一个 AuthenticationInfo 对象,该对象包含值为 audit-no-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.comprincipalEmail。具有开放安全规则的 Realtime Database 实例可能授予此类请求。我们建议所有用户都适当地保护其数据库。

  • 旧版 Secret 令牌。使用旧版令牌的 Realtime Database 操作具有一个 AuthenticationInfo 对象,该对象包含 audit-secret-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com 的占位 principalEmail。对于由 Secret 签名的 JWT,thirdPartyPrincipal 包含 JWT 标头和载荷。

审核 Firebase 安全规则评估

Cloud Audit Logs 可用于识别可能受规则更改影响的请求。

AuthorizationInfo 对象中,authorization.permission 可以是以下某项:

  • firebasedatabase.data.get:在 resource 中指定的路径授予的读取权限。
  • firebasedatabase.data.update:在 resource 中指定的路径授予的写入权限。
  • firebasedatabase.data.connectConnectDisconnect 的占位符。无需授权即可连接到 Realtime Database 实例。
  • firebasedatabase.data.cancel:用于 UnlistenOnDisconnectCancel。无需额外授权即可撤销或取消以前授权的操作。

将 Cloud Audit Logs 与 Realtime Database 性能分析器结果相关联

您可以将 Realtime Database 性能分析器与 Realtime Database 审核日志记录功能结合使用,对 Realtime Database 数据库进行深入的性能分析。每个工具都有自己的优势。

Cloud Audit Logs Realtime Database 性能分析器
  • 审核对数据库的访问权限
  • 持续捕获所有请求
  • 允许追溯查询
  • 包含详细的身份验证令牌信息
  • 会产生使用费
  • 用于性能分析
  • 提供用于识别热点进而优化性能的实用工具
  • 可以测量监听器广播,审核日志中不提供该数据(由于潜在的数据量)
  • 轻量级且实时进行,因而非常适合实时负载测试。审核日志条目可能需要几分钟才会显示。

审核日志内容与分析器指标相对应,如下所示。

Audit Logging 操作名称 RealtimeDatabaseAuditMetadata
中的特殊值
性能分析器操作名称
Connect RequestTypeREALTIME concurrent-connect
Disconnect RequestTypeREALTIME concurrent-disconnect
Read RequestTypeREALTIME realtime-read
Read RequestTypeREST rest-read
Write RequestTypeREALTIME realtime-write
Write RequestTypeREST rest-write
Update RequestTypeREALTIME
查看 PreconditionType
realtime-update
realtime-transaction
Update RequestTypeREST
查看 PreconditionType
rest-update
rest-transaction
ListenerListen RequestTypeREALTIME listener-listen
ListenerUnlisten RequestTypeREALTIME listener-unlisten
OnDisconnectPut RequestTypeREALTIME on-disconnect-put
OnDisconnectUpdate RequestTypeREALTIME on-disconnect-update
OnDisconnectCancel RequestTypeREALTIME on-disconnect-cancel
RunOnDisconnect RequestTypeREALTIME run-on-disconnect

审核日志格式

审核日志条目包含以下对象:

  • 日志条目本身,即类型为 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 Realtime Database 审核日志使用服务名称 firebasedatabase.googleapis.com

如需查看所有 Cloud Logging API 服务名称及其相应受监控的资源类型的完整列表,请参阅将服务映射到资源

资源类型

Firebase Realtime Database 审核日志全部都使用资源类型 audited_resource

如需查看所有 Cloud Logging 受监控资源类型和说明信息的完整列表,请参阅受监控的资源类型

启用审核日志记录

系统在任何情况下都会启用管理员活动审核日志,您无法将其停用。

数据访问审核日志默认处于停用状态,除非明确启用,否则无法向其中写入数据(BigQuery 数据访问审核日志是一个例外,无法停用)。

您可以通过检查 GCP 控制台中的 DATA_READ 和/或 DATA_WRITE 来切换 Realtime Database 的数据访问审核日志。从 GCP 控制台启用/停用日志到日志开始/停止传送之间最多会有 1 小时的延迟。

如需了解如何启用部分或全部数据访问审核日志,请参阅配置数据访问日志

权限和角色

Cloud IAM 权限和角色决定了您能否访问 Google Cloud 资源中的审核日志数据。

在决定哪些 Logging 专有的权限和角色适用于您的使用场景时,请考虑以下因素:

  • Logs Viewer 角色 (roles/logging.viewer) 为您提供对管理员活动、政策拒绝和系统事件审核日志的只读权限。如果您只具有此角色,则无法查看 _Default 存储桶中的数据访问审核日志。

  • Private Logs Viewer 角色 ((roles/logging.privateLogViewer) 包含 roles/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 控制台、gcloud 命令行工具或 Logging API 查看 Cloud Logging 中的审核日志。

控制台

您可以使用 GCP 控制台中的 Logs Explorer 来检索 Firebase 项目、文件夹或组织的审核日志条目:

  1. 在 GCP 控制台中,进入 Logging > Logs Explorer 页面。

    进入“Logs Explorer”页面

  2. Logs Explorer 页面上,选择一个现有的 Firebase 项目、文件夹或组织。

  3. 查询构建器窗格中,执行以下操作:

    • 资源类型中,选择要查看其审核日志的 Google Cloud 资源。

    • 日志名称中,选择要查看的审核日志类型:

      • 对于管理员活动审核日志,选择 activity
      • 对于数据访问审核日志,选择 data_access
      • 对于系统事件审核日志,选择 system_event
      • 对于政策拒绝审核日志,选择 policy

    如果您没有看到这些选项,则表示 Firebase 项目、文件夹或组织中没有该类型的审核日志。

    如需详细了解如何使用 Logs Explorer 进行查询,请参阅构建日志查询

gcloud

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 工具,请参阅读取日志条目

API

构建查询时,请用有效值替换变量,替换为适当的项目级、文件夹级或组织级的审核日志名称或标识符,如审核日志名称中所列。例如,如果您的查询包含 PROJECT_ID,则您提供的项目标识符必须引用当前选定的 Firebase 项目。

如需使用 Logging API 查看审核日志条目,请执行以下操作:

  1. 转到 entries.list 方法文档中的试用此 API 部分。

  2. 将以下内容添加到试用此 API 表单的请求正文部分。点击此预填充的表单后,系统会自动填充请求正文,但您需要在每个日志名称中提供一个有效的 PROJECT_ID

    {
      "resourceNames": [
        "projects/PROJECT_ID"
      ],
      "pageSize": 5,
      "filter": "logName : projects/PROJECT_ID/logs/cloudaudit.googleapis.com"
    }
    
  3. 点击执行

如需详细了解查询,请参阅 Logging 查询语言

如需查看审核日志条目示例并了解如何在其中找到最重要的信息,请参阅审核日志条目示例

路由审核日志

您可以将审核日志路由到受支持的目标位置,方式与路由其他类型的日志相同。以下是您可能需要路由审核日志的一些原因:

  • 要将审核日志保留更长时间或使用更强大的搜索功能,您可以将审核日志的副本路由到 Google Cloud Storage、BigQuery 或 Google Cloud Pub/Sub。使用 Cloud Pub/Sub,您可以将日志路由到其他应用、其他代码库和第三方。

  • 如需管理整个组织范围内与您相关的审核日志,您可以创建一个汇总接收器,以便从组织中的任意或所有 Firebase 项目路由日志。

  • 如果启用的数据访问审核日志会导致 Firebase 项目超出日志配额,您可以创建接收器,从 Logging 中排除数据访问审核日志。

如需了解如何路由日志,请参阅配置接收器

价格

管理员活动审核日志系统事件审核日志是免费的。

数据访问审核日志政策拒绝审核日志则是收费的。

如需详细了解 Cloud Logging 价格,请参阅 Google Cloud 的运维套件价格:Cloud Logging