审核日志记录

概览

本文档介绍如何将 Cloud Audit Logs 用于 Google Distributed Cloud(仅限软件)。Google Distributed Cloud 利用 Kubernetes 审核日志记录功能,该功能会按时间顺序记录对集群 Kubernetes API 服务器进行的调用。审核日志对于调查可疑的 API 请求和收集统计信息非常有用。如需了解 GKE On-Prem API 的审核日志记录,请参阅 Cloud API 审核日志记录。

Cloud Audit Logs 简介

审核日志会写入项目中的 Cloud Audit Logs。 Google Cloud 与写入磁盘或在本地日志记录系统中捕获日志相比,写入 Cloud Audit Logs 具有多个优势:

  • 所有集群的审核日志都可以集中化。
  • 写入 Cloud Audit Logs 的日志条目是不可变的。
  • Cloud Audit Logs 条目会保留 400 天。
  • Cloud Audit Logs 功能包含在 Google Distributed Cloud 的价格中。
  • 您可以配置 Google Distributed Cloud,以将日志写入磁盘或 Cloud Audit Logs。

基于磁盘的审核日志记录

默认情况下,审核日志会写入永久性磁盘,这样虚拟机重启和升级就不会导致日志消失。

  • 如果未启用高级集群:

    Google Distributed Cloud 最多可保留 12 GB 的审核日志条目。

  • 如果已启用高级集群

    Google Distributed Cloud 最多可保留 1 GB 的审核日志条目。

Cloud Audit Logs

如果您为集群启用 Cloud Audit Logs,则集群的 Kubernetes API 服务器的管理员活动审核日志条目会发送到 Google Cloud(使用您在集群配置文件的 cloudAuditLogging.projectID 字段中指定的 Google Cloud 项目)。此 Google Cloud 项目被称为您的 审核日志记录项目。

审核日志记录项目必须与舰队宿主项目相同。

为了将日志条目缓冲并写入到 Cloud Audit Logs,Google Distributed Cloud 会将一个 audit-proxy Pod 部署到管理员集群中。此组件也可用作用户集群的边车容器。

限制

Cloud Audit Logs 存在以下限制:

  • 不支持数据访问日志记录(get、list、watch 请求)。
  • 不支持修改 Kubernetes 审核政策。
  • Cloud Audit Logs 不能应对长时间的网络中断。如果无法将日志条目导出到 Google Cloud,则它们将缓存在 10GB 磁盘缓冲区中。如果该缓冲区已满,则系统会丢弃最早的条目。
  • 一个项目最多可以支持大约 1000 个用于 Cloud Audit Logs 的服务账号。多个集群可以使用同一服务帐号。

启用 Anthos Audit API

在审核日志记录项目中启用 Anthos Audit API。

启用 Anthos Audit API

为 Cloud Audit Logs 创建服务账号

您已经创建了一个或多个服务账号,以便于使用 Google Distributed Cloud。对于此功能,您需要额外创建一个服务账号,称为审核日志记录服务账号。

  1. 创建您的审核日志记录服务账号:

    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 AUDIT_LOGGING_SERVICE_ACCOUNT_EMAIL
    

    其中,AUDIT_LOGGING_SERVICE_ACCOUNT_EMAIL 是您的服务账号的电子邮件地址。

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

警告:在删除此服务账号之前,务必先在集群配置中将其替换为新服务账号!此过程与为现有用户集群启用 Cloud Audit Logs类似。如果您忘记执行此操作,请按照清理指南进行操作。

创建已启用 Cloud Audit Logs 的管理员集群

只有在一开始创建管理员集群时,您才能为该管理员集群启用 Cloud Audit Logs。您不能修改现有管理员集群来启用 Cloud Audit Logs。

  1. 请参阅创建管理员集群。

  2. 在管理员集群配置文件中,填写 cloudAuditLogging 部分。

  3. 将 cloudAuditLogging.projectID 设置为您的审核日志记录项目的 ID。

  4. 将 cloudAuditLogging.clusterLocation 设置为要存储审核日志的 Google Cloud 区域。为了缩短延迟时间,请选择靠近本地数据中心的区域。

  5. 将 cloudAuditLogging.serviceAccountKeyPath 设置为审核日志记录服务账号的 JSON 密钥文件的路径。

例如:

cloudAuditLogging:
  projectID: "my-project"
  clusterLocation: "us-west1"
  serviceAccountKeyPath: "/my-key-folder/audit-logging-key.json"

