1.5 版。此版本受到全面支持,提供影响 GKE On-Prem 的安全漏洞、曝光情况和问题的最新补丁程序和更新。如需了解详情,请参阅版本说明。这不是最新版本

审核日志记录

概览

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

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

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

您可以配置 Anthos clusters on VMware,以将日志写入磁盘或 Cloud Audit Logs。

基于磁盘的审核日志记录

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

Cloud Audit Logs

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

Anthos clusters on VMware 会将 audit-proxy pod 部署到管理员集群,用作用户集群中的 Sidecar 容器。此 pod 会缓冲日志条目并将其写入 Cloud Audit Logs。

限制

适用于 Anthos clusters on VMware 的 Cloud Audit Logs 是一项 Alpha 版功能。此 Alpha 版存在一些限制:

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

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

  • Audit Logging 目前不能灵活应对网络中断。如果日志条目无法导出到 Google Cloud,这些日志条目将被丢弃。

启用 Anthos GKE API 和 Anthos Audit API

如需将 Cloud Audit Logs 与 Anthos clusters on VMware 搭配使用,请执行下列操作:

  1. 如果您使用的是 Anthos 1.4.x 或更低版本,请启用 Anthos GKE API。

  2. 如果您使用的是 Anthos 1.5 或更高版本,请启用 Anthos Audit API。

  3. 如果您不确定或打算升级到 Anthos 1.5,请同时启用以上两项。

启用 Anthos GKE API

启用 Anthos Audit API

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

您已经创建多个用于 Anthos clusters on VMware 的服务帐号。对于此 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 AUDIT_LOGGING_SERVICE_ACCOUNT_EMAIL
    

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

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

将您的服务帐号列入许可名单

如需请求将您的 Cloud Audit Logs 服务帐号添加到许可名单,请填写适用于 Anthos clusters on VMware Alpha 版的 Cloud Audit Logs 表单。列入许可名单完成后,您将收到一封通知电子邮件。在创建用户集群来启用 Cloud Audit Logs 之前,必须将您的服务帐号列入许可名单。

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

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

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

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

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

  4. cloudauditlogging.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"

继续照常创建集群。

在现有用户集群上启用 Cloud Audit Logs

您可以通过 gkectl update cluster 命令为现有用户集群启用 Audit Logging。

填写 user-cluster.yaml 文件的 cloudauditlogging 部分。(如需详细了解各个字段,请参阅创建已启用 Cloud Audit Logs 的用户集群。)

然后运行以下命令:

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

访问 Anthos clusters on VMware 审核日志

基于磁盘的审核日志记录

  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. 在 Cloud Console 中,转到日志记录菜单中的日志页面。

    转到“日志”页面

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

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

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

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