[K8s Security] 基于Kube-Bench(CIS Benchmark)的自动化安全基线扫描
[K8s Security] 基于Kube-Bench(CIS Benchmark)的自动化安全基线扫描简介关于CIS“CIS(Center for Internet Security) 是一个非盈利性实体,其任务是“确定、开发、验证、升级和维持针对网络防御的最佳做法解决方案”。 它借鉴了来自世界各地政府、企业和学术界网络安全及 IT 专业人员的专业知识。 为了制定标准和最佳做法(包括 CIS 基
简介
关于CIS
“CIS(Center for Internet Security) 是一个非盈利性实体,其任务是“确定、开发、验证、升级和维持针对网络防御的最佳做法解决方案”。 它借鉴了来自世界各地政府、企业和学术界网络安全及 IT 专业人员的专业知识。 为了制定标准和最佳做法(包括 CIS 基准、控制措施和强化映像),他们遵循一致的决策制定模型。
CIS 基准是安全配置系统的配置基线和最佳做法。 每则指导建议都参考了一个或多个 CIS 控制措施,可帮助组织改进其网络防御能力。 CIS 控制措施与许多已建立的标准和规章框架对应,包括 NIST 网络安全框架 (CSF) 和 NIST SP 800-53、ISO 27000 系列标准、PCI DSS、HIPAA 等等。
每个基准都经历了两个阶段的共识评审。 第一个阶段属于初始开发过程,专家聚集在一起,讨论、创建和测试工作草案,直到就基准达成一致。 在第二阶段中,在发布基准后,共识团队将审核 Internet 社区中的反馈,以纳入基准中。”
对于安全从业人员来说,CIS提供了很好地最佳实践模型和基准,几乎涵盖了IT基础架构中的方方面面,包括常见的,Benchmark for Windows, Benchmark for Linux, Benchmark for Oracle, Benchmark for Cisco, Benchmark for Docker, Benchmark for Kubernetes, 等等(https://www.cisecurity.org/cis-benchmarks/)。
很多漏洞扫描工具也有集成基于CIS Benchmark 的扫描基线,以满足IT安全人员日常审计的需求。
关于Kube-Bench
Kube-Bench是Aqua发布的一款开源的K8s安全审计工具,基于CIS Benchmark for Kubernetes用Go语言开发。该工具会检查你是否根据CIS定义的Kubernetes安全基线部署了Kubernetes集群。(https://github.com/aquasecurity/kube-bench)。Kube-Bench的更新版本并不与Kubernetes的版本号一一对应,所以在部署Kube-bench前你要了解你要审计的k8s环境的具体版本是什么。
Kube-bench 安装
有四种方法安装Kube-Bench
1.在容器中运行kube-bench
2.在宿主机上运行一个单独的容器安装kube-bench
3.下载release文件
4.源码编译安装
本文中笔者选用第二种安装方法。
安装命令: docker run --rm -v pwd
:/host aquasec/kube-bench:latest install
[root@master ~]# mkdir /opt/kube-bench && cd /opt/kube-bench
[root@master kube-bench]# docker run --rm -v `pwd`:/host aquasec/kube-bench:latest install
等待安装,镜像大小约19M
[root@master kube-bench]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
aquasec/kube-bench latest 65a956464fd7 5 days ago 19.3MB
安装完成后,会在安装路径下出现一个kube-bench可执行文件
[root@master kube-bench]# ll
total 11126
drwxr-xr-x 8 root root 1024 Aug 18 15:36 cfg
-rwxr-xr-x 1 root root 11391798 Aug 18 15:36 kube-bench
常用命令:
[root@master kube-bench]# ./kube-bench -help ---->查看使用帮助
[root@master kube-bench]# ./kube-bench master ---->扫描master节点
[root@master kube-bench]# ./kube-bench node ---->扫描node节点
[root@master kube-bench]# ./kube-bench node --version 1.17 ---->扫描node节点,并指定k8s版本
配置自动化扫描
因为kube-bench工具进行k8s扫描操作比较简单,所以可以使用shell脚本来实现定期定时的自动化k8s集群安全基线扫描。并且将扫描报告以邮件方式发送出来。
前期准备:
1.K8s集群的各节点已经安装了kube-bench
2.各节点可以免密ssh登录(可以用ssh-keygen实现)
脚本如下:具体路径可以按需更改
root@master kube-bench]#cat k8s_scan.sh
#! /bin/bash
## get date
strDate=$( date +%Y-%m-%d )
## get k8s cluster machines info
hostlist=($( kubectl get nodes --show-labels | awk 'NR == 1 {next} {print $1}') )
##create report path
mkdir -p /tmp/Kube-bench-scanreports/$strDate
path=/tmp/Kube-bench-scanreports/$strDate
##get currenthost
curhost=$( hostname )
## run kube-bench scan for each node
i=0
for host in ${hostlist[@]}
do
hostname=${hostlist[i]}
role=$( kubectl get nodes $hostname --show-labels | awk '{getline}{print $3}' )
{
if [ $role == "worker" ]
then
r="node"
ssh root@$hostname -tt << EOF
mkdir -p /tmp/Kube-bench-scanreports/$strDate/
cd /opt/kube-bench
./kube-bench $r > $path/K8s-scanreport-node-$hostname-$strDate.csv
scp $path/K8s-scanreport-node-$hostname-$strDate.csv root@$curhost:$path/
exit
EOF
elif [ $role == "master" ]
then
ssh root@$hostname -tt << EOF
mkdir -p /tmp/Kube-bench-scanreports/$strDate/
cd /opt/kube-bench
./kube-bench $role > $path/K8s-scanreport-master-$hostname-$strDate.csv
scp $path/K8s-scanreport-master-$hostname-$strDate.csv root@$curhost:$path/
exit
EOF
fi
i=$i+1
}
done
echo "Kubernetes Security Baseline Scan Report for below cluster:" > $path/K8sstatus
kubectl get nodes -o wide >> $path/K8sstatus
##send email with reports as attachment
cd $path
cat $path/K8sstatus | mail -s "Kubernetes Security Baseline Scan Report @$strDate" $( printf -- '-a %q ' *.csv ) -c bolide24@test.com bolide25@test.cn
然后可以使用crontab 设置定时任务跑脚本,定期发送报告邮件出来
收到邮件的格式:
写在后边:
目前一些Kubernetes的管理平台 Rancher, Kubeoperator等已经支持集成kube-bench,如果已经在使用这些平台的话也可以使用平台上的相应功能来完成扫描。
更多推荐
所有评论(0)