审核日志记录

概览

GKE On-Prem 利用 Kubernetes 审核日志记录功能,该功能会按时间顺序记录对 Kubernetes API 服务器进行的调用。审核日志适合用于调查可疑的 API 请求以及收集统计信息。

在 Anthos 1.2 之前,GKE On-Prem 仅将审核日志写入磁盘。Anthos 1.2 引入了一项 Alpha 版功能,支持将审核日志写入 Google Cloud 项目中的 Cloud Audit Logs。与写入磁盘,甚至在本地日志记录系统中捕获日志相比,写入 Cloud Audit Logs 具有多个优势:

  • 所有 Anthos 集群的审核日志都可以集中管理。
  • 写入 Cloud Audit Logs 的日志条目是不可变的。
  • Cloud Audit Logs 条目会保留 400 天。
  • Cloud Audit Logs 包含在 Anthos 的价格中。

您可以配置 GKE On-Prem,以将日志写入磁盘或 Cloud Audit Logs。

基于磁盘的审核日志记录

默认情况下,GKE On-Prem 中的审核日志会写入永久性磁盘,这样虚拟机重启和升级就不会导致日志消失。GKE On-Prem 最多可保留 10 GB 的审核日志条目。

Cloud Audit Logs

如果启用了 Cloud Audit Logs,则所有 Kubernetes API 服务器的管理员活动审核日志条目会发送到 Google Cloud(使用您在创建用户集群时指定的项目和位置)。

GKE On-Prem 会将 audit-proxy pod 部署到管理员集群和用户集群。此 pod 会缓冲日志条目并将其写入 Cloud Audit Logs。

限制

适用于 GKE On-Prem 的 Cloud Audit Logs 是一项 Alpha 版功能。此 Alpha 版存在一些限制:

  • 您只能在创建用户集群期间配置 Cloud Audit Logs。也就是说,您必须创建新的用户集群。

  • 不支持数据访问日志记录。

  • 不支持修改 Kubernetes 审核政策。

这些限制将在未来版本中得到解决。

启用 Anthos Clusters API

如需将 Cloud Audit Logs 与 GKE On-Prem 搭配使用,您必须启用 Anthos Clusters API。

启用 Anthos Clusters API

创建用于审核日志记录的服务帐号

您已经创建多个用于 GKE On-Prem 的服务帐号。对于此 Alpha 版功能,您需要创建一个额外的服务帐号,并将其列入许可名单。

  1. 创建 Cloud Audit Logs 服务帐号:

    gcloud iam service-accounts create audit-logging-service-account
  2. 为 Cloud Audit Logs 服务帐号创建 JSON 密钥文件:

    gcloud iam service-accounts keys create audit-logging-key.json \
       --iam-account [Cloud Audit Logs_SERVICE_ACCOUNT_EMAIL]
    

    其中,[Cloud Audit Logs_SERVICE_ACCOUNT_EMAIL] 是您的 Cloud Audit Logs 服务帐号的电子邮件地址。

  3. audit-logging-key.json 保存在管理员工作站上其他服务帐号密钥所在的位置。

将服务帐号列入白名单

如需请求将您的 Cloud Audit Logs 服务帐号列入许可名单,请填写适用于 GKE On-Prem 的 Cloud Audit Logs Alpha 版表单。在创建用户集群来启用 Cloud Audit Logs 之前,必须将您的服务帐号列入许可名单。

创建已启用 Cloud Audit Logs 的用户集群

  1. 如果您尚未创建管理员集群,请按照使用静态 IP 地址进行安装使用 DHCP 进行安装中的说明创建新的管理员集群和用户集群。

    如果您已拥有管理员集群,请按照创建其他用户集群中的说明创建新的用户集群。

  2. 运行 gkectl create-config 之后,照常填写配置文件,同时还填写 usercluster 下新的 cloudauditlogging 部分。

  3. cloudauditlogging.projectid 设置为 Google Cloud 项目的 ID,您要在该项目中查看与用户集群相关的审核日志。

  4. cloudauditloggijg.clusterlocation 设置为您要在其中存储审核日志的 Google Cloud 区域。建议选择一个靠近您的本地数据中心的区域。

  5. cloudauditlogging.serviceaccountkeypath 设置为 Cloud Audit Logs 服务帐号的 JSON 密钥文件的路径。

例如:

cloudauditlogging:
  projectid: "my-project"
  clusterlocation: "us-west1"
  serviceaccountkeypath: "/my-key-folder/audit-logging-key.json"

继续照常创建集群。

访问 GKE On-Prem 审核日志

基于磁盘的审核日志记录

  1. 查看在管理员集群及其所有关联的用户集群中运行的 Kubernetes API 服务器:

    kubectl --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] get pods --all-namespaces -l component=kube-apiserver
    

    其中,[ADMIN_CLUSTER_KUBECONFIG] 是管理员集群的 kubeconfig 文件。

  2. 下载 API 服务器的审核日志:

    kubectl cp -n [NAMESPACE] [APISERVER_POD_NAME]:/var/log/kube-audit/kube-apiserver-audit.log /tmp/kubeaudit.log
    

    此命令会提取最新的日志文件,该日志文件对于管理员集群最多可以包含 1 GB 的数据,而对于用户集群最多可以包含 850 GB 的数据。

    较早的审核记录保存在单独的文件中。如需查看这些文件,请运行以下命令:

    kubectl exec -n [NAMESPACE] [APISERVER_POD_NAME] -- ls /var/log/kube-audit -la
    

    每个审核日志的文件名都有一个时间戳,用于指明文件的轮替时间。文件包含该时间和日期之前的审核日志。

Cloud Audit Logs

控制台

  1. 在 Google Cloud 控制台中,转到日志记录菜单中的日志页面。

    前往日志浏览器

  2. 按标签过滤或搜索文字框中(在上述下拉菜单上方),点击向下箭头以打开下拉菜单。 从菜单中,选择转换为高级过滤条件

  3. 在文本框中填写以下过滤条件:

    resource.type="k8s_cluster"
    logName="projects/[PROJECT_ID]/logs/externalaudit.googleapis.com%2Factivity"
    protoPayload.serviceName="anthosgke.googleapis.com"
    
  4. 点击提交过滤条件以显示来自 GKE On-Prem 集群(已配置为登录此项目)的所有审核日志。

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 审核日志记录政策决定。更改此政策目前不受支持,但将在未来版本中提供。