开源工具系列7:Kube-bench

news2024/11/16 21:35:31

导语

Kube-Bench 是一个基于Go开发的应用程序,属于 Kubernete 的安全检测的工具。它可以帮助研究人员对部署的 Kubernete 进行安全检测。

Kube-Bench 是什么

  • 从本质上来说,Kube-Bench 是一个基于Go开发的应用程序,属于 Kubernete 的安全检测的工具。它可以帮助研究人员对部署的 Kubernete 进行安全检测。
  • 可通过运行 CIS Kubernetes Benchmark 中记录的检查来检测,检测 Kubernetes 是否根据 CIS Kubernetes 基准中定义的安全最佳实践进行部署。
  • 测试规则需要通过 YAML 文件进行配置,因此我们可以轻松更新该工具的测试规则。

安装 Kube-Bench

如果您直接从命令行运行 kube-bench,您可能需要成为 root / sudo 才能访问所有配置文件。

默认情况下,kube-bench 会尝试自动检测 Kubernetes 的运行版本,并将其映射到相应的 CIS Benchmark 版本。例如,Kubernetes 1.15 版本映射到 CIS Benchmark 版本 cis-1.15,这是对 Kubernetes 1.15 有效的基准版本。

kube-bench 还尝试识别节点上运行的组件,并使用它来确定要运行哪些测试(例如,如果节点正在运行 API 服务器,则只运行主节点测试)。

注意

请注意 ,使用 kube-bench 无法检查托管集群的主节点,例如 GKE、EKS、AKS 和 ACK,因为人们无法访问这些节点,尽管仍然可以使用 kube-bench 检查 worker这些环境中的节点配置。

无法检查托管集群的主节点,例如 GKE、EKS、AKS 和 ACK,使用 kube-bench 作为一个无法访问这些节点,尽管仍然可以使用 kube-bench 检查这些环境中的工作节点配置。

运行 Kube-Bench

在容器内运行

您可以避免在主机上安装 kube-bench,方法是使用主机 PID 命名空间在容器内运行它,并挂载配置和其他文件位于主机上的 /etc 和 /var 目录,以便 kube-bench 可以检查它们的存在和权限。

docker run --pid=host -v /etc:/etc:ro -v /var:/var:ro -t docker.io/aquasec/kube-bench:latest --version 1.18

注意:测试需要路径中的 kubelet 或 kubectl 二进制文件才能自动检测 Kubernetes 版本。您可以通过 -v $(which kubectl):/usr/local/mount-from-host/bin/kubectl 来解决这个问题。您还需要传入 kubeconfig 凭据。例如:

docker run --pid=host -v /etc:/etc:ro -v /var:/var:ro -v $(which kubectl):/usr/local/mount-from-host/bin/kubectl -v ~/.kube:/.kube -e KUBECONFIG=/.kube/config -t docker.io/aquasec/kube-bench:latest

您可以使用自己的配置,方法是将它们安装在 /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.yaml -v $(which kubectl):/usr/local/mount-from-host/bin/kubectl -v ~/.kube:/.kube -e KUBECONFIG=/.kube/config docker.io/aquasec/kube-bench:latest

在 Kubernetes 集群中运行

您可以在 pod 内运行 kube-bench,但它需要访问主机的 PID 命名空间以检查正在运行的进程,以及访问主机上存储配置文件和其他文件的某些目录。

提供的 job.yaml 文件可用于将测试作为作业运行。例如:

$ kubectl apply -f job.yaml
job.batch/kube-bench created


$ kubectl get pods
NAME                      READY   STATUS              RESTARTS   AGE
kube-bench-j76s9   0/1     ContainerCreating   0          3s


# Wait for a few seconds for the job to complete
$ kubectl get pods
NAME                      READY   STATUS      RESTARTS   AGE
kube-bench-j76s9   0/1     Completed   0          11s


# The results are held in the pod's logs
kubectl logs kube-bench-j76s9
[INFO] 1 Master Node Security Configuration
[INFO] 1.1 API Server
...

要在主节点上运行测试,需要在该节点上安排 pod。这涉及在 pod 规范中设置 nodeSelector 和容忍度。

自 Kubernetes 1.11 以来,应用于主节点的默认标签发生了变化,因此如果您使用的是旧版本,则可能需要修改 nodeSelector 和 tolerations 才能在主节点上运行作业。

启动 Kube-Bench

有多种运行 Kube-Bench 的方法。您可以在 pod 内运行 Kube-Bench,但它需要访问主机的 PID 命名空间以检查正在运行的进程,以及访问主机上存储配置文件和其他文件的某些目录。

提供的 job.yaml 文件可用于将测试作为作业运行。例如:

$ kubectl apply -f job.yaml
job.batch/Kube-Bench created


