谷歌云试用账号 GCP谷歌云如何查看操作日志
你有没有过这种经历——早上刚到工位,运维同事冲进来拍桌:“昨天下午3:17,有人把生产环境的VPC防火墙规则全删了!”你冷汗一冒,赶紧打开GCP控制台,手指悬在一堆菜单上,内心OS:这破日志到底藏在哪?不是在‘监控’里,不在‘安全中心’,也不在‘IAM’页面右上角那个小铃铛里……
别慌。今天这篇,不讲虚的,不堆术语,就当咱俩蹲在茶水间边喝美式边聊——怎么在GCP里真正把操作日志‘揪出来’、‘看明白’、‘用得上’。
先泼一盆冷水:GCP的日志,根本不是“一个日志”
很多人卡在第一步,是因为默认以为GCP有个叫“操作日志”的统一入口。错!GCP把日志分成了三类,像三个性格迥异的室友:
- 审计日志(Audit Logs):官方嘴替,记所有“谁干了啥”,比如创建VM、修改IAM策略、删除存储桶。分管理员活动日志(Admin Activity)和数据访问日志(Data Access)——后者默认关闭,开它要手动点开关,且可能影响性能;
- 系统日志(System Event Logs):GCP自己写的日记,比如“Compute Engine后端服务重启了”,跟人没关系,纯基础设施心跳;
- 应用日志(Application Logs):你代码里print出来的,或者容器stdout/stderr吐的,归你管,不归GCP“操作审计”管。
你要找的“谁删了防火墙”,只在审计日志里,而且必须是Admin Activity那一本。记牢这句话,省下两小时瞎翻。
方法一:控制台可视化——适合救火,也适合新手
路径直给:左侧导航栏 → Logging → Logs Explorer(注意!不是旧版的“Logs Viewer”,新版叫Logs Explorer,UI蓝白配色更清爽)。
进去第一眼,别急着输关键字。先做三件事:
- 选资源范围:右上角“资源”下拉框,选“组织”“文件夹”“项目”或具体服务(比如“compute.googleapis.com/Firewall”)。查整个项目操作?选“项目”;只盯防火墙?直接选Firewall资源——精准狙击,日志量少一半;
- 谷歌云试用账号 设时间窗:右上角时间选择器,别信默认“过去1小时”。删规则是下午3:17?手动切到“自定义时间”,选昨天15:00–15:30——缩小范围,秒出结果;
- 加预设过滤:点击“添加查询条件” → “日志名称” → 选
projects/[YOUR-PROJECT-ID]/logs/cloudaudit.googleapis.com%2Factivity(这是Admin Activity日志的固定ID,复制粘贴最稳)。
这时界面会刷出一堆日志。但别被密密麻麻的JSON吓住——重点看三列:
- 时间戳:精确到毫秒,比你手表准;
- 方法名(methodName):比如
compute.firewalls.delete或iam.roles.bind,一看就知道干了啥; - 主体(principalEmail):谁干的?邮箱地址清清楚楚,连服务账号([email protected])都原形毕露。
想快速定位?在搜索框直接敲:resource.type="firewall" severity=NOTICE methodName:"compute.firewalls.delete"
回车,立竿见影。注意:severity=NOTICE是审计日志的固定等级,别写ERROR——它真不报错,它只是冷静记录。
方法二:命令行gcloud——适合自动化、写脚本、凌晨三点被PagerDuty叫醒时
装好gcloud CLI,认证完,一行命令甩过去:
gcloud logging read \
'resource.type="project" \
logName="projects/YOUR-PROJECT-ID/logs/cloudaudit.googleapis.com%2Factivity" \
protoPayload.methodName:"compute.firewalls.delete"' \
--limit=20 \
--format='table(protoPayload.authenticationInfo.principalEmail,
protoPayload.methodName,
timestamp,
protoPayload.request.resource.name)'
解释下关键点:
logName必须URL编码,%2F就是斜杠,别手抖写成/,否则报400;--format用table,把邮箱、动作、时间、对象名四列打出来,比原始JSON清爽十倍;- 想导出CSV?加
--format=csv,再重定向> firewall-deletes.csv,发给老板当证据链。
进阶技巧:加--freshness=1h只查最近1小时,避免翻历史库卡死;用jq管道解析:gcloud ... --format=json | jq '.[] | select(.protoPayload.methodName == "compute.instances.insert") | .protoPayload.authenticationInfo.principalEmail'——批量挖出所有新启VM的人。
方法三:API调用——适合集成进内部审计平台,或你就是那个写API的人
POST请求到:https://logging.googleapis.com/v2/projects/YOUR-PROJECT-ID/logs/entries:list
Body里塞JSON:
{
"resourceNames": ["projects/YOUR-PROJECT-ID"],
"filter": "logName = \"projects/YOUR-PROJECT-ID/logs/cloudaudit.googleapis.com%2Factivity\" AND protoPayload.methodName = \"compute.instances.setMetadata\"",
"pageSize": 10
}
记住两个硬核要点:
- API返回的是
entries数组,每条entry里protoPayload才是你要的审计信息,别在jsonPayload里找; - 分页靠
nextPageToken,别一次性要10万条——GCP会温柔地给你返回429,附赠一句“Too Many Requests”。
避坑指南:那些让你怀疑人生的“查不到”时刻
坑1:权限不够,看到空白页
审计日志读取需要logging.logEntries.list权限。普通开发者账号?大概率没有。解决方案:让管理员给你加roles/logging.viewer角色(别加Owner!最小权限原则)。
坑2:日志延迟,刚操作完刷不出来
GCP承诺“通常30秒内可见”,但高峰期可能2分钟。别狂刷F5,喝口水,等半分钟再查——真没日志,再查操作是否成功(比如防火墙删没删成,得去Network → Firewall确认状态)。
坑3:查到了日志,但principalEmail是serviceAccount
别急着封号!可能是CI/CD流水线(比如Cloud Build)执行的。顺藤摸瓜:查protoPayload.serviceData里的buildId,跳转Cloud Build控制台,看谁触发了这次构建。
坑4:日志保留期只有90天?
默认是的。但别慌——在Logs Explorer点右上角齿轮图标 → “日志存储区”,建个my-audit-logs存储区,绑定到BigQuery或Cloud Storage。存多久?你说了算。成本?每月几毛钱,换来的是一年份的操作追溯权,值。
最后送你一句GCP祖训
Google Cloud的文档里藏着一句话,建议刻在工位屏保上:
“Audit logs are not retroactive. They only record activity after the log sink is created or the project is configured to retain them.”
翻译成人话:日志不会穿越。今天配置了审计日志,昨天删的防火墙,它真不记得。所以——别等出事才开日志,就像别等牙疼才买牙刷。
现在,关掉这篇文章,打开你的GCP控制台,花2分钟,把cloudaudit.googleapis.com/activity日志加到你的日志存储区里。做完这一步,你已经比80%的GCP用户更懂怎么守护自己的云了。
毕竟,在云上,看不见的权限,比删库跑路更可怕;而看得见的日志,就是你唯一的防弹衣。

