如何在GCP Cloud Logging查询特定用户/service account的role/permission变更
GCP Cloud Logging 检索IAM角色/权限变更日志配置方法
所有GCP IAM角色绑定、权限变更的操作默认会记录到Admin Activity审计日志流,不需要手动开启日志采集,直接使用以下过滤规则即可检索对应记录。
基础过滤规则说明
IAM变更类日志的通用特征:
- 日志归属:项目级IAM变更对应
resource.type = "project",文件夹/组织级IAM变更对应resource.type = "folder"/resource.type = "organization" - 日志路径固定为审计日志流:
logName = "projects/[你的项目ID]/logs/cloudaudit.googleapis.com%2Factivity",查文件夹/组织级日志时将前缀替换为folders/[文件夹ID]/organizations/[组织ID]即可 - 关联服务固定为IAM服务:
protoPayload.serviceName = "iam.googleapis.com" - 变更操作对应的方法名匹配以下值即可覆盖全场景:
SetIamPolicy:全量覆盖资源IAM策略的操作AddRoleToPolicy/RemoveRoleFromPolicy:单条角色绑定增删操作(新版IAM API操作类型)CreateRole/UpdateRole/DeleteRole:自定义角色本身的创建、修改(含权限点增删)、删除操作
可直接复用的查询语句
1. 全量查询项目下所有角色权限变更日志
将语句中的你的项目ID替换为实际项目ID即可使用:
logName="projects/你的项目ID/logs/cloudaudit.googleapis.com%2Factivity" protoPayload.serviceName="iam.googleapis.com" protoPayload.methodName=~"SetIamPolicy|AddRoleToPolicy|RemoveRoleFromPolicy|CreateRole|UpdateRole|DeleteRole"
2. 查询特定用户相关的角色权限变更日志
以下示例检索用户user@example.com相关的所有变更,既包含该用户发起的操作,也包含该用户作为被授权/移除权限主体的操作:
logName="projects/你的项目ID/logs/cloudaudit.googleapis.com%2Factivity" protoPayload.serviceName="iam.googleapis.com" protoPayload.methodName=~"SetIamPolicy|AddRoleToPolicy|RemoveRoleFromPolicy|CreateRole|UpdateRole|DeleteRole" ( # 匹配该用户作为操作发起方的日志 protoPayload.authenticationInfo.principalEmail="user@example.com" OR # 匹配该用户作为被授权/移除权限对象的日志 protoPayload.response.bindings.members:"user:user@example.com" )
3. 查询特定服务账号相关的角色权限变更日志
以下示例检索服务账号my-sa@你的项目ID.iam.gserviceaccount.com相关的所有变更:
logName="projects/你的项目ID/logs/cloudaudit.googleapis.com%2Factivity" protoPayload.serviceName="iam.googleapis.com" protoPayload.methodName=~"SetIamPolicy|AddRoleToPolicy|RemoveRoleFromPolicy|CreateRole|UpdateRole|DeleteRole" ( # 匹配该服务账号作为操作发起方的日志 protoPayload.authenticationInfo.principalEmail="my-sa@你的项目ID.iam.gserviceaccount.com" OR # 匹配该服务账号作为被授权/移除权限对象的日志 protoPayload.response.bindings.members:"serviceAccount:my-sa@你的项目ID.iam.gserviceaccount.com" )
常用过滤优化技巧
- 若仅需查询特定角色的变更记录,可追加条件
protoPayload.response.bindings.role:"roles/目标角色名",例如查询Owner角色变更则写为protoPayload.response.bindings.role:"roles/owner" - 若需排除GCP系统自动发起的变更,可追加条件
NOT protoPayload.authenticationInfo.principalEmail ends with "@system.gserviceaccount.com" - 若仅需查询特定时间范围内的日志,可直接在Cloud Logging界面的时间选择器指定范围,不需要在查询语句中额外写时间条件
内容的提问来源于stack exchange,提问作者Sander van den Oord
相关产品推荐
相关产品推荐

