使用 gcloud logging read 并在 cloudaudit.googleapis.com 上应用过滤器,或者在 Logs Explorer 中运行相同的查询并将结果下载为 JSON:
gcloud logging read 'logName:"cloudaudit.googleapis.com" AND timestamp>="2026-10-19T00:00:00Z" AND timestamp<"2026-10-20T00:00:00Z"'
--project=my-project --format=json > gcp_audit_1019.json
管理活动审计日志始终开启并保留400天。数据访问日志默认关闭,除了BigQuery默认开启,一旦启用则保留30天。
云审计日志记录谁在您的 Google Cloud 项目中更改了什么:IAM 授权、新的服务帐号密钥、防火墙更改、不寻常区域中的 VM 启动。Prime Core 拥有140条用于 Google Cloud 审计日志的检测规则,映射到74个MITRE ATT&CK技术。其中包括:滥用云账户 (T1078.004)、额外凭证如新的服务帐号密钥 (T1098.001) 和篡改日志记录本身 (T1562.008)。
开始之前
知道您需要哪个审计日志。
| 类型 | 默认开启? | 保留 | 内容 |
|---|---|---|---|
| 管理活动 | 始终,无法禁用 | 400天 | 配置和IAM更改 |
| 系统事件 | 始终 | 400天 | Google系统在您的资源上采取的行动 |
| 数据访问 | 否(除了BigQuery) | 30天 | 数据和元数据的读取 |
| 策略拒绝 | Yes | 30天 | 被安全策略阻止的请求 |
如果问题是“谁读了这个bucket?”而数据访问日志从未启用,那么答案不在云日志中。
权限。 日志查看者(角色/logging.viewer)覆盖管理活动、系统事件和策略拒绝。数据访问日志需要私有日志查看者(角色/logging.privateLogViewer)。
范围。 审计日志按项目存在。组织和文件夹级的活动有其自己的日志。使用–organization=<ORG_ID>或–folder=<FOLDER_ID>而不是–project进行查询。
选项1:日志资源管理器
在控制台中,打开 日志 → 日志资源管理器, 输入 logName:”cloudaudit.googleapis.com”,设置时间范围,运行查询,然后将结果下载为 JSON。下载有上限。对于更大范围,使用 gcloud。
选项2:gcloud logging read
顶部的命令是基本形式。三个细节可以节省时间。
始终在过滤器中放入时间窗口。 没有时间戳条件,gcloud logging read 会静默限制自己到最后一天(新鲜度默认为1d)。这几乎让所有人吃惊。
在需要时提高限制。 对于大窗口,添加 –limit=100000(或适合的数字)。
为了上传,进行扁平化。 输出是一个 JSON 数组。将其转换为每行一个条目:
jq -c '.[]' gcp_audit_1019.json > gcp_audit_1019.jsonl
有用的更窄的过滤器:
# 仅管理活动
logName="projects/my-project/logs/cloudaudit.googleapis.com/activity"
# 新的服务账户密钥
protoPayload.methodName="google.iam.admin.v1.CreateServiceAccountKey"
# 某个身份做的一切
protoPayload.authenticationInfo.principalEmail="suspicious-sa@my-project.iam.gserviceaccount.com"
选项3:从接收器批量获取历史记录
如果您的组织通过接收器将审计日志路由到Cloud Storage或BigQuery,则该副本可能回溯得更远。用gcloud storage cp拉取文件,或者查询BigQuery并将结果导出为JSON。
需要查找的内容
| 方法或字段 | 为什么重要 |
|---|---|
| CreateServiceAccountKey | 攻击者可以带走的长期凭证 |
| SetIamPolicy | 角色授权;注意 roles/owner、roles/editor 和 allUsers |
| UpdateSink, DeleteSink, new exclusions | 某人重定向或静音日志 |
| 在不寻常地区的 v1.compute.instances.insert | 经典的加密挖掘足迹 |
| 状态代码为7(PERMISSION_DENIED)的峰值 | 被盗凭证在测试它们能做什么 |
在 LogTotal 中上传、清理和查看
- 上传。 打开 logtotal.com 并拖入 .jsonl 文件。
- 清理。 [what gets masked: principal emails, project IDs, IPs, resource names]. Look it over before you continue.
- 查看。
当出错时
| 症状 | 可能的原因 | Fix |
|---|---|---|
| 只有过去24小时的数据返回 | 过滤器中没有时间戳,因此应用了 –freshness=1d | 将窗口放入过滤器中 |
| 没有数据访问条目 | 数据访问日志从未启用 | 预期如此;为将来启用它们 |
| 读取日志时 PERMISSION_DENIED | 数据访问缺少私有日志查看者 | 请求角色/logging.privateLogViewer |
| 结果提前结束 | 默认或显式限制达到了 | 提高限制,或拆分窗口 |
| 组织级更改缺失 | 您查询了一个项目 | 使用 –organization |
FAQ
Google Workspace 日志在这里吗?
只有当您的组织与 Google Cloud 共享 Workspace 数据时,且在组织级别。
GKE 的情况如何?
GKE 也将其 Kubernetes 审计日志写入云审计日志