如何区分 ADMIN_READ 与 DATA_WRITE 两类审计日志?
解读
在国内 Google Cloud 面试中,这道题考察的是对 Cloud Audit Logs 三级日志体系 的掌握深度,以及能否把“谁动了配置”与“谁改了数据”快速分离。
面试官通常先给一段 JSON 样例,让你 30 秒内判断属于哪一类,再追问“如果只想实时告警删库操作,应该过滤哪个字段”。
答不到“methodName 前缀 + resource.labels 组合”这一层,会被认为只背过文档,没有排障经验。
知识点
-
日志类别归属
- ADMIN_READ 属于 Configuration Read,写入 Admin Activity 审计流,默认即开启且不可关闭。
- DATA_WRITE 属于 Data Access,写入 Data Access 审计流,需在项目级显式启用,否则不记录。
-
核心判别字段
- protoPayload.methodName:ADMIN_READ 以 cloudsql.instances.get、cloudsql.backups.list、cloudsql.users.list 等“读配置”接口结尾;DATA_WRITE 以 cloudsql.instances.connect、cloudsql.databases.update、cloudsql.users.delete 等“写数据”或“登录”接口结尾。
- protoPayload.serviceName:两者都是 cloudsql.googleapis.com,无法直接区分,需结合 methodName。
- resource.labels 与 protoPayload.authenticationInfo.principalEmail:用来定位实例与责任人,国内金融客户常用来对接 堡垒机 + SIEM。
-
权限与风险场景
- ADMIN_READ 本身不产生 SLA 影响,但大量突增可能预示 配置探测 或 凭证泄露。
- DATA_WRITE 若出现 cloudsql.instances.delete 或 cloudsql.databases.drop,直接触发 “高危操作” 告警,需 15 分钟内响应。
-
检索与采样
- 在 Log Explorer 用过滤器
protoPayload.methodName=("cloudsql.instances.get" OR "cloudsql.backups.list")
即可拉出所有 ADMIN_READ。 - DATA_WRITE 建议加 severity>=WARNING 并排除只读账号,减少 60% 噪声。
- 在 Log Explorer 用过滤器
-
合规要点
- 国内等保 2.0 要求 数据级审计留存 ≥ 6 个月,因此 DATA_WRITE 必须开启并转存到 Cloud Storage 中国分区(dual-region: ASIA-NORTHEAST1+ASIA-SOUTHEAST1)。
- 若使用 Cloud SQL Auth Proxy IAM 鉴权,DATA_WRITE 日志里 principalEmail 为实际 IAM 用户,而非传统 DB user,方便事后溯源。
答案
一句话区分:
ADMIN_READ 记录的是“查看或导出配置”类 API 调用,methodName 以 get、list 结尾;DATA_WRITE 记录的是“变更数据或结构”类调用,methodName 以 insert、update、delete、connect 结尾,且需在项目级显式启用 Data Access 审计后方可看到。
在实战中,先扫 methodName 前缀,再看 resource.labels.database_id 即可 5 秒内完成归类。
拓展思考
-
如果业务要求“实时发现某人通过 Cloud SQL Proxy 执行了 drop table”,仅靠 DATA_WRITE 日志还不够,因为 SQL 语句本身不会出现在审计日志。
正确姿势:- 开启 cloudsql.googleapis.com/insights 的 pgAudit 或 MySQL audit_log plugin,把 SQL 文本打到 stdout,再通过 Fluent Bit 送到 Log Sink。
- 在 Log Router 建 CMEK 加密的日志桶,与中国区 Data Lake 做 VPC-SC 边界隔离,满足 个人信息保护法 对敏感字段的加密要求。
-
对超大实例(> 2 TB),DATA_WRITE 日志量每天可超 500 GB,直接存 Cloud Storage 成本过高。
可采取 Log Sampling 策略:- 对 methodName="cloudsql.instances.connect" 采样 1%;
- 对 methodName="cloudsql.databases.update" 采样 100%;
- 通过 Cloud Logging Bucket 的 30 天锁定期 + 生命周期规则,第 31 天自动转 Archive 存储,节省 70% 费用。
-
面试加分项:
提到国内多云架构下,用 Terraform For_each 批量开启 DATA_WRITE 审计,并配合 Cloud Asset Inventory Feed 实时检测“谁关闭了审计”,可展示 “治理即代码” 能力,让面试官直接给出 L6 及以上评级。