GCP Spanner无效登录尝试监控配置及相关问题咨询
针对Spanner无效登录监控的问题解答
一、现有无效登录查询的有效性验证
你编写的日志查询逻辑是准确的:
resource.type="spanner_instance" protoPayload.methodName=~"google.spanner.v1.Spanner..*CreateSession.*" protoPayload.authorizationInfo.granted!="true"
CreateSession是Spanner客户端建立连接的核心方法,授权失败(granted!="true")直接对应无效登录尝试,这个查询可以精准捕获这类事件。如果需要缩小范围,可以额外添加时间过滤或指定目标实例/数据库的条件。
二、测试SA频繁触发日志的排查方向
你创建的无权限SA频繁出现在日志中但未主动调用,大概率是有后台服务或自动化任务在使用该SA,可按以下方向排查:
- 定位调用来源:查看日志的
protoPayload.requestMetadata.callerIp和callerSuppliedUserAgent字段,能直接看到发起请求的IP地址和客户端标识(比如Cloud Function、Terraform、自定义应用等) - 检查关联资源:确认该SA是否被绑定到了某个自动执行的资源上,比如Cloud Function、Cloud Run服务、Cloud Scheduler任务,或是被添加到了有定时执行权限的IAM组中
- 排查误配置:检查你的基础设施即代码(IaC)工具(如Terraform、Cloud Deployment Manager)配置,是否不小心将该SA设为了某个资源的默认服务账号
- 验证日志时效性:查看日志的时间戳,确认是否是历史请求的延迟上报,或是日志重复生成的问题
三、无需额外Spanner权限的监控方案
监控Spanner登录尝试(含无效)核心依赖Cloud Audit Logs,以下是无需给监控主体额外Spanner权限的可行方案:
- 基于日志直接创建告警:确保Spanner实例已开启Data Access日志(需在Spanner实例的"日志"配置中勾选"Data writes"和"Data reads"类别,Admin Activity日志默认开启),然后直接用你编写的查询创建Cloud Monitoring告警政策,只要配置告警的账号拥有
roles/logging.viewer和roles/monitoring.editor权限即可,不需要Spanner的读写或管理权限 - 创建自定义日志指标:在Cloud Logging中基于你的查询创建自定义计数器指标,统计无效登录次数,再基于该指标设置阈值告警。这种方式更适合长期趋势监控,同样只需要日志和监控的基础权限
- 结合IAM Audit Logs:IAM的Audit Logs会记录所有权限验证失败事件,你可以通过查询
resource.type="iam"且protoPayload.methodName="google.iam.v1.IAM.CheckPermissions"并关联Spanner资源的方式,间接监控登录权限失败事件,这种方式无需单独开启Spanner的Data Access日志,但精准度略低于直接监控CreateSession事件
内容的提问来源于stack exchange,提问作者syncerror
相关产品推荐
相关产品推荐