$ kubectl get pods
NAME                      READY   STATUS              RESTARTS   AGE
Kube-Bench-j76s9   0/1     ContainerCreating   0          3s


# Wait for a few seconds for the job to complete
$ kubectl get pods
NAME                      READY   STATUS      RESTARTS   AGE
Kube-Bench-j76s9   0/1     Completed   0          11s


# The results are held in the pod's logs
kubectl logs Kube-Bench-j76s9
[INFO] 1 Master Node Security Configuration
[INFO] 1.1 API Server
...

获取 Kube-Bench 结果

$ kubectl apply -f job.yaml
job.batch/kube-bench created


$ kubectl get pods
NAME                      READY   STATUS              RESTARTS   AGE
kube-bench-j76s9   0/1     ContainerCreating   0          3s


# Wait for a few seconds for the job to complete
$ kubectl get pods
NAME                      READY   STATUS      RESTARTS   AGE
kube-bench-j76s9   0/1     Completed   0          11s

Kube-Bench 结果

# The results are held in the pod's logs
kubectl logs kube-bench-j76s9
[INFO] 1 Master Node Security Configuration
[INFO] 1.1 API Server
...

检测结果内容示例

注意事项

  1. Kube-Bench 尽可能接近地实现 CIS Kubernetes Benchmark 。如果 Kube-Bench 没有按照 Benchmark 中的描述正确执行安全测试,请在这里提出问题。要报告基准本身的问题(例如,您认为不合适的测试),请加入 CIS 社区。
  2. Kubernetes 版本和 CIS 基准测试版本之间没有一对一的映射。请参阅 CIS Kubernetes 基准支持,了解不同版本的基准涵盖了哪些 Kubernetes 版本。
  3. Kube-Bench 无法检查受管集群的主节点,例如 GKE、EKS 和 AKS,因为 Kube-Bench 不能访问这些节点。不过,Kube-Bench 在这些环境中仍然可以检查 worker 节点配置。
  4. 默认情况下,Kube-Bench 会根据机器上运行的 Kubernetes 版本来确定要运行的测试集。

Kube-Bench 项目信息

Github 项目地址:

https://github.com/aquasecurity/kube-bench

关于HummerRisk

HummerRisk 是开源的云原生安全平台,以非侵入的方式解决云原生的安全和治理问题,核心能力包括混合云的安全治理和K8S容器云安全检测。

Github 地址:https://github.com/HummerRisk/HummerRisk

Gitee 地址:https://gitee.com/hummercloud/HummerRisk

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/503684.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

免费版的mp3格式转换器有哪些?这三款软件帮你实现!

在娱乐文化越来越丰富的今天,人们越来越追求音乐、视频等娱乐方式,其中音乐作为一种能够治愈心灵的艺术形式备受欢迎。但要欣赏一首美妙的音乐,就需要我们自己去制作、编辑并转换其格式,以适应各种软件如MP3、MP4等格式。 方法一…

在 Python 中将 Tqdm 与 Asyncio 结合使用

动动发财的小手,点个赞吧! 简介 困扰 在 Python 中使用并发编程来提高效率对于数据科学家来说并不罕见。在后台观察各种子进程或并发线程以保持我的计算或 IO 绑定任务的顺序总是令人满意的。 但是还有一点困扰我的是,当我在后台并发处理成百…

数据结构篇五:队列

文章目录 前言1.队列1.1 队列的概念及结构1.2 队列的实现 2. 各功能的解析及实现2.1 队列的创建2.2 初始化队列2.3 队尾入队列2.4 队头出队列2.5 获取队头元素2.6 获取队尾元素2.7 队列中有效元素个数2.8 检查队列是否为空2.9 销毁队列 3.代码实现3.1 Queue.h3.2 Queue.c3.3 te…

JavaWeb ( 七 ) JSTL Tag标签

2.5.JSTL标签与EL表达式 2.5.1.EL表达式 EL表达式 : Expression Language 目的:为了使JSP写起来更加简单 格式:${expression} EL 提供“.“和“[ ]“两种运算符来存取数据。${user.name}, ${user[“name”] }支持算术操作符, 关系操作符, 逻辑操作符…

Python:Python进阶:内存管理机制

Python内存管理机制 1. 堆2. 栈3. 引用4. Python中可变对象和不可变对象有个问题:你可以好好思考下总结 Python内存管理程序是用 C/C写的,这里我们以 CPython解释器为例说明。 在Python 中 所有数据类型 包括:int dict str都是一个对象&#…

层次分析法及找工作问题实战

学习知识要实时简单回顾,我把学习的层次分析法简单梳理一下,方便入门与复习。 AHP 层次分析法(Analytic Hierarchy Process,简称 AHP)是对一些较为复杂、较为模糊的问题作出决策的简易方法,它特别适用于那…

C++类和对象上

