下游集群开启 API 审计日志

Kubernetes 审计提供了由 Kube-apiserver 执行的与安全相关的、按时间顺序排列的集群审计记录。Kube API 会在请求执行的每个阶段都生成一个事件,然后根据策略进行预处理并保存,审计策略配置了要记录的内容。

你可能希望将审计日志配置为遵守互联网安全中心 (CIS) Kubernetes 基准控制的一部分。

有关配置的详细信息,请参阅 Kubernetes 官方文档

  • RKE2
  • K3s
  • RKE1

方法1(建议):设置 machineGlobalConfig 字段的 audit-policy-file

你可以在配置文件中设置 audit-policy-file,Rancher 会将该文件保存在 Control Plane 节点的 /var/lib/rancher/rke2/etc/config-files/audit-policy-file 目录中,并在 RKE2 服务器中配置相应的选项。

例子:

  1. apiVersion: provisioning.cattle.io/v1
  2. kind: Cluster
  3. spec:
  4. rkeConfig:
  5. machineGlobalConfig:
  6. audit-policy-file: |
  7. apiVersion: audit.k8s.io/v1
  8. kind: Policy
  9. rules:
  10. - level: RequestResponse
  11. resources:
  12. - group: ""
  13. resources:
  14. - pods

方法2:直接使用 machineSelectorFilesmachineGlobalConfig 配置

下游集群开启 API 审计日志 - 图1备注

Rancher v2.7.2 及以上版本提供此功能。

你可以使用 machineSelectorFiles 将审计策略文件传递到 Control Plane 节点,并使用 machineGlobalConfig 设置 kube-apiserver 的选项。

在此之前,你需要创建 SecretConfigMap 作为审计策略的来源。

Secret 或 ConfigMap 必须满足以下要求:

  1. 必须位于 Cluster 对象所在的 fleet-default 命名空间中。
  2. 它必须含有 Annotation rke.cattle.io/object-authorized-for-clusters: <cluster-name1>,<cluster-name2>,以允许目标集群使用它。

下游集群开启 API 审计日志 - 图2提示

Rancher Dashboard 提供了易用的表单页面用于创建 Secret 或 ConfigMap。

例子:

  1. apiVersion: v1
  2. data:
  3. audit-policy: >-
  4. IyBMb2cgYWxsIHJlcXVlc3RzIGF0IHRoZSBNZXRhZGF0YSBsZXZlbC4KYXBpVmVyc2lvbjogYXVkaXQuazhzLmlvL3YxCmtpbmQ6IFBvbGljeQpydWxlczoKLSBsZXZlbDogTWV0YWRhdGE=
  5. kind: Secret
  6. metadata:
  7. annotations:
  8. rke.cattle.io/object-authorized-for-clusters: cluster1
  9. name: <name1>
  10. namespace: fleet-default

可以通过编辑集群 YAML 的 machineSelectorFilesmachineGlobalConfig 字段来启用和配置审计日志。

例子:

  1. apiVersion: provisioning.cattle.io/v1
  2. kind: Cluster
  3. spec:
  4. rkeConfig:
  5. machineGlobalConfig:
  6. kube-apiserver-arg:
  7. - audit-policy-file=<customized-path>/dev-audit-policy.yaml
  8. - audit-log-path=<customized-path>/dev-audit.logs
  9. machineSelectorFiles:
  10. - fileSources:
  11. - configMap:
  12. name: ''
  13. secret:
  14. items:
  15. - key: audit-policy
  16. path: <customized-path>/dev-audit-policy.yaml
  17. name: dev-audit-policy
  18. machineLabelSelector:
  19. matchLabels:
  20. rke.cattle.io/control-plane-role: 'true'

下游集群开启 API 审计日志 - 图3提示

你还可以使用指令 machineSelectorConfig 和适当的 machineLabelSelectors 来达到相同的效果。

有关集群配置的更多信息,请参阅 RKE2 集群配置参考页面。

