审核日志记录

概览

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。

基于磁盘的审核日志记录

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

Cloud Audit Logs

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

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

限制

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

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

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

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

启用 Anthos GKE API 和 Anthos Audit API

如需将 Cloud Audit Logs 与 GKE On-Prem 搭配使用,请执行以下操作:

  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

为 Cloud Audit Logs 创建服务帐号

您已经创建多个用于 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 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 的管理员集群

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

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

  2. 运行 gkectl create-config 之后,照常填写配置文件 admin-cluster.yaml,同时还要填写新的 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 的用户集群

  1. 如果您尚未创建管理员集群,请参阅创建管理员集群的说明。

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

  2. 运行 gkectl create-config 之后,照常填写配置文件 user-cluster.yaml,同时还要填写新的 cloudAuditLogging 部分。

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

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

  5. cloudAuditLogging.serviceAccounKeyPath 设置为 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 命令为现有用户集群启用 Cloud Audit Logs。

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

然后运行以下命令:

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

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

  1. 打开描述用户集群的 user-cluster.yaml 文件。

  2. 删除 cloudAuditLogging 部分或者将其注释掉,然后保存文件。

  3. 运行以下命令以更新用户集群:

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 的数据。

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

    volumes:
    ‐ name: kube-audit
      hostPath:
        path: /var/log/kube-audit
        type: ""
    
    volumes:
    ‐ name: kube-audit
      persistentVolumeClaim:
        claimName: kube-audit-kube-apiserver-0
        readOnly: true
    

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

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

    对于用户集群,请使用以下 nodeSelector

    spec:
     nodeSelector:
       kubernetes.googleapis.com/cluster-name: [USER_CLUSTER_NAME]
    

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

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

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

Cloud Audit Logs

控制台

  1. 在 Cloud Console 中,转到 Logging 菜单中的日志页面。

    转到日志浏览器

  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

审核政策

Cloud Audit Logs 行为由静态配置的 Kubernetes 审核日志记录政策决定。更改此政策目前不受支持,但将在未来版本中提供。