如何导出审计日志到 Splunk 并保持字段格式不变?
解读
在国内金融、政企类客户把 Cloud SQL 接入现有 SIEM 体系时,面试官想确认三件事:
- 你是否理解 Cloud SQL 审计日志的生成链路(IAM Audit Logs → Cloud Logging);
- 能否在不破坏 原始 proto 字段结构 的前提下把日志送到 Splunk;
- 是否熟悉国内网络合规要求(如跨境数据需走 专线/云企业网、落地前脱敏)。
“字段格式不变”= 拒绝简单 CSV 导出,必须保留 nested JSON、protoPayload、resource.labels 等原始层级,以便 Splunk 侧做 CIM 解析。
知识点
- Cloud SQL 审计日志类型:ADMIN_READ、ADMIN_WRITE、DATA_READ、DATA_WRITE;
- Cloud Logging Sink:支持 BigQuery、Pub/Sub、GCS、Splunk 四类接收器;
- Pub/Sub 消息体:原生日志为 proto3 JSON,字段顺序、大小写、空值均固定;
- Splunk Add-on for Google Cloud:官方插件,内置 pubsub-input,可透传原始 JSON;
- HEC vs. SC4S:国内 IDC 无公网时常用 HEC(HTTP Event Collector) + 专线,而非 SC4S;
- 字段冲突:Splunk 默认把
resource.labels.database_id映射成resource_labels_database_id,需关闭 KV_MODE = auto; - 流量合规:跨境场景需启用 VPC Service Controls + 专线接入点,否则日志可能触发 数据出境评估。
答案
- 在 组织级 开启 Cloud SQL 的 DATA_READ/WRITE 审计日志:
gcloud organizations add-iam-policy-binding ${ORG_ID} --member=group:security@客户.中国 --role=roles/logging.privateLogViewer - 创建 Pub/Sub Sink,过滤条件:
resource.type="cloudsql_database" AND (protoPayload.methodName="cloudsql.instances.connect" OR protoPayload.methodName="cloudsql.instances.query")
勾选 “使用原始时间戳” 与 “包含子文件夹”,确保字段层级 0 损失。 - 在 北京/上海 Splunk 集群 部署 Splunk Add-on for Google Cloud(4.2.0 以上),配置:
- 输入类型:Pub/Sub
- 服务账号密钥:国内落地用 北京 VPC 内的 Private Service Connect 端点,密钥仅授予
roles/pubsub.subscriber - 输出格式:勾选 “Include Raw JSON”,关闭 “Timestamp Parsing” 让 Splunk 使用日志自带
timestamp字段
- 在 Splunk props.conf 新增:
这样[google:cloudsql:audit] KV_MODE = none INDEXED_EXTRACTIONS = json TIMESTAMP_FIELDS = timestamp TIME_FORMAT = %Y-%m-%dT%H:%M:%S.%3NZprotoPayload.request.database等嵌套字段保持原样,可被 Splunk CIM 数据模型 直接识别。 - 合规加固:
- 把 Pub/Sub topic 放入 VPC-SC perimeter,日志先落 北京-region,再通过 云企业网 CEN + 专线 到客户 Splunk;
- 敏感字段(如
protoPayload.request.sqlStatement)用 Cloud DLP 去标识化 模板,在 Sink 端通过 Log Router 转换器 实时脱敏,再进入 Splunk。
拓展思考
- 如果客户 Splunk 是 SaaS 版部署在新加坡,如何同时满足 PIPL 数据跨境评估 与 实时性 <5 秒?
可在北京区域先建 Splunk Heavy Forwarder 集群 做缓存与脱敏,再通过 GCP 专线 + Splunk HEC ACK 可靠传输,既降低跨境带宽费用,又满足审计署对 原始日志不可篡改 的要求。