下游集群开启 API 审计日志 - 图4备注

Rancher v2.7.2 及以上版本提供此功能。

你可以使用 machineSelectorFiles 将审计策略文件传递到 Control Plane 节点,并使用 machineGlobalConfig 设置 kube-apiserver 的选项。

在此之前,你需要创建 SecretConfigMap 作为审计策略的来源。

Secret 或 ConfigMap 必须满足以下要求:

  1. 必须位于 Cluster 对象所在的 fleet-default 命名空间中。
  2. 它必须含有 Annotation rke.cattle.io/object-authorized-for-clusters: <cluster-name1>,<cluster-name2>,以允许目标集群使用它。

下游集群开启 API 审计日志 - 图5提示

Rancher Dashboard 提供了易于使用的表单页面用于创建 SecretConfigMap

例子:

  1. apiVersion: v1
  2. data:
  3. audit-policy: >-
  4. IyBMb2cgYWxsIHJlcXVlc3RzIGF0IHRoZSBNZXRhZGF0YSBsZXZlbC4KYXBpVmVyc2lvbjogYXVkaXQuazhzLmlvL3YxCmtpbmQ6IFBvbGljeQpydWxlczoKLSBsZXZlbDogTWV0YWRhdGE=
  5. kind: Secret
  6. metadata:
  7. annotations:
  8. rke.cattle.io/object-authorized-for-clusters: cluster1
  9. name: <name1>
  10. namespace: fleet-default

可以通过编辑集群 YAML 的 machineSelectorFilesmachineGlobalConfig 字段来启用和配置审计日志。

例子:

  1. apiVersion: provisioning.cattle.io/v1
  2. kind: Cluster
  3. spec:
  4. rkeConfig:
  5. machineGlobalConfig:
  6. kube-apiserver-arg:
  7. - audit-policy-file=<customized-path>/dev-audit-policy.yaml
  8. - audit-log-path=<customized-path>/dev-audit.logs
  9. machineSelectorFiles:
  10. - fileSources:
  11. - configMap:
  12. name: ''
  13. secret:
  14. items:
  15. - key: audit-policy
  16. path: <customized-path>/dev-audit-policy.yaml
  17. name: dev-audit-policy
  18. machineLabelSelector:
  19. matchLabels:
  20. rke.cattle.io/control-plane-role: 'true'

下游集群开启 API 审计日志 - 图6提示

你还可以使用指令 machineSelectorConfig 和适当的 machineLabelSelectors 来达到相同的效果。

有关集群配置的更多信息,请参阅 K3s 集群配置参考 页面。

可通过编辑集群 YAML 来启用和配置审计日志。

在启用审计日志后,将使用 RKE1 的默认值。

  1. #
  2. # Rancher Config
  3. #
  4. rancher_kubernetes_engine_config:
  5. services:
  6. kube-api:
  7. audit_log:
  8. enabled: true

你还可以自定义审计日志配置。

  1. #
  2. # Rancher Config
  3. #
  4. rancher_kubernetes_engine_config:
  5. services:
  6. kube-api:
  7. audit_log:
  8. enabled: true
  9. configuration:
  10. max_age: 6
  11. max_backup: 6
  12. max_size: 110
  13. path: /var/log/kube-audit/audit-log.json
  14. format: json
  15. policy:
  16. apiVersion: audit.k8s.io/v1 # 这里必须填写
  17. kind: Policy
  18. omitStages:
  19. - "RequestReceived"
  20. rules:
  21. # Log pod changes at RequestResponse level
  22. - level: RequestResponse
  23. resources:
  24. - group: ""
  25. # Resource "pods" doesn't match requests to any subresource of pods,
  26. # which is consistent with the RBAC policy.
  27. resources: ["pods"]
  28. # Log "pods/log", "pods/status" at Metadata level
  29. - level: Metadata
  30. resources:
  31. - group: ""
  32. resources: ["pods/log", "pods/status"]

配置详情请参考 RKE1 官方文档