概览
Anthos clusters on VMware (GKE On-Prem) 同时支持 Cloud API 和 Kubernetes 集群级层的审核日志记录。本文档提供有关 Kubernetes 集群审核日志的信息。如需了解 Cloud API 审核日志记录,请参阅 Cloud API 审核日志记录信息。
Anthos clusters on VMware 利用 Kubernetes 审核日志记录功能,该功能会按时间顺序记录对 Kubernetes API 服务器进行的调用。审核日志适合用于调查可疑的 API 请求以及收集统计信息。
您可以配置集群,使其将审核日志写入磁盘或 Google Cloud 项目中的 Cloud Audit Logs。与写入磁盘,甚至在本地日志记录系统中捕获日志相比,写入 Cloud Audit Logs 具有多个优势:
- 所有 Anthos 集群的审核日志都可以集中管理。
- 写入 Cloud Audit Logs 的日志条目是不可变的。
- Cloud Audit Logs 条目会保留 400 天。
- Cloud Audit Logs 包含在 Anthos 的价格中。
基于磁盘的审核日志记录
默认情况下,审核日志会写入永久性磁盘,这样虚拟机重启和升级就不会导致日志消失。Anthos clusters on VMware 最多可保留 12 GB 的审核日志条目。
Cloud Audit Logs
如果您为集群启用 Cloud Audit Logs,则集群的 Kubernetes API 服务器的管理员活动审核日志条目会发送到 Google Cloud(使用您在集群配置文件的 cloudAuditLogging.projectID
字段中指定的 Google Cloud 项目)。此 Google Cloud 项目被称为审核日志记录项目。
审核日志记录项目必须与舰队宿主项目相同。
启用 Cloud Audit Logs 时,Anthos clusters on VMware 会停用基于磁盘的审核日志记录。
为了将日志条目缓冲并写入到 Cloud Audit Logs,Anthos clusters on VMware 会将一个 audit-proxy
Pod 部署到管理员集群中。此组件也可用作用户集群的 Sidecar 容器。
限制
适用于 Anthos clusters on VMware 的当前 Cloud Audit Logs 版本存在一些限制:
不支持数据访问(get、list、watch 请求)日志记录。
不支持修改 Kubernetes 审核政策。
Cloud Audit Logs 不能应对长时间的网络中断。如果无法将日志条目导出到 Google Cloud,则它们将缓存在 10G 磁盘缓冲区中。如果该缓冲区填满,则会丢弃后续条目。
启用 Anthos Audit API
在审核日志记录项目中启用 Anthos Audit API。
为 Cloud Audit Logs 创建服务帐号
您已经创建了一个或多个服务帐号,以便于使用 Anthos clusters on VMware。对于此功能,您需要额外创建一个服务帐号,称为审核日志记录服务帐号。
创建您的审核日志记录服务帐号:
gcloud iam service-accounts create audit-logging-service-account
为 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 是您的服务帐号的电子邮件地址。
将
audit-logging-key.json
保存在管理员工作站上其他服务帐号密钥所在的位置。
创建已启用 Cloud Audit Logs 的管理员集群
只有在一开始创建管理员集群时,您才能为该管理员集群启用 Cloud Audit Logs。您不能修改现有管理员集群来启用 Cloud Audit Logs。
请参阅创建管理员集群。
在管理员集群配置文件中,填写
cloudAuditLogging
部分。将
cloudAuditLogging.projectID
设置为您的审核日志记录项目的 ID。将
cloudAuditLogging.clusterLocation
设置为您要在其中存储审核日志的 Google Cloud 地区。为了缩短延迟时间,请选择靠近本地数据中心的区域。将
cloudAuditLogging.serviceAccountKeyPath
设置为审核日志记录服务帐号的 JSON 密钥文件的路径。
例如:
cloudAuditLogging: projectID: "my-project" clusterLocation: "us-west1" serviceAccountKeyPath: "/my-key-folder/audit-logging-key.json"
继续照常创建集群。
创建已启用 Cloud Audit Logs 的用户集群
请参阅创建用户集群。
在用户集群配置文件中,填写
cloudAuditLogging
部分。将
cloudAuditLogging.projectID
设置为您的审核日志记录项目的 ID。将
cloudAuditLogging.clusterLocation
设置为您要在其中存储审核日志的 Google Cloud 地区。为了缩短延迟时间,请选择靠近本地数据中心的区域。将
cloudAuditLogging.serviceAccounKeyPath
设置为 Cloud Audit Logs 服务帐号的 JSON 密钥文件的路径。确保已填写
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 之前按照以下步骤注册:
将
gkeConnect
部分添加到用户集群配置文件中。例如:gkeConnect: projectID: "my-project" registerServiceAccountKeyPath: "/my-key-fokder/connect-register-key.json"
更新集群:
gkectl update cluster --config USER_CLUSTER_CONFIG --kubeconfig ADMIN_CLUSTER_KUBECONFIG
注册用户集群后,请按照以下步骤启用 Cloud Audit Logs:
填写用户集群配置文件文件的
cloudAuditLogging
部分。如需详细了解各个字段,请参阅创建已启用 Cloud Audit Logs 的用户集群。cloudAuditLogging
部分中的projectID
必须与gkeConnect
部分中的相同。更新集群:
gkectl update cluster --config USER_CLUSTER_CONFIG --kubeconfig ADMIN_CLUSTER_KUBECONFIG
为现有用户集群停用 Cloud Audit Logs
在用户集群配置文件中,删除
cloudAuditLogging
部分。更新用户集群:
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
控制台
在 Google Cloud 控制台中,前往日志记录菜单中的日志页面。
在按标签过滤或搜索文字框中(在上述下拉菜单上方),点击向下箭头以打开下拉菜单。 从菜单中,选择转换为高级过滤条件。
在文本框中填写以下过滤条件:
resource.type="k8s_cluster" logName="projects/PROJECT_ID/logs/externalaudit.googleapis.com%2Factivity" protoPayload.serviceName="anthosgke.googleapis.com"
点击提交过滤条件以显示来自 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 审核日志记录政策决定。更改此政策目前不受支持,但将在未来版本中提供。