本文档介绍了如何使用适用于 Google Distributed Cloud 的 Cloud Audit Logs。Google Distributed Cloud 使用 Kubernetes 审核日志记录功能,该功能会按时间顺序记录对 Kubernetes API 服务器进行的调用。审核日志适合用于调查可疑的 API 请求以及收集统计信息。如需了解 GKE On-Prem API 的审核日志记录,请参阅 Cloud API 审核日志记录。
Cloud Audit Logs 简介
审核日志会写入 Google Cloud 项目中的 Cloud Audit Logs。与写入磁盘,在本地日志记录系统中捕获日志相比,写入 Cloud Audit Logs 具有多个优势:
- 所有 GKE 集群的审核日志都可以集中管理。
- 写入 Cloud Audit Logs 的日志条目是不可变的。
- Cloud Audit Logs 条目会保留 400 天。
- Cloud Audit Logs 功能包含在 Google Distributed Cloud 的价格中。
- 您可以配置 Google Distributed Cloud,以将日志写入磁盘或 Cloud Audit Logs。
基于磁盘的审核日志记录
如果明确停用 Cloud Audit Logs,则 Google Distributed Cloud 中的审核日志会写入永久性磁盘,这样集群重启和升级就不会导致日志消失。Google Distributed Cloud 最多可保留 1 GiB 的审核日志条目。
通过登录控制平面节点访问基于磁盘的审核日志。这些日志位于 /var/log/apiserver/
目录中。
Cloud Audit Logs
所有 Kubernetes API 服务器的管理员活动审核日志条目都会使用您在创建用户集群时指定的项目和位置发送到 Google Cloud。为了缓冲日志条目并将其写入 Cloud Audit Logs,Google Distributed Cloud 会部署 audit-proxy
在控制平面节点上运行的守护程序集。
限制
适用于 Google Distributed Cloud 的 Cloud Audit Logs 具有以下限制:
- 不支持数据访问日志记录。
- 不支持修改 Kubernetes 审核政策。
- Cloud Audit Logs 不能应对长时间的网络中断。如果日志条目无法导出到 Google Cloud,它们将被缓存到 10 GiB 的磁盘缓冲区中。如果该缓冲区填满,则最早的条目会被丢弃。
为 Cloud Audit Logs 创建服务账号
在将 Cloud Logging 和 Cloud Monitoring 与 Google Distributed Cloud 搭配使用之前,您必须先配置以下内容:
在 Google Cloud 项目中创建一个 Cloud Monitoring 工作区(如果您还没有该工作区)。
在 Google Cloud 控制台中,点击以下按钮,并按照工作流进行操作。
点击以下按钮以启用所需的 API:
将以下 IAM 角色分配给 Stackdriver 代理使用的服务账号:
logging.logWriter
monitoring.metricWriter
stackdriver.resourceMetadata.writer
monitoring.dashboardEditor
访问 Cloud Audit Logs
控制台
在 Google Cloud 控制台中,转到 Logging 菜单中的日志浏览器页面。
如果旧版日志查看器页面打开,请从升级下拉菜单中选择升级到新的日志浏览器。
点击查询以访问用于提交查询的字段。
在该字段中填写以下查询:
resource.type="k8s_cluster" logName="projects/PROJECT_ID/logs/externalaudit.googleapis.com%2Factivity" protoPayload.serviceName="anthosgke.googleapis.com"
将
PROJECT_ID
替换为您的项目 ID。点击运行查询以显示来自 Google Distributed Cloud 集群(已配置为登录此项目)的所有审核日志。
gcloud
列出项目的管理员活动日志中适用于 k8s_cluster
资源类型的前两个日志条目:
gcloud logging read \
'logName="projects/PROJECT_ID/logs/externalaudit.googleapis.com%2Factivity" \
AND resource.type="k8s_cluster" \
AND protoPayload.serviceName="anthosgke.googleapis.com" ' \
--limit 2 \
--freshness 300d
将 PROJECT_ID
替换为您的项目 ID。
输出区将显示两个日志条目。请注意,对于每个日志条目,logName
字段的值为 projects/PROJECT_ID/logs/externalaudit.googleapis.com%2Factivity
,并且 protoPayload.serviceName
等于 anthosgke.googleapis.com
。
审核政策
Kubernetes 审核政策定义将哪些事件应记录为日志条目的规则,并指定日志条目应包含的数据。不支持更改此政策以修改 Cloud Audit Logs 行为。