专栏:C/C 个人主页:HaiFan. 专栏简介:本章为大家带来C类和对象相关内容。 类和对象 前言面向过程和面向对象类的引入类的定义对于类中成员的命名建议 类的访问限定符及封装访问限定符封装 类的作用域类的实例化如何计算类对象的大小this指针t…

Web自动化测试——XAPTH高级定位

XAPTH高级定位 一、xpath 基本概念二、xpath 使用场景三、xpath 相对定位的优点四、xpath 定位的调试方法五、xpath 基础语法(包含关系)六、xpath 顺序关系(索引)七、xpath 高级用法1、[last()]: 选取最后一个2、[属性名属性值 an…

ESP32设备驱动-PCF8575IO扩展器驱动

PCF8575IO扩展器驱动 文章目录 PCF8575IO扩展器驱动1、PCF8575介绍2、硬件准备3、软件准备4、驱动实现1、PCF8575介绍 PCF8575用于两线双向总线 (I2C) 的 16 位 I/O 扩展器专为 2.5-V 至 5.5-V VCC 操作而设计。 PCF8575 器件通过 I2C 接口 [串行时钟 (SCL)、串行数据 (SDA)]…

flask教程8:模板

文章目录 一、模板与自定义过滤器1 模板2 过滤器转义过滤器讲解 3自定义过滤器 二、表单1表单2表单扩展 三、创建表单模型类与模板使用3.1 表单模型类 四 、使用表单接受并检验参数五、模板宏的使用六 、宏定义在外部的使用七 :模板继承与包含继承包含include 八 、…

PVE 安装 windows10

pve 安装教程大家可以参考视频:pve 安装 pve 安装 Windows10 视频教程:pve 安装Windows10 在安装好 pve 后我们就可以进行虚拟机的安装了。当然我们可以自行决定是否有必要进行 win10 的安装。 准备工作 1. 下载 win10 镜像文件:https://…

数据结构与算法基础(王卓)(35):交换排序之快排【第二阶段:标准答案、初步发现问题】

目录 第二阶段:一分为二 整个快排算法的程序运行大框架: 做出的改动(和原来程序的区别): Project 1: PPT标准答案: Project 1小问题: Project 1还存在着一个巨大的问题: 具体问…

嵌入式软考备考_8 软件测试

软件测试 测试:在规定的条件下操作程序,以发现错误,对软件质量进行评估。 对象:程序,数据,文档。 目的:发现错误,看是否满足用户需求,发现错误产生的原因(…

汇编四、51单片机汇编指令2

1、机器码 (1)MOV A,#0x60对应机器码为7460 (2)7460对应二进制 0111 0100 0110 0000 0x74对应指令,0x60对应立即数。 (3)immediate data翻译为立即数。 (4)可人为查表把汇编转为机器码,也可通过编译器把汇编转为机器码。 2、汇编常见缩写 (1)Rn: n可…

leetcode-040-组合总和2

题目及测试 package pid040; /* 40. 组合总和 II 给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只能使用 一次 。注意:解集不能包含重复的组合…

Vue中使用EasyPlayer播放H265视频流

需求说明 需要在Vue2的项目中使用EasyPlayer进行H265视频流的播放。使用官方的最新版本加载H265会有问题。一直处于加载中… 实现步骤 引入easyplayer,这里最开始引入了最新版会有问题,因此引入的是3.3.12版本,可参照官方文档进行配置。 EasyPlayer示…

HBase整合Phoenix

HBase整合Phoenix 创建软件目录 mkdir -p /opt/soft cd /opt/soft下载软件 wget https://dlcdn.apache.org/phoenix/phoenix-5.1.3/phoenix-hbase-2.5-5.1.3-bin.tar.gz解压 hbase tar -zxvf phoenix-hbase-2.5-5.1.3-bin.tar.gz修改 hbase 目录名称 mv phoenix-hbase-2.5…

(初)进程概念

目录 认识冯诺依曼系统 操作系统(Operator System) 设计OS的目的: 定位: 如何理解管理: 总结: 系统调用和库函数概念: 进程 基本概念 : 描述进程PCB task_struct - PCB的一种 task_struct内容分…

编译安装最新的Linux系统内核

现在还有不少机器是CentOS8 Stream系统,虽然上了贼船,不影响用就是了。8的编译和7大同小异,只是踩了更多的坑在这里记录一下,或许会帮到看到的朋友。 安装编译环境 CentOS8安装必要的包 yum groupinstall "Development Too…

【P13】JMeter 常数吞吐量定时器(Constant Throughput Timer)

文章目录 1、基于计算吞吐量:只有此线程2、基于计算吞吐量:所有活动线程3、基于计算吞吐量:当前线程组中的所有活动线程4、基于计算吞吐量:所有活动线程(共享)5、基于计算吞吐量:当前线程组中的…