接收和自定义审计日志

KubeSphere 审计日志提供了与安全相关的、按时间顺序排列的记录集,记录每个用户、管理员或系统其他组件对系统产生影响的一系列活动。对 KubeSphere 的每个请求都会生成一个事件,随后该事件会写入 Webhook 并根据特定规则进行处理。根据不同规则,该事件会被忽略、存储或生成告警。

启用 KubeSphere 审计日志

要启用审计日志,请参见 KubeSphere 审计日志

接收来自 KubeSphere 的审计日志

KubeSphere 审计日志系统默认只接收来自 KubeSphere 的审计日志,同时也可以接收来自 Kubernetes 的审计日志。

用户可以使用以下命令在命名空间 kubesphere-system 中修改 kubesphere-config ConfigMap 中 auditing.enable 的值,停止接收来自 KubeSphere 的审计日志:

  1. kubectl edit cm -n kubesphere-system kubesphere-config

auditing.enabled 的值修改为 false,停止接收来自 KubeSphere 的审计日志。

  1. spec:
  2. auditing:
  3. enabled: false

您需要重启 KubeSphere Apiserver 使修改生效。

接收来自 Kubernetes 的审计日志

要使 KubeSphere 审计日志系统接收来自 Kubernetes 的审计日志,您需要向 /etc/kubernetes/manifests/kube-apiserver.yaml 添加 Kubernetes 审计策略文件和 Kubernetes 审计 Webhook 配置文件,如下所示。

审计策略

  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4. name: kube-apiserver
  5. namespace: kube-system
  6. spec:
  7. containers:
  8. - command:
  9. - kube-apiserver
  10. - --audit-policy-file=/etc/kubernetes/audit/audit-policy.yaml
  11. - --audit-webhook-config-file=/etc/kubernetes/audit/audit-webhook.yaml
  12. volumeMounts:
  13. - mountPath: /etc/kubernetes/audit
  14. name: k8s-audit
  15. readOnly: true
  16. volumes:
  17. - hostPath:
  18. path: /etc/kubernetes/audit
  19. type: DirectoryOrCreate
  20. name: k8s-audit

备注

该操作会重启 Kubernetes Apiserver。

audit-policy.yaml 文件定义了关于应记录哪些事件和应包含哪些数据的规则。您可以使用最小审计策略文件记录元数据级别的所有请求。

  1. # Log all requests at the Metadata level.
  2. apiVersion: audit.k8s.io/v1
  3. kind: Policy
  4. rules:
  5. - level: Metadata

有关审计策略的更多信息,请参见审计策略

审计 Webhook

audit-webhook.yaml 文件定义了 Kubernetes 审计日志将要发送至的 Webhook。以下是 Kube-Auditing Webhook 的示例配置。

  1. apiVersion: v1
  2. kind: Config
  3. clusters:
  4. - name: kube-auditing
  5. cluster:
  6. server: https://{ip}:443/audit/webhook/event
  7. insecure-skip-tls-verify: true
  8. contexts:
  9. - context:
  10. cluster: kube-auditing
  11. user: ""
  12. name: default-context
  13. current-context: default-context
  14. preferences: {}
  15. users: []

ip 即命名空间 kubesphere-logging-systemkube-auditing-webhook-svc 服务的 CLUSTER-IP,您可以使用以下命令来获取。

  1. kubectl get svc -n kubesphere-logging-system

备注

修改这两个文件后,您需要重启 Kubernetes Apiserver 使修改生效。

使用以下命令编辑 kube-auditing-webhook CRD Webhook,将 k8sAuditingEnabled 的值改为 true

  1. kubectl edit webhooks.auditing.kubesphere.io kube-auditing-webhook
  1. spec:
  2. auditing:
  3. k8sAuditingEnabled: true

提示

您也可以使用拥有 platform-admin 角色的帐户登录控制台,在集群管理页面转到自定义资源 CRD,搜索 Webhook,直接编辑 kube-auditing-webhook

要停止接收来自 Kubernetes 的审计日志,请移除审计 Webhook 后端的配置,然后将 k8sAuditingEnabled 的值修改为 false

自定义审计日志

KubeSphere 审计日志系统提供 kube-auditing-webhook CRD Webhook 来自定义审计日志。下方是一个示例 YAML 文件:

  1. apiVersion: auditing.kubesphere.io/v1alpha1
  2. kind: Webhook
  3. metadata:
  4. name: kube-auditing-webhook
  5. spec:
  6. auditLevel: RequestResponse
  7. auditSinkPolicy:
  8. alertingRuleSelector:
  9. matchLabels:
  10. type: alerting
  11. archivingRuleSelector:
  12. matchLabels:
  13. type: persistence
  14. image: kubesphere/kube-auditing-webhook:v0.1.0
  15. archivingPriority: DEBUG
  16. alertingPriority: WARNING
  17. replicas: 2
  18. receivers:
  19. - name: alert
  20. type: alertmanager
  21. config:
  22. service:
  23. namespace: kubesphere-monitoring-system
  24. name: alertmanager-main
  25. port: 9093
参数描述信息默认值
replicasKube-Auditing Webhook 的副本数量。2
archivingPriority存档规则的优先级。已知的审计类型有 DEBUGINFOWARNINGDEBUG
alertingPriority告警规则的优先级。已知的审计类型有 DEBUGINFOWARNINGWARNING
auditLevel审计日志的级别。已知的级别有:
- None:不记录事件。
- Metadata:记录请求的元数据,例如请求的用户、时间戳、资源和操作行为 (Verb) 等,但不记录请求或响应的消息体。
- Request:记录事件的元数据和请求的消息体但不记录响应的消息体。这不适用于非资源类型的请求。
- RequestResponse:记录事件的元数据、请求以及响应的消息体。这不适用于非资源类型的请求。
Metadata
k8sAuditingEnabled是否接收 Kubernetes 审计日志。false
receivers接收告警的接收器。

备注

您可以通过修改 audit-policy.yaml 文件变更 Kubernetes 审计日志的级别,然后重启 Kubernetes Apiserver。