1. 背景
从kubernetes 1.6
版本开始支持审计功能,到1.12
版本审计功能GA
,而本文则是针对kubernetes 1.15+
简单说明其审计功能的开启和配置。那何为审计功能呢,审计功能又有什么作用呢?
如下是摘自Kubernetes
官方文档的一段话:
Kubernetes 审计功能提供了与安全相关的按时间顺序排列的记录集,记录单个用户、管理员或系统其他组件影响系统的活动顺序。 它能帮助集群管理员处理以下问题:
- 发生了什么?
- 什么时候发生的?
- 谁触发的?
- 为什么发生?
- 在哪观察到的?
- 它从哪触发的?
- 它将产生什么后果?
2. 审计功能开启
Kubernetes
的审计功能是通过kube-apiserver
开启,具体是主要设置kube-apiserver
的两个启动参数audit-policy-file
和audit-log-path
,如果是kubeadm
搭建的kubernetes
集群,则修改kube-apiserver
的配置文件/etc/kubernetes/manifests/kube-apiserver.yaml
即可,比如:
至于这两个参数以及如上截图中其他审计相关的参数的具体意义,下文会进一步说明。
2.1 审计策略
审计策略定义了kubernetes
哪些资源的事件被记录以及被记录事件的数据规则,对应上面截图中参数audit-policy-file
,文件配置会涉及到两个十分重要的名词解释:审计阶段和审计级别。
2.1.1 审计阶段
及记录事件的时机,这里分为四种类型:
-
RequestReceived
:一旦接收到请求即刻记录审计事件; -
ResponseStarted
:响应头发出,响应消息体未发出之前,一般适用于长连接或者耗时任务的场景; -
ResponseComplete
:响应消息体完成; -
Panic
:出现panic
2.1.2 审计级别
代表记录审计日志的完整程度,常见的也有四种:
-
None
:不记录审计日志; -
Metadata
:记录请求的原子数据信息比如请求的user、method、时间、资源类型
等,但不包括请求体和响应体; -
Request
:记录包括Metadata
和请求体,但不包括响应体; -
RequestResponse
:记录包括Metadata
、请求体、响应体;
当然,除了上述两个关键字之外,审计策略还应包括具体的规则(rules
),比如请求的user、method、resource
等,并且这里规则的配置跟kubernetes role
规则的写法基本一致,举一个简单的审计策略配置的例子,只针对pod
的创建和删除记录审计日志:
# cat /etc/kubernetes/pki/audit-policy.yaml
apiVersion: audit.k8s.io/v1beta1 # 必须字段,固定写法
kind: Policy # 必须字段,固定写法
omitStages:
- "RequestReceived" # 审计阶段
rules: # rule按顺序匹配
- level: Request # 审计级别
verbs:
- create
- delete
resources:
- group: ""
resources:
- pods
- level: None
2.2 审计后端
审计后端则实现将审计日志导出,支持两种方式:Log后端
和webhook后端
,后一种方式此文不做展开,简单说明一下Log后端
。
2.2.1 配置参数
其中最重要的参数则对应上面截图中参数audit-log-path
,即审计日志写入的文件路径,如果不设置此参数则表示禁用Log后端
,如果设置-
则表示标准输出(比如stdout、strerr
形式的输出),此时可以通过kubectl logs
命令打印日志输出。
还有一些参数比如:
-
audit-log-maxage
:日志保留的最大天数; -
audit-log-maxbackup
:日志文件保留的最大数量; -
audit-log-maxsize
:单个日志文件的最大容量,超过则轮转记录到一个新文件; -
audit-log-format
:日志记录的格式,比如json
等;
2.2.2 审计日志采集
对于将日志保存到文件中,默认是无法采集到日志信息,实际环境中可以采用sidecar
或者其他三方代理的形式比如fluentd
,这儿呢为了做下简单测试直接使用了卷挂载的形式(将pod容器中文件映射到本地),即在kube-apiserver
添加如下配置:
...
VolumeMounts:
- mountPath: /var/log
name: audit-log
volumes:
- hostPath:
path: /var/log/kubernetes
type: DirectoryOrCreate
...
保存kube-apiserver
配置则会自动重启apiserver
,待重启完成后可通过手动删除、创建一个pod
来观察审计日志的输出:
网友评论