本文档介绍了 Firebase Realtime Database 的审核日志记录。Google Cloud 服务会生成审核日志,以记录 Google Cloud 资源中的管理和访问活动。如需详细了解 Cloud Audit Logs,请参阅以下内容:
备注
如需详细了解 protoPayload.metadata
中针对 DATA_READ
和 DATA_WRITE
操作的字段,请参阅参考文档。
服务名称
Firebase Realtime Database 审核日志使用服务名称 firebasedatabase.googleapis.com
。针对此服务的过滤条件:
protoPayload.serviceName="firebasedatabase.googleapis.com"
方法(按权限类型)
每个 IAM 权限都有一个 type
属性,该属性的值是一个枚举,可以是以下四个值之一:ADMIN_READ
、ADMIN_WRITE
、DATA_READ
或 DATA_WRITE
。若您调用某个方法,则 Firebase Realtime Database 会生成一个审核日志,其类别取决于执行该方法所需权限的 type
属性。需要 IAM 权限且 type
属性值为 DATA_READ
、DATA_WRITE
或 ADMIN_READ
的方法会生成数据访问审核日志。需要 IAM 权限且 type
属性值为 ADMIN_WRITE
的方法会生成管理员活动审核日志。
权限类型 | 方法 |
---|---|
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 Realtime Database 的 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 Authentication 的 Realtime Database 操作具有一个
AuthenticationInfo
对象,其中包含值为principalEmail
的audit-third-party-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com
。如果您通过创建自定义 JWT 实现自己的身份验证解决方案,也是如此。- 如果 JSON Web 令牌 (JWT) 用于第三方身份验证,则
thirdPartyPrincipal
字段会包含该令牌的标头和载荷。例如,使用 Firebase Authentication 进行身份验证的请求的审核日志包括该请求的 Firebase Authentication 令牌。
- 如果 JSON Web 令牌 (JWT) 用于第三方身份验证,则
无身份验证。不使用任何身份验证的 Realtime Database 操作具有一个
AuthenticationInfo
对象,该对象包含值为audit-no-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com
的principalEmail
。具有开放安全规则的 Realtime Database 实例可能授予此类请求。我们建议所有用户都适当地保护其数据库。旧版 Secret 令牌。使用旧版令牌的 Realtime Database 操作具有一个
AuthenticationInfo
对象,该对象包含audit-secret-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com
的占位principalEmail
。对于由 Secret 签名的 JWT,thirdPartyPrincipal
包含 JWT 标头和载荷。
审核 Firebase Security Rules 评估
Cloud Audit Logs 可用于识别可能受 Rules 更改影响的请求。
在 AuthorizationInfo 对象中,authorization.permission
可以是以下某项:
firebasedatabase.data.get
:在resource
中指定的路径授予的读取权限。firebasedatabase.data.update
:在resource
中指定的路径授予的写入权限。firebasedatabase.data.connect
:Connect
和Disconnect
的占位符。无需授权即可连接到 Realtime Database 实例。firebasedatabase.data.cancel
:用于Unlisten
和OnDisconnectCancel
。无需额外授权即可撤销或取消以前授权的操作。
将 Cloud Audit Logs 与 Realtime Database 性能分析器结果相关联
您可以将 Realtime Database 性能分析器与 Realtime Database 审核日志记录功能结合使用,对 Realtime Database 进行深入的性能分析。每个工具都有自己的优势。
Cloud Audit Logs | Realtime Database 分析器 |
---|---|
|
|
审核日志内容与分析器指标相对应,如下所示。
Audit Logging 操作名称 | 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 |
更新 | RequestType 是 REALTIME 。
查看 PreconditionType 。 |
realtime-update realtime-transaction |
更新 | RequestType 是 REST 。
查看 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 |