Kube-Bench:一款针对Kubernete的安全检测工具
工具介绍
Kube-Bench是一款针对Kubernete的安全检测工具,从本质上来说,Kube-Bench是一个基于Go开发的应用程序,它可以帮助研究人员对部署的Kubernete进行安全检测,安全检测原则遵循CIS Kubernetes Benchmark。
测试规则需要通过YAML文件进行配置,因此我们可以轻松更新该工具的测试规则。
注意事项
- Kube-Bench尽可能地实现了CIS Kubernetes Benchmark,如果kube bench没有正确执行安全基准测试,请点击【https://www.cisecurity.org/】提交问题。
- Kubernete版本和CIS基准测试版本之间没有一对一的映射。请参阅CIS Kubernetes基准测试支持,以查看基准测试的不同版本包含哪些Kubernetes版本。
- Kube-Bench无法检查受管集群的主节点,例如GKE、EKS和AKS,因为Kube-Bench不能访问这些节点。不过,Kube-Bench在这些环境中仍然可以检查worker节点配置。
CIS Kubernetes Benchmark支持
Kube-Bench支持的Kubernete测试规则定义在CIS Kubernetes Benchmark之中:
CIS Kubernetes Benchmark |
kube-bench配置 |
Kubernetes版本 |
---|---|---|
1.3.0 |
cis-1.3 |
1.11-1.12 |
1.4.1 |
cis-1.4 |
1.13-1.14 |
1.5.0 |
cis-1.5 |
1.15- |
GKE 1.0.0 |
gke-1.0 |
GKE |
EKS 1.0.0 |
eks-1.0 |
EKS |
Red Hat OpenShift hardening guide |
rh-0.7 |
OCP 3.10-3.11 |
默认配置下,Kube-Bench将根据目标设备上运行的Kubernete版本来确定要运行的测试集,但请注意,Kube-Bench不会自动检测OpenShift和GKE。
工具下载
广大研究人员可以直接使用下列命令将项目源码客隆至本地:
git clone https://github.com/aquasecurity/kube-bench.git
- 可以选择在容器中运行Kube-Bench(跟主机共享PID命名空间);
- 在主机中运行安装了Kube-Bench的容器,然后直接在主机中运行Kube-Bench;
- 访问项目Releases页面下载并安装最新版本的源码,别忘了下载配置文件以及cfg目录下的测试文件;
- 从源码编译;
工具安装
在容器中安装
下列命令将帮助我们在Docker容器中安装Kube-Bench源码以及配置文件(源码编译仅针对Linux x86-x64,无法在macOS或Windows上运行):
docker run --rm -v `pwd`:/host aquasec/kube-bench:latest install
./kube-bench [master|node]
源码安装
首先在设备上安装并配置好Go环境,然后运行下列命令即可:
go get github.com/aquasecurity/kube-bench
cd $GOPATH/src/github.com/aquasecurity/kube-bench
go build -o kube-bench .
# See all supported options
./kube-bench --help
# Run all checks
./kube-bench
在容器中运行
你可以直接通过主机PID命名空间来在一个容器中安装并运行Kube-Bench,并加载配置文件所在目录,比如说“/etc”或“/var”:
docker run --pid=host -v /etc:/etc:ro -v /var:/var:ro -t aquasec/kube-bench:latest [master|node] --version 1.13
如果你不想使用“/opt/kube-bench/cfg/”下的默认配置,你还可以通过加载自定义的配置文件来使用它们:
docker run --pid=host -v /etc:/etc:ro -v /var:/var:ro -t -v path/to/my-config.yaml:/opt/kube-bench/cfg/config.yam -v $(which kubectl):/usr/local/mount-from-host/bin/kubectl -v ~/.kube:/.kube -e KUBECONFIG=/.kube/config aquasec/kube-bench:latest [master|node]
运行Kube-Bench
如果你想直接通过命令行工具运行Kube-Bench,你还需要root/sudo权限来访问所有的配置文件。
Kube-Bench将会根据检测到的节点类型以及Kubernete运行的集群版本来自动选择使用哪一个“controls”。这种行为可以通过定义master或node子命令以及“—version”命令行参数来进行修改。
Kube-Bench版本还可以通过“KUBE_BENCH_VERSION”环境变量来设置,“—version”参数将优先于“KUBE_BENCH_VERSION”环境变量生效。
比如说,我们可以使用Kube-Bench对一个master执行版本自动检测:
kube-bench master
或者,使用Kube-Bench针对Kubernete v1.13执行worker节点测试:
kube-bench node --version 1.13
kube-bench将会根据对应的CIS Benchmark版本来映射“—version”。不如说,如果你指定的是“—version 1.13”,此时映射的CIS Benchmark版本为“cis-1.14”。
或者说,你还可以指定“—benchmark”来运行指定的CIS Benchmark版本:
kube-bench node --benchmark cis-1.4
如果你想要指定CIS Benchmark的target,比如说master、node、etcd等,你可以运行“run —targets”子命令:
kube-bench --benchmark cis-1.4 run --targets master,node
或
kube-bench --benchmark cis-1.5 run --targets master,node,etcd,policies
下表中显示的是不同CIS Benchmark版本对应的有效目标:
CIS Benchmark |
Targets |
---|---|
cis-1.3 |
master, node |
cis-1.4 |
master, node |
cis-1.5 |
master, controlplane, node, etcd, policies |
gke-1.0 |
master, controlplane, node, etcd, policies, managedservices |
eks-1.0 |
node, policies, managedservices |
如果不指定目标,那么Kube-Bench将会根据CIS Benchmark版本自动检测合适的目标。
不同CIS Benchmark版本的“controls”可以在“cfg/”目录下找到对应的名称,比如说“cfg/cis-1.4”。
项目地址
Kube-Bench:https://github.com/aquasecurity/kube-bench
- 如何使用HAProxy实现Impala的负载均衡
- 解读GEO数据存放规律及下载,一文就够
- 从GEO数据库下载得到表达矩阵 一文就够
- 机器学习各类算法比较
- Kerberos环境下删除ZooKeeper服务注册信息问题分析
- 根据分组信息做差异分析- 这个一文不够的
- 如何使用Cloudera Manager启用YARN的HA
- 如何使用java代码通过JDBC连接Hive(附github源码)
- 差异分析得到的结果注释一文就够
- 如何使用Cloudera Manager禁用HDFS HA
- 转录组表达数据分析的一些可视化
- 如何使用java代码通过JDBC连接Impala(附Github源码)
- 点击此文,无需转发,即可下载上千个免费R包
- 如何使用Cloudera Manager启用HDFS的HA
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- SpringMVC源码学习(二) - DispatcherServlet和相关组件
- 微服务使用 Hystrix 实现服务降级
- SpringMVC源码学习(三) - 请求处理的流程
- Hadoop框架:集群模式下分布式环境搭建
- 微服务 Hystrix 实现服务熔断
- 微服务 Gateway 的基本配置
- 有赞营销逆向域的探索与实践
- RabbitMQ 启动报错:Error: unable to perform an operation on node ‘rabbit@***‘. Please see diagnostics...
- MySQL|查询字段数量多少对查询效率的影响
- 如果MySQL事务中发生了网络异常?
- MySQL|update字段为相同的值是否会记录binlog
- 微服务配置 Config 与消息总线
- 贷款违约预测-Task5 模型融合
- Python字符串
- MYSQL logstash 同步数据到es的几种方案对比以及每种方案数据丢失原因分析。