审核日志记录

概览

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 最多可保留 12 GB 的审核日志条目。

Cloud Audit Logs

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

为了将日志条目缓冲并写入到 Cloud Audit Logs,GKE On-Prem 会将 audit-proxy Pod 部署到管理员集群中。此 Pod 也可用作用户集群的 Sidecar 容器。

限制

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

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

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

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

  • Audit Logging 不支持 HTTP_PROXY。审核代理配置不会考虑使用 HTTP 代理访问 Google API 和 Container Registry 的情况,因此 DNS 解析会失败。

启用 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 服务帐号添加到许可名单,请填写 GKE On-Prem 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]

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

    您还可以在 /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: ""
  3. 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. 在 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

审核政策

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