一、说明
K8S涉及非常多的组件,在完成安装部署后需要对配置进行安全性检查,这是确保K8S基础架构安全的重要组成部分,我们可以参考互联网安全中心CIS(https://www.cisecurity.org/benchmark/kubernetes/)提供的安全基线进行逐项检查。由于检查项众多,可以使用kube-bench工具进行检查,Kube-bench会按照CIS手册进行自动化检查,并输出检查结果,Kube-bench网站:https://github.com/aquasecurity/kube-bench。
二、安装kube-bench
1、 根据kube-bench官网说明,部署kube-bench镜像;
2、 下载已发布的二进制版本
本文使用二进制的方式,下载kube-bench_0.8.0_linux_amd64.tar.gz,解压得到配置文件的目录及可执行程序:
在cfg目录下包含了cis各个版本的配置文件,其主配置文件为cfg/config.yaml,其中包括了master节点、worker 节点、controlplane等组件的配置文件路径,在基线检查的过程中,kube-bench会读取该配置文件配置的路径,如果安装的K8S方式不同,可能会有些差异,需要进行调整。
在cfg/目录下各CIS版本目录中包括了具体检查对象的检查条款,例如:
包括了controlplane、etcd、master、node、policies的检查条款,和CIS_Kubernetes_Benchmark中的条款是相对应的。
三、使用kube-bench进行安全基线检查
kube-bench可以对controlplane、etcd、master、worker节点进行检查,并提供相应的处置说明。
(一)Etcd检查:
[root@k8s-master1 kube-bench]# ./kube-bench --config-dir cfg/ --config ./cfg/config.yaml run --targets=etcd
检查发现5个通过,2个失败,这里以修复2.2为例,修改建议为在/usr/lib/systemd/system/etcd.service文件中添加参数,如下:
[root@k8s-master1 kube-bench]# systemctl daemon-reload
[root@k8s-master1 kube-bench]# systemctl restart etcd
再次运行检查工具,结果通过检查:
(二)Master基线扫描:
[root@k8s-master1 kube-bench]# ./kube-bench --config-dir cfg/ --config ./cfg/config.yaml run --targets=master
29个检查通过项,23个失败项,13个告警项。检查发现,由于kube-bench基于CIS检查项,可以查看对应的配置文件,如果某个检查对象不存在,该条也会失败。由于我安装的K8S为1.6,我的配置文件路径为:opt/kubernetes/cfg/kube-apiserver.conf,与基线检查的默认路径不一样,因此需要修改一下kube-bench配置文件中apiserver的配置文件路径。
修改后再次运行检查命令,显示已经修复:
(三)Node基线检查:
[root@k8s-worker1 kube-bench]# ./kube-bench --config-dir cfg/ --config cfg/config.yaml run --targets=node
检查11个通过,5个失败,7个告警,现在修改4.2.2这一条:
[FAIL] 4.2.2 Ensure that the --authorization-mode argument is not set to AlwaysAllow (Automated)
找到修改建议:
4.2.2 If using a Kubelet config file, edit the file to set authorization: mode to Webhook. If
using executable arguments, edit the kubelet service file
/lib/systemd/system/kubelet.service on each worker node and
set the below parameter in KUBELET_AUTHZ_ARGS variable.
--authorization-mode=Webhook
Based on your system, restart the kubelet service. For example:
systemctl daemon-reload
systemctl restart kubelet.service
编辑文件:vi /opt/kubernetes/cfg/kubelet.conf
[root@k8s-worker1 kube-bench]# systemctl daemon-reload
[root@k8s-worker1 kube-bench]# systemctl restart kubelet
再次运行,看到4.2.2已经检查通过:
(四)其他
还可以检查controlplane以及policies,由于我这里只有告警,没有失败项,因此就不再具体说明,命令分别如下:
1、检查controlplane
[root@k8s-master1 kube-bench]# ./kube-bench --config-dir cfg/ --config cfg/config.yaml run --targets=controlplane
2、检查policies
[root@k8s-master1 kube-bench]# ./kube-bench --config-dir cfg/ --config cfg/config.yaml run --targets=policies
四、总结
总的来说,kube-bench是一个非常好的工具,其大大简化了我们对于K8S部署后的基础环境安全检查,并提供了非常友好的修复建议,本文进行简要记录说明。