如何在Firestore集合被删除时获取通知或告警?
Firestore集合删除的告警/通知方案
针对Firestore集合删除这类高危操作,目前有几种可行的通知/告警方案,整理如下:
1. 基于Cloud Audit Logs + Cloud Monitoring的直接告警
Firestore的集合删除操作会被Cloud Audit Logs记录,可通过以下步骤设置告警:
- 首先确保Firestore的Data Access日志已启用:在Cloud Console的IAM -> Audit Logs页面,找到Firestore服务,开启
Data Access类日志中的DeleteCollection相关记录 - 进入Cloud Monitoring创建告警策略:
- 选择“基于日志的告警”类型,设置过滤条件:
resource.type="firestore_database" AND logName="projects/[你的项目ID]/logs/cloudaudit.googleapis.com%2Fdata_access" AND protoPayload.methodName="google.firestore.v1.Firestore.DeleteCollection" - 配置通知渠道(邮件、Slack、PagerDuty等),触发条件设为“检测到匹配的日志条目时立即告警”
- 选择“基于日志的告警”类型,设置过滤条件:
- 这种方式能精准捕获所有途径(控制台、API、SDK)发起的集合删除操作,是最可靠的方案
2. 基于Cloud Functions的间接告警
由于Firestore没有原生的集合删除触发器,可通过两种间接方式实现:
- 批量文档删除检测:
集合删除本质是批量删除文档,可监听目标集合下的文档删除事件,当短时间内删除数量超过阈值时触发告警:- 编写Cloud Function,触发器设为Firestore文档删除事件(指定目标集合路径)
- 在函数内维护删除计数和时间窗口(比如用Cloud Memory Store或Firestore临时文档记录),当单位时间内删除数超过预设值(如100条/分钟),发送告警通知
- 元数据文档监听:
在每个需要监控的集合根目录创建一个_metadata文档,通过安全规则禁止单独删除该文档,但集合删除时它会被一并删除:- 安全规则示例:
match /{collection}/{document=**} { allow delete: if document != "_metadata"; } - 编写Cloud Function监听
/{collection}/_metadata的删除事件,一旦触发就发送告警
- 安全规则示例:
3. 借助Firebase Extensions简化配置
如果使用Firebase生态,可利用官方或社区扩展:
- 比如“Firestore Audit Logs”扩展,能自动将Firestore的所有操作(包括集合删除)同步到另一个Firestore集合或BigQuery
- 基于同步后的操作记录,再通过Cloud Monitoring或自定义函数设置告警
内容的提问来源于stack exchange,提问作者Megh Vora
相关产品推荐
相关产品推荐

