使用 Kubernetes 审核日志记录

本文档介绍如何在 GKE on Bare Metal 上使用 Cloud Audit Logs。GKE on Bare Metal 使用 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 功能包含在适用于 Bare Metal 的 GDCV 的价格中。
  • 您可以配置 GKE on Bare Metal 将日志写入磁盘或 Cloud Audit Logs。

基于磁盘的审核日志记录

如果明确停用 Cloud Audit Logs,则 GKE on Bare Metal 中的审核日志会写入永久性磁盘,这样集群重启和升级就不会导致日志消失。GKE on Bare Metal 最多可保留 1 GiB 的审核日志条目。

通过登录控制平面节点访问基于磁盘的审核日志。这些日志位于 /var/log/apiserver/ 目录中。

Cloud Audit Logs

所有 Kubernetes API 服务器的管理员活动审核日志条目都会使用您在创建用户集群时指定的项目和位置发送到 Google Cloud。为了缓冲日志条目并将其写入 Cloud Audit Logs,GKE on Bare Metal 部署在控制平面节点上运行的 audit-proxy 守护程序集。

限制

适用于 GKE on Bare Metal 的 Cloud Audit Logs 具有以下限制:

  • 不支持数据访问日志记录。
  • 不支持修改 Kubernetes 审核政策。
  • Cloud Audit Logs 不能应对长时间的网络中断。如果日志条目无法导出到 Google Cloud,它们将被缓存到 10 GiB 的磁盘缓冲区中。如果该缓冲区填满,则最早的条目会被丢弃。

为 Cloud Audit Logs 创建服务账号

在 GKE on Bare Metal 上启用 Cloud Logging 和 Cloud Monitoring 之前,您必须先配置以下内容:

  1. 在 Google Cloud 项目中创建一个 Cloud Monitoring 工作区(如果您还没有该工作区)。

    在 Google Cloud 控制台中,点击以下按钮并按照工作流操作。

    进入 Monitoring

  2. 点击以下按钮以启用所需的 API:

    启用 Anthos Audit API

    启用 Stackdriver API

    启用 Monitoring API

    启用 Logging API

  3. 将以下 IAM 角色分配给 Stackdriver 代理使用的服务账号:

    • logging.logWriter
    • monitoring.metricWriter
    • stackdriver.resourceMetadata.writer
    • monitoring.dashboardEditor

访问 Cloud Audit Logs

控制台

  1. 在 Google Cloud 控制台中,转到 Logging 菜单中的日志浏览器页面。

    转到日志浏览器

    如果旧版日志查看器页面打开,请从升级下拉菜单中选择升级到新的日志浏览器

  2. 点击查询以访问用于提交查询的字段。

  3. 使用以下查询填充该字段:

    resource.type="k8s_cluster"
    logName="projects/PROJECT_ID/logs/externalaudit.googleapis.com%2Factivity"
    protoPayload.serviceName="anthosgke.googleapis.com"
    

    PROJECT_ID 替换为您的项目 ID。

  4. 点击运行查询以显示来自 GKE on Bare Metal 集群且已配置为登录此项目的所有审核日志。

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 行为。