kubernetes--kubernetes审计日志(api访问日志)

目录

一、审计日志介绍:

二、事件和阶段:

三、Kubernetes审计日志:

四、审计日志的启用:

五、收集审计日志方案:


一、审计日志介绍:

       在Kubernetes集群中,API Server的审计日志记录了哪些用户、哪些服务请求操作集群资源,并且可以编写不通规则,控制忽略、存储的操作日志。

       审计日志采用JSON输出,每条日志报包含丰富的元数据,例如请求的URL、HTTP的方法、客户端来源登,你可以使用监控服务来分析API流量,以检测趋势或可能存在的安全隐患。

这些服务会访问API Serve:

  1. 管理节点(controller-manager scheduler)
  2. 工作节点(kubelt、kube-proxy)
  3. 集群服务(CoreDNS、Calico、HPA等)
  4. kubectl、API、Dashboard

二、事件和阶段:

当客户端向API Server发出请求时,该请求将经历一个或多个阶段:

阶段

说明

RequestReceived

审核处理程序已收到请求

ResponseStarted

已发送 响应标头,但尚未发送响应正文

ResponseComplete

响应正文已完成,不再发送任何字节

Panic

内部服务器出错,请求未完成

三、Kubernetes审计日志:

       Kubernetes审核策略文件包含一系列规则,描述了记录日志的级别,采集哪些日志,不采集哪些日志。

规则级别如下表所示:

级别

说明

None

不为事件创建日志条目

Metadata

创建日志条目。包括元数据,但不包括请求正文或响应正文

Request

创建日志条目。包括元数据和请求正文,但不包括响应正文

RequestResponse

创建日志条目。包括元数据、请求正文和响应正文

参考资料:https://kubernetes.io/zh/docs/tasks/debug-application-cluster/audit/

示列:

日志示列格式:

 

四、审计日志的启用:

审计日志支持写入本地文件和Webhook(发送到外部HTTP API)两种方式。

启用审计日志功能:

【】vi /etc/kubernetes/manifests/kube-apiserver.yaml

…
- --audit-policy-file=/etc/kubernetes/audit/audit-policy.yaml 
- --audit-log-path=/var/log/k8s_audit.log  
- --audit-log-maxage=30
- --audit-log-maxbackup=10
- --audit-log-maxsize=100
...
volumeMounts:
...
- mountPath: /etc/kubernetes/audit/audit-policy.yaml
  name: audit
- mountPath: /var/log/k8s_audit.log
  name: audit-log
volumes:
- name: audit
  hostPath:
    path: /etc/kubernetes/audit/audit-policy.yaml
    type: File
- name: audit-log
  hostPath:
    path: /var/log/k8s_audit.log
    type: FileOrCreate

参数说明

audit-policy-file

审计日志策略文件

audit-log-path

审计日志输出文件

audit-log-maxage

审计日志保留的最大天数

audit-log-maxbackup

审计日志最大分片存储多少个日志文件

audit-log-maxsize

单个审计日志最大大小,单位MB

注:需要使用hostpath数据卷将宿主机策略文件和日志文件挂载到容器中。

【】vi  /etc/kubernetes/audit/audit-policy.yaml#简略版自定义

apiVersion: audit.k8s.io/v1 # 这是必填项。
kind: Policy
# 不要在 RequestReceived 阶段为任何请求生成审计事件。
omitStages:
  - "RequestReceived"
rules:
  # 在日志中用 RequestResponse 级别记录 Pod 变化。
  - level: RequestResponse
    resources:
    - group: ""
      # 资源 "pods" 不匹配对任何 Pod 子资源的请求,
      # 这与 RBAC 策略一致。
      resources: ["pods"]
  # 在日志中按 Metadata 级别记录 "pods/log"、"pods/status" 请求
  - level: Metadata
    resources:
    - group: ""
      resources: ["pods/log", "pods/status"]

  # 不要在日志中记录对名为 "controller-leader" 的 configmap 的请求。
  - level: None
    resources:
    - group: ""
      resources: ["configmaps"]
      resourceNames: ["controller-leader"]

  # 不要在日志中记录由 "system:kube-proxy" 发出的对端点或服务的监测请求。
  - level: None
    users: ["system:kube-proxy"]
    verbs: ["watch"]
    resources:
    - group: "" # core API 组
      resources: ["endpoints", "services"]

  # 不要在日志中记录对某些非资源 URL 路径的已认证请求。
  - level: None
    userGroups: ["system:authenticated"]
    nonResourceURLs:
    - "/api*" # 通配符匹配。
    - "/version"

  # 在日志中记录 kube-system 中 configmap 变更的请求消息体。
  - level: Request
    resources:
    - group: "" # core API 组
      resources: ["configmaps"]
    # 这个规则仅适用于 "kube-system" 名字空间中的资源。
    # 空字符串 "" 可用于选择非名字空间作用域的资源。
    namespaces: ["kube-system"]

  # 在日志中用 Metadata 级别记录所有其他名字空间中的 configmap 和 secret 变更。
  - level: Metadata
    resources:
    - group: "" # core API 组
      resources: ["secrets", "configmaps"]

  # 在日志中以 Request 级别记录所有其他 core 和 extensions 组中的资源操作。
  - level: Request
    resources:
    - group: "" # core API 组
    - group: "extensions" # 不应包括在内的组版本。

  # 一个抓取所有的规则,将在日志中以 Metadata 级别记录所有其他请求。
  - level: Metadata
    # 符合此规则的 watch 等长时间运行的请求将不会
    # 在 RequestReceived 阶段生成审计事件。
    omitStages:
      - "RequestReceived"

【】cat /var/log/audit/audit.log#以json格式输出的

#以json格式输出的安全jq用来解析json,老版本会是json

【】yum -y install jq

【】cat /var/log/k8s_audit.log |jq

简略版配置

【】vi  /etc/kubernetes/audit/audit-policy.yaml#简略版自定义只记录pod操作


apiVersion: audit.k8s.io/v1
kind: Policy
# 忽略步骤,不为RequestReceived阶段生成审计日志
omitStages:
  - "RequestReceived"
rules:
# 不记录日志
  - level: None
    users:
    - system:apiserver
    - system:kube-controller-manager
    - system:kube-scheduler
    - system:kube-proxy
    - kubelet
# 针对资源记录日志
  - level: Metadata
    resources: 
    - group: ""
      resources: ["pods"]
# - group: "apps"
# resources: ["deployments"]
# 其他资源不记录日志
    - level: None

重启kubelet以生效

【】systemctl  restart  kubelet#若不生效则删一下apiserver的pod

五、收集审计日志方案:

  1. 审计日志文件+filebeat  比较实际
  2. 审计webhook+logstash
  3. 审计webhook+falco
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值