跳转到内容

Kubernetes审计

来自代码酷

Kubernetes审计[编辑 | 编辑源代码]

Kubernetes审计(Kubernetes Auditing)是Kubernetes安全机制的核心组成部分,它通过记录集群中发生的所有关键操作(如API请求),帮助管理员监控、分析和排查潜在的安全问题。审计日志提供了对用户、服务账户或系统组件行为的可追溯性,是合规性检查(如GDPR、HIPAA)和事故响应的重要工具。

审计工作原理[编辑 | 编辑源代码]

Kubernetes审计系统会捕获以下信息:

  • 请求来源:用户、服务账户或系统组件的身份
  • 操作类型:如`create`、`delete`、`patch`等
  • 目标资源:操作的Kubernetes资源(如Pod、Deployment)
  • 请求和响应状态:包括HTTP状态码和返回内容(可选)

审计日志以JSON格式存储,支持输出到本地文件或外部日志服务(如Fluentd、Logstash)。

审计策略[编辑 | 编辑源代码]

通过定义审计策略(Audit Policy),管理员可以控制记录哪些事件。策略文件使用YAML格式配置,示例:

apiVersion: audit.k8s.io/v1
kind: Policy
rules:
  # 记录所有Namespace的删除请求
  - level: Metadata
    verbs: ["delete"]
    resources:
      - group: ""
        resources: ["namespaces"]

  # 记录Pod变更的请求体和响应体
  - level: RequestResponse
    resources:
      - group: ""
        resources: ["pods"]

  # 忽略只读操作(如get/list)
  - level: None
    verbs: ["get", "list", "watch"]

配置审计日志[编辑 | 编辑源代码]

以下步骤展示如何启用审计功能:

1. 创建审计策略文件(如`audit-policy.yaml`) 2. 修改API服务器配置(通常在`/etc/kubernetes/manifests/kube-apiserver.yaml`):

spec:
  containers:
  - command:
    - kube-apiserver
    - --audit-policy-file=/etc/kubernetes/audit-policy.yaml
    - --audit-log-path=/var/log/kubernetes/audit.log
    - --audit-log-maxage=30  # 保留30天日志

日志分析示例[编辑 | 编辑源代码]

一条典型的审计日志条目如下:

{
  "kind": "Event",
  "apiVersion": "audit.k8s.io/v1",
  "stage": "ResponseComplete",
  "user": {"username": "admin"},
  "verb": "create",
  "resource": {"group": "", "resource": "pods"},
  "requestURI": "/api/v1/namespaces/default/pods",
  "responseStatus": {"code": 201},
  "requestObject": {
    "kind": "Pod",
    "apiVersion": "v1",
    "metadata": {"name": "nginx"},
    "spec": {"containers": [{"name": "nginx", "image": "nginx:latest"}]}
  }
}

实际应用场景[编辑 | 编辑源代码]

场景1:异常操作检测[编辑 | 编辑源代码]

通过分析审计日志,可以识别异常行为模式,例如:

  • 同一用户在短时间内频繁删除Pod
  • 非工作时间段的敏感操作

场景2:合规性报告[编辑 | 编辑源代码]

使用工具如`kube-audit`或`Falco`生成符合SOC2或PCI-DSS标准的报告:

# 使用jq工具统计操作类型
cat audit.log | jq '.verb' | sort | uniq -c

高级配置[编辑 | 编辑源代码]

日志分级[编辑 | 编辑源代码]

Kubernetes支持四种审计级别:

pie title 审计级别使用场景 "None" : 15 "Metadata" : 30 "Request" : 25 "RequestResponse" : 30

动态审计[编辑 | 编辑源代码]

Kubernetes 1.15+支持动态审计(Dynamic Auditing),允许通过Webhook将日志实时发送到外部系统:

apiVersion: auditregistration.k8s.io/v1alpha1
kind: AuditSink
metadata:
  name: custom-webhook
spec:
  webhook:
    throttle:
      qps: 10
    clientConfig:
      url: "https://audit-collector.example.com"

数学建模[编辑 | 编辑源代码]

在日志分析中,可以使用香农熵(Shannon Entropy)检测异常行为: H(X)=i=1nP(xi)logbP(xi) 其中:

  • P(xi)是操作xi出现的概率
  • 熵值突然增大可能表示异常活动

最佳实践[编辑 | 编辑源代码]

1. 敏感操作全记录:如RBAC变更、Secret访问 2. 日志加密存储:防止审计日志被篡改 3. 定期归档分析:避免存储空间耗尽 4. 与SIEM系统集成:如Splunk或ELK Stack

参见[编辑 | 编辑源代码]