一、说明

       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,解压得到配置文件的目录及可执行程序:

基础网络安全-使用kube-bench进行K8S安全基线检查_cis

      在cfg目录下包含了cis各个版本的配置文件,其主配置文件为cfg/config.yaml,其中包括了master节点、worker 节点、controlplane等组件的配置文件路径,在基线检查的过程中,kube-bench会读取该配置文件配置的路径,如果安装的K8S方式不同,可能会有些差异,需要进行调整。

   在cfg/目录下各CIS版本目录中包括了具体检查对象的检查条款,例如:

基础网络安全-使用kube-bench进行K8S安全基线检查_cis_02

       包括了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

基础网络安全-使用kube-bench进行K8S安全基线检查_cis_03

检查发现5个通过,2个失败,这里以修复2.2为例,修改建议为在/usr/lib/systemd/system/etcd.service文件中添加参数,如下:

基础网络安全-使用kube-bench进行K8S安全基线检查_K8S安全基线_04

[root@k8s-master1 kube-bench]# systemctl daemon-reload

[root@k8s-master1 kube-bench]# systemctl restart etcd

再次运行检查工具,结果通过检查:

基础网络安全-使用kube-bench进行K8S安全基线检查_K8S安全基线_05

 (二)Master基线扫描:

[root@k8s-master1 kube-bench]# ./kube-bench --config-dir cfg/ --config ./cfg/config.yaml run --targets=master

基础网络安全-使用kube-bench进行K8S安全基线检查_K8S安全基线_06

基础网络安全-使用kube-bench进行K8S安全基线检查_K8S安全基线_07

基础网络安全-使用kube-bench进行K8S安全基线检查_基线_08

      29个检查通过项,23个失败项,13个告警项。检查发现,由于kube-bench基于CIS检查项,可以查看对应的配置文件,如果某个检查对象不存在,该条也会失败。由于我安装的K8S为1.6,我的配置文件路径为:opt/kubernetes/cfg/kube-apiserver.conf,与基线检查的默认路径不一样,因此需要修改一下kube-bench配置文件中apiserver的配置文件路径。

基础网络安全-使用kube-bench进行K8S安全基线检查_基线_09

        修改后再次运行检查命令,显示已经修复:

基础网络安全-使用kube-bench进行K8S安全基线检查_cis_10

(三)Node基线检查:

[root@k8s-worker1 kube-bench]# ./kube-bench --config-dir cfg/ --config cfg/config.yaml run --targets=node

基础网络安全-使用kube-bench进行K8S安全基线检查_cis_11

基础网络安全-使用kube-bench进行K8S安全基线检查_cis_12

检查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

基础网络安全-使用kube-bench进行K8S安全基线检查_kube-bench_13

[root@k8s-worker1 kube-bench]# systemctl daemon-reload

[root@k8s-worker1 kube-bench]# systemctl restart kubelet

再次运行,看到4.2.2已经检查通过:

基础网络安全-使用kube-bench进行K8S安全基线检查_kube-bench_14

(四)其他

       还可以检查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部署后的基础环境安全检查,并提供了非常友好的修复建议,本文进行简要记录说明。