--- title: "接收和自定义审计日志" keywords: "Kubernetes, KubeSphere, 审计, 日志, 自定义, 接收" description: "了解如何接收和自定义审计日志。" linkTitle: "接收和自定义审计日志" weight: 15310 --- KubeSphere 审计日志提供了与安全相关的、按时间顺序排列的记录集,记录每个用户、管理员或系统其他组件对系统产生影响的一系列活动。对 KubeSphere 的每个请求都会生成一个事件,随后该事件会写入 Webhook 并根据特定规则进行处理。根据不同规则,该事件会被忽略、存储或生成告警。 ## 启用 KubeSphere 审计日志 要启用审计日志,请参见 [KubeSphere 审计日志](../../../pluggable-components/auditing-logs/)。 ## 接收来自 KubeSphere 的审计日志 KubeSphere 审计日志系统默认只接收来自 KubeSphere 的审计日志,同时也可以接收来自 Kubernetes 的审计日志。 用户可以使用以下命令在命名空间 `kubesphere-system` 中修改 `kubesphere-config` ConfigMap 中 `auditing.enable` 的值,停止接收来自 KubeSphere 的审计日志: ```bash kubectl edit cm -n kubesphere-system kubesphere-config ``` 将 `auditing.enabled` 的值修改为 `false`,停止接收来自 KubeSphere 的审计日志。 ```yaml spec: auditing: enabled: false ``` 您需要重启 KubeSphere Apiserver 使修改生效。 ## 接收来自 Kubernetes 的审计日志 要使 KubeSphere 审计日志系统接收来自 Kubernetes 的审计日志,您需要向 `/etc/kubernetes/manifests/kube-apiserver.yaml` 添加 Kubernetes 审计策略文件和 Kubernetes 审计 Webhook 配置文件,如下所示。 ### 审计策略 ```yaml 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 ``` {{< notice note >}} 该操作会重启 Kubernetes Apiserver。 {{}} `audit-policy.yaml` 文件定义了关于应记录哪些事件和应包含哪些数据的规则。您可以使用最小审计策略文件记录元数据级别的所有请求。 ```yaml # Log all requests at the Metadata level. apiVersion: audit.k8s.io/v1 kind: Policy rules: - level: Metadata ``` 有关审计策略的更多信息,请参见[审计策略](https://kubernetes.io/zh/docs/tasks/debug-application-cluster/audit/#audit-policy)。 ### 审计 Webhook `audit-webhook.yaml` 文件定义了 Kubernetes 审计日志将要发送至的 Webhook。以下是 Kube-Auditing Webhook 的示例配置。 ```yaml apiVersion: v1 kind: Config clusters: - name: kube-auditing cluster: server: https://{ip}:443/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-system` 中 `kube-auditing-webhook-svc` 服务的 `CLUSTER-IP`,您可以使用以下命令来获取。 ```bash kubectl get svc -n kubesphere-logging-system ``` {{< notice note >}} 修改这两个文件后,您需要重启 Kubernetes Apiserver 使修改生效。 {{}} 使用以下命令编辑 `kube-auditing-webhook` CRD Webhook,将 `k8sAuditingEnabled` 的值改为 `true`。 ```bash kubectl edit webhooks.auditing.kubesphere.io kube-auditing-webhook ``` ```yaml spec: auditing: k8sAuditingEnabled: true ``` {{< notice tip >}} 您也可以使用拥有 `platform-admin` 角色的帐户登录控制台,在**集群管理**页面转到 **CRD**,搜索 `Webhook`,直接编辑 `kube-auditing-webhook`。 {{}} 要停止接收来自 Kubernetes 的审计日志,请移除审计 Webhook 后端的配置,然后将 `k8sAuditingEnabled` 的值修改为 `false`。 ## 自定义审计日志 KubeSphere 审计日志系统提供 `kube-auditing-webhook` CRD Webhook 来自定义审计日志。下方是一个示例 YAML 文件: ```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` | 存档规则的优先级。已知的审计类型有 `DEBUG`、`INFO` 和 `WARNING`。 | `DEBUG` `alertingPriority` | 告警规则的优先级。已知的审计类型有 `DEBUG`、`INFO` 和 `WARNING`。 | `WARNING` `auditLevel` | 审计日志的级别。已知的级别有:
- `None`:不记录事件。
- `Metadata`:记录请求的元数据,例如请求的用户、时间戳、资源和操作行为 (Verb) 等,但不记录请求或响应的消息体。
- `Request`:记录事件的元数据和请求的消息体但不记录响应的消息体。这不适用于非资源类型的请求。
- `RequestResponse`:记录事件的元数据、请求以及响应的消息体。这不适用于非资源类型的请求。 | `Metadata` `k8sAuditingEnabled` | 是否接收 Kubernetes 审计日志。 | `false` `receivers` | 接收告警的接收器。 | {{< notice note >}} 您可以通过修改 `audit-policy.yaml` 文件变更 Kubernetes 审计日志的级别,然后重启 Kubernetes Apiserver。 {{}}