接收和自定义审计日志

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

启用 KubeSphere 审计日志

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

接收来自 KubeSphere 的审计日志

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

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

kubectl edit cm -n kubesphere-system kubesphere-config

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

  spec:
    auditing:
      enabled: false

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

接收来自 Kubernetes 的审计日志

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

审计策略

apiVersion: v1
kind: Pod
metadata:
  name: kube-apiserver
  namespace: kube-system
spec:
  containers:
  - command:
    - kube-apiserver
    - --audit-policy-file=/etc/kubernetes/audit/audit-policy.yaml
    - --audit-webhook-config-file=/etc/kubernetes/audit/audit-webhook.yaml
    volumeMounts:
    - mountPath: /etc/kubernetes/audit
      name: k8s-audit
      readOnly: true
  volumes:
  - hostPath:
      path: /etc/kubernetes/audit
      type: DirectoryOrCreate
    name: k8s-audit

备注

该操作会重启 Kubernetes Apiserver。

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

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

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

审计 Webhook

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

apiVersion: v1
kind: Config
clusters:
- name: kube-auditing
  cluster:
    server: https://{ip}:6443/audit/webhook/event
    insecure-skip-tls-verify: true
contexts:
- context:
    cluster: kube-auditing
    user: ""
  name: default-context
current-context: default-context
preferences: {}
users: []

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

kubectl get svc -n kubesphere-logging-system

备注

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

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

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

提示

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

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

自定义审计日志

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

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

备注

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

通过邮件接收 KubeSphere 最新的技术博客与产品更新的通知


感谢您的反馈。如果您有关于如何使用 KubeSphere 的具体问题,请在 Slack 上提问。如果您想报告问题或提出改进建议,请在 GitHub 存储库中打开问题。