如何豁免GKE的`system:*`主体Admin Read(数据访问)审计日志?
解决GKE中排除system:*主体Admin Read审计日志的方法
方案1:自定义Kubernetes审计策略
GKE支持通过自定义审计策略文件精准控制日志记录范围,绕过豁免主体无法使用通配符的限制。你可以编写规则,对system:*用户的Admin Read操作设置日志级别为None,同时记录其他主体的对应操作:
- 创建审计策略文件(比如
audit-policy.yaml):
apiVersion: audit.k8s.io/v1 kind: Policy # 先匹配需要排除的system用户操作,设置为不记录 rules: - level: None verbs: ["get", "list", "watch"] # 对应Admin Read类型的操作 subjects: - kind: User name: "system:*" # 再匹配其他主体的Admin Read操作,设置需要的日志级别(比如RequestResponse) - level: RequestResponse verbs: ["get", "list", "watch"]
- 将该策略应用到GKE集群:
gcloud container clusters update YOUR_CLUSTER_NAME --zone YOUR_CLUSTER_ZONE --audit-policy-file=audit-policy.yaml
注意:Kubernetes审计策略按规则顺序匹配,所以排除规则要放在前面,确保先匹配到system:*用户的操作并跳过记录。
方案2:在Cloud Logging层面过滤日志
如果不想修改集群审计配置,也可以直接在Cloud Logging中创建过滤器,只显示非system:*主体的Admin Read日志:
使用以下过滤器表达式(替换YOUR_PROJECT_ID为你的项目ID):
resource.type="k8s_cluster" AND logName:"projects/YOUR_PROJECT_ID/logs/kube-audit" AND protoPayload.authenticationInfo.principalEmail !~ "system:*" AND protoPayload.requestVerb IN ("get", "list", "watch")
你可以将这个过滤器保存为日志视图,后续直接通过视图快速查看目标日志,无需重复输入过滤条件。
方案3:调整GKE默认审计配置(进阶)
如果使用基础设施即代码工具(如Terraform)管理集群,可以在集群配置中指定自定义审计策略:
resource "google_container_cluster" "primary" { name = "my-cluster" location = "us-central1" master_config { audit_config { policy_config { file = "audit-policy.yaml" } } } }
这种方式可以确保集群创建时就应用好过滤规则,避免后续手动更新的麻烦。
内容的提问来源于stack exchange,提问作者phandox
相关产品推荐
相关产品推荐

