Kubernetes 审计是一项重要的安全措施,它可以帮助您监控和审计集群中的各种活动,以保障集群的安全性和合规性。本指南将带您逐步实现 Kubernetes 安全审计的配置和实战应用。

步骤 1: 检查集群是否支持审计

检查你的 Kubernetes 集群中支持的审计策略版本。使用以下命令列出所有支持的 API 资源版本:

kubectl api-resources | grep audit

步骤 2: 配置审计策略

创建审计策略文件 /etc/kubernetes/audit-policy.yaml,定义需要审计的事件和规则。例如,以下是一个简单的审计策略文件:

apiVersion: audit.k8s.io/v1
kind: Policy
rules:
  - level: Request
    resources:
      - '*'
    verbs:
      - create
      - update
      - delete
    userGroups:
      - system:authenticated
  - level: RequestResponse
    resources:
      - 'secrets'
    verbs:
      - '*'
    userGroups:
      - system:masters
  - level: Metadata
    resources:
      - '*'
    verbs:
      - get
      - list
  - level: None

详细说明

  • Rule 1:
  • level: Request 定义了审计记录的级别为 Request,表示记录请求的详细信息。
  • resources: 包含了所有资源,使用通配符 * 表示适用于所有资源。
  • verbs: 指定了敏感操作,这里是 createupdate 和 delete
  • userGroups: 适用于所有经过身份验证的用户。
  • Rule 2:
  • level: RequestResponse 定义了审计记录的级别为 RequestResponse,表示记录请求和响应的详细信息。
  • resources: 适用于 secrets 资源。
  • verbs: 使用通配符 * 表示适用于所有操作。
  • userGroups: 适用于 system:masters 用户组,表示具有集群管理员权限的用户组。
  • Rule 3:
  • level: Metadata 定义了审计记录的级别为 Metadata,表示只记录关于对象元数据的信息。
  • resources: 使用通配符 * 表示适用于所有资源。
  • verbs: 指定了 get 和 list 操作。
  • Rule 4:
  • level: None 定义了审计记录的级别为 None,表示不记录任何信息。

这个示例涵盖了对敏感操作的请求和响应的记录、监控集群管理员对 secrets 资源的所有操作、记录对所有资源对象元数据的读取操作等。请确保审计策略符合你的生产环境的具体需求和合规性要求。在实际生产环境中,审计策略的设置可能需要更加细致的调整,以满足特定的安全标准和法规要求。

步骤 3: 验证策略文件

kubectl apply -f /etc/kubernetes/audit-policy.yaml --dry-run=client

步骤 4: 启用 API Server 的审计

编辑 Kubernetes API Server 的配置文件(通常是 /etc/kubernetes/manifests/kube-apiserver.yaml),添加审计配置。确保以下参数已添加到 kube-apiserver 部分:

apiVersion: v1
kind: Pod
metadata:
  name: kube-apiserver
  namespace: kube-system
spec:
  containers:
  - command:
    - kube-apiserver
    - <other-flags>
    - --audit-log-path=/var/log/kubernetes/audit.log
    - --audit-log-format=json
    - --audit-log-maxage=30
    - --audit-log-maxbackup=3
    - --audit-log-maxsize=100
    - --audit-policy-file=/etc/kubernetes/audit-policy.yaml
    volumeMounts:
    - mountPath: /var/log/kubernetes
      name: var-log-kubernetes
    - mountPath: /etc/kubernetes/audit-policy.yaml
      name: audit-policy
  volumes:
  - hostPath:
      path: /var/log/kubernetes
    name: var-log-kubernetes
  - hostPath:
      path: /etc/kubernetes/audit-policy.yaml
    name: audit-policy

参数说明:

  • --audit-log-path: 审计日志的存储路径。
  • --audit-log-format=json:指定审计日志的格式。
  • --audit-log-maxage: 审计日志文件的最大保留天数。
  • --audit-log-maxbackup: 审计日志文件的最大备份数。
  • --audit-log-maxsize: 审计日志文件的最大大小。
  • --audit-policy-file: 审计策略文件的路径。

步骤 5: 重启 API Server

应用新的审计配置,需要重启 API Server:

sudo systemctl restart kubelet

步骤 6: 查看审计日志

审计日志将记录在指定的路径,您可以通过查看此文件来了解集群中的各种操作和事件:

cat /var/log/kubernetes/audit.log

实战应用:监控敏感操作

使用审计日志,您可以监控集群中发生的敏感操作,例如 Pod 的创建、删除等。通过分析审计日志,可以追踪特定用户的活动,识别潜在的安全风险。

cat /var/log/kubernetes/audit.log | grep "CreatePod"

这将筛选出所有创建 Pod 的审计事件,帮助您跟踪 Pod 的创建情况。

实战应用:异常行为检测

审计日志中记录了每个请求的详细信息,包括请求参数、用户信息等。通过分析日志,您可以检测到异常行为,例如异常频繁的登录尝试、权限提升等。

cat /var/log/kubernetes/audit.log | grep "LoginAttempt" | grep "Failure"

这将筛选出所有登录尝试失败的审计事件,帮助您及时发现潜在的安全风险。

结语

通过配置和实战应用 Kubernetes 安全审计,您可以更好地了解和维护集群的安全状态。审计是保障 Kubernetes 安全性的不可或缺的一环,帮助您及时发现潜在的风险并采取适当的措施。希望本指南能够帮助您实施和优化 Kubernetes 安全审计。