继续照常创建集群。

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

  1. 请参阅创建用户集群。

  2. 在用户集群配置文件中,填写 cloudAuditLogging 部分。

  3. 将 cloudAuditLogging.projectID 设置为您的审核日志记录项目的 ID。

  4. 将 cloudAuditLogging.clusterLocation 设置为要存储审核日志的 Google Cloud 区域。为了缩短延迟时间,请选择靠近本地数据中心的区域。

  5. 将 cloudAuditLogging.serviceAccounKeyPath 设置为 Cloud Audit Logs 服务账号的 JSON 密钥文件的路径。

  6. 确保已填写 gkeConnect 部分,并且 gkeConnect.projectID 与 cloudAuditLogging.projectID 相同。

例如:

gkeConnect:
  projectID: "my-project"
  registerServiceAccountKeyPath: "/my-key-fokder/connect-register-key.json"

cloudAuditLogging:
  projectID: "my-project"
  clusterLocation: "us-west1"
  serviceAccountKeyPath: "/my-key-folder/audit-logging-key.json"

继续照常创建集群。

为现有用户集群启用 Cloud Audit Logs

您只能在注册用户集群的 Google Cloud 项目 中启用 Cloud Audit Logs。

如果现有用户集群未注册,请在启用 Cloud Audit Logs 之前按照以下步骤注册:

  1. 将 gkeConnect 部分添加到用户集群配置文件中。例如:

    gkeConnect:
      projectID: "my-project"
      registerServiceAccountKeyPath: "/my-key-fokder/connect-register-key.json"
    
  2. 更新集群:

    gkectl update cluster --config USER_CLUSTER_CONFIG --kubeconfig ADMIN_CLUSTER_KUBECONFIG
    

注册用户集群后,请按照以下步骤启用 Cloud Audit Logs:

  1. 填写用户集群配置文件文件的 cloudAuditLogging 部分。如需详细了解各个字段,请参阅创建已启用 Cloud Audit Logs 的用户集群。cloudAuditLogging 部分中的 projectID 必须与 gkeConnect 部分中的相同。

  2. 更新集群:

    gkectl update cluster --config USER_CLUSTER_CONFIG --kubeconfig ADMIN_CLUSTER_KUBECONFIG
    

为现有用户集群停用 Cloud Audit Logs

  1. 在用户集群配置文件中,删除 cloudAuditLogging 部分。

  2. 更新用户集群:

gkectl update cluster --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] --config [USER_CLUSTER_CONFIG]

访问审核日志

基于磁盘的审核日志记录

您可以在 /var/log/kube-audit/kube-apiserver-audit.log 下的控制平面节点上查找管理员集群的审核日志。用户集群的审核日志位于名为 kube-audit-kube-apiserver-0 的 PersistentVolumeClaim 中。您可以通过 volumes 条目在您自己的 Pod 中访问此数据:

为管理员集群添加此条目:

    volumes:
    - name: kube-audit
      hostPath:
        path: /var/log/kube-audit
        type: ""

为用户集群添加此条目:

    volumes:
    - name: kube-audit
      persistentVolumeClaim:
        claimName: kube-audit-kube-apiserver-0

如需在相应的管理员集群节点(且仅限此节点)上调度 Pod,您需要在 Pod 规范中添加 nodeSelector 和 tolerations 部分,如下所示:

    spec:
      nodeSelector:
        node-role.kubernetes.io/master: ''
      tolerations:
      - key: node-role.kubernetes.io/master
        value: ""
        effect: NoSchedule

对于用户集群,请将 namespace 设置为用户集群名称,然后将 nodeName 设置为与 kube-apiserver-0 相同:

   spec:
     nodeName: NODE_NAME

如需指出 nodeName 为 kube-apiserver-0,请运行以下命令:

kubectl get pod kube-apiserver-0 -n USER_CLUSTER_NAME --kubeconfig kubeconfig -o jsonpath='{.spec.nodeName}'

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

访问 Cloud Audit Logs

控制台

  1. 在 Google Cloud 控制台中,前往 日志记录 菜单中的 Logs Explorer 页面。

    转到 Logs Explorer

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

  2. 点击查询 字段,输入查询。

  3. 在查询 字段中输入以下查询:

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

    将 PROJECT_ID 替换为您的项目 ID。

  4. 点击提交查询 以显示来自已配置为登录此项目的集群的所有审核日志。

gcloud

  1. 列出项目的管理员活动日志中适用于 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
  1. 将 PROJECT_ID 替换为您的项目 ID。

输出内容会显示两个日志条目。请注意,对于每个日志条目,logName 字段的值为 projects/PROJECT_ID/logs/externalaudit.googleapis.com%2Factivity,并且 protoPayload.serviceName 等于 anthosgke.googleapis.com。

审核政策

Kubernetes 审核政策定义将哪些事件应记录为日志条目的规则,并指定日志条目应包含的数据。Cloud Audit Logs 行为由静态配置的 Kubernetes 审核日志记录政策决定。不支持更改此政策以修改 Cloud Audit Logs 行为。