我知道审计日志默认包括Admin活动,如'delete',但我无法在GCP日志注册表中找到与我的Firestore项目中创建或删除集合相关的任何日志。
我使用了以下查询:
resource.type=("datastore_database" OR "datastore_index")
logName=(
"projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity"
OR "projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fdata_access"
OR "projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fsystem_event"
OR "projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fpolicy"
)
编辑修复项目路径(感谢Javier M)
DeleteOperation审计日志
这个方法,见ADMIN WRITE审计日志,与长时间运行的操作相关,这些操作是需要很长时间才能完成的API调用。因此,该方法将擦除长时间运行的操作(这意味着客户机不再对其结果感兴趣)。它与删除Cloud Firestore实例中的条目无关。
删除集合你不能看到Delete Collection的日志,因为你不能删除一个集合。相反,您需要删除Collection下的所有文档和子文档。
因此,您将在日志中看到的引用delete的内容将用于删除文档和删除字段。删除所有文档后,可以假设也删除了一个Collection。您可以将Collection视为文档的名称空间或容器(这是文档引用它的方式)。
默认禁用Firestore的数据访问日志。您需要显式地启用它们来接收日志。
另一方面,由于在PROJECT_ID
之前缺少projects/
,因此查询日志是错误的,如下所述。因此,您应该使用:
logName=(
"projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fdata_access"
OR "projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity"
OR "projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fsystem_event"
OR "projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fpolicy")
您还可以从methodName中查询日志。例如,每次你创建一个新的集合或字段在Firestore,Write
方法将被使用和记录。因此,您可以执行如下查询:
protoPayload.methodName="google.firestore.v1.Firestore.Write"
编辑:@Troglo
请求删除操作日志信息您可以看到在Write方法下对字段,文档和集合进行的每次删除的日志,因为它保存了每次写操作的信息,例如删除。但是,通过methodName="google.firestore.v1.Firestore.Write"
查询将输出到目前为止完成的所有写操作。
或者,您可以使用request
对象来构建查询,因为它包含有关写入字段的信息,如update
或delete
。因此:
项目下任何集合的删除日志
protoPayload.request.writes.delete:"projects/[PROJECT-ID]/databases/(default)/documents/"
特定集合的删除日志
protoPayload.request.writes.delete:"projects/[PROJECT-ID]/databases/(default)/documents/[COLLECTION-ID]"
注意使用:
("has",匹配任何子字符串)而不是=
(equal)来构建查询。与后者相比,前者的性能较低。
重要:
请记住,根据今天(2021年10月26日),这些数据访问审计日志在预览中。请查看演出条件和舞台说明,了解更多信息。