k8s进阶4——安全机制常用工具之kube-beach、kube-hunter、Trivy、kubesec

一、K8s安全机制

基本了解:

  • 我们在前面学习的安全控制RBAC就属于K8s安全机制中的一种,所谓安全机制只是一个概念,并非某个机制原理,就像一座城池,外面有护城河,有高高的围墙,进城门需要出示令牌,城里各个关卡还设有拦路的栅栏,等等,我们可以把K8s中的数据资源比作一个皇宫,要保护里面的数据就需要设置重重“关卡”,也就起到了安全保护作用,整个安全流程就可以看作K8s的安全机制。

K8s安全机制实现目标:

  • 保证容器与其所在宿主机的隔离。
  • 限制容器给基础设施或其他容器带来的干扰。
  • 最小权限原则,即合理限制所有组件的权限,确保组件只执行它被授权的行为,通过限制单个组件的能力来限制它的权限范围。
  • 明确组件间边界的划分。
  • 划分普通用户和管理员的角色。
  • 在必要时允许将管理员权限赋给普通用户。
  • 允许拥有Secret数据(Keys、Certs、Passwords)的应用在集群中运行。

K8s 的安全机制:

  • 集群安全:TLS证书认证、RBAC
  • Security Context:安全上下文,是限制pod和容器的行为,例如只读文件系统、特权、运行用户等。
  • Pod Security Policy:集群级的 Pod 安全策略,自动为集群内的 Pod 配置安全策略。
  • Sysctls:允许容器设置内核参数。
  • AppArmor:限制容器中应用对资源的访问权限。
  • Network Policies:控制集群中网络通信。
  • Seccomp:限制容器内进程的系统调用。
  • 也还有很多其他的插件也可以起到一定的安全防范作用,这里不一一列举,大家可以自行官网了解。

二、kube-beach工具

基本了解:

  • 互联网安全中心(CIS,Center for Internet Security),是一个非盈利组织,致力为互联网提供免费的安全防御解决方案。

下载CIS基准PDF文件步骤:

  1. 进入K8s CIS基准网址,找到K8S那一栏,随后就会让你填写邮件信息,给你邮件发送一个下载连接地址。
    在这里插入图片描述
  2. 进入下载地址,找到你想防控的对象,我们这里就找k8s。
    在这里插入图片描述
  3. 找最新版本下载即可。注意CIS基准文件即时是最新的,也有可能与K8s最新版本有区别,毕竟不是同一家公司维护,所以作为安全防范类的工具采集出来的结果也只是作为参考,并没有百分百的精确,但即使如此,作为普通运维来讲,也可以很大程度上杜绝一些问题。
  4. 我们可以下载pdf后,根据里面的基准来检查K8s集群配置,但内容量太大,一般会采用相关工具来完成这项工作,此时就出现了Kube-bench工具。
    在这里插入图片描述

Kube-bench工具是什么?

  • Kube-bench是容器安全厂商Aquq推出的工具,基于Go开发,以CIS K8s基准作为基础,来检查K8s是否安全部署。

  • 主要查找不安全的配置参数、敏感的文件权限、不安全的帐户或公开端口等等。

  • 安装包下载地址

2.1 安装

Kube-bench与k8s版本支持:
在这里插入图片描述

1.解压安装包,移动目录。

tar zxvf kube-bench_0.6.3_linux_amd64.tar.gz 
mkdir /etc/kube-bench # 创建默认配置文件路径
mv cfg /etc/kube-bench/cfg
mv kube-bench /usr/bin/

2.使用kube-bench run命令验证。
在这里插入图片描述

2.2 工具使用

工具用法:

  1. 执行命令后,会逐个检查安全配置并输出修复方案及汇总信息输出。
  2. 根据扫出来的建议针对性的修改,当然并非工具给的建议就要做出修改,毕竟这个工具是根据下载PDF里的条例挨个扫描,也存在版本跟k8s版本不一致的情况。
    • 若结果与实际不符合,可修改成【INFO】状态,在插件目录下修改对应检查的对象文件,在要修改的条目下增加type参数。
    • 若按照结果进行修改,根据提示信息修改对应组件的yaml文件,添加参数后会自动重建该静态Pod即可。

常用参数:

  • -s 或 --targets:指定要基础测试的目标,这个目标需要匹配 cfg/< version >中的文件名称,已有目标:master, controlplane, node, etcd, policies。
    在这里插入图片描述
  • –version:指定k8s版本,如果未指定会自动检测。
  • –benchmark:手动指定CIS基准版本,不能与–version一起使用。

信息等级:

  • [PASS]:测试通过。
  • [FAIL]:测试未通过,重点关注,在测试结果会给出修复建议。
  • [WARN]:警告,可做了解。
  • [INFO]:信息。

测试项目配置文件格式信息:

  • id:编号。
  • text:提示的文本。
  • audit:测试方法。
  • tests:测试项目。
  • remediation:修复方案。
  • scored:如果为true,kube-bench无法正常测试,则会生成FAIL;如果为false,即时无法正常测试,也会生成WARN。
  • type:如果为manual,则会生成WARN;如果为skip,则会生成INFO。常常用在检查出来的信息虽是警告级别要做修改,但实际情况不需要修改,此时可以添加这个参数就会跳过检测,输出为INFO级别。
    在这里插入图片描述

注意事项:

  1. 此工具只是用来检查k8s组件配置信息是否正确,衡量标准是根据CIS上下载的pdf文件条目挨个检查,可能存在与k8s当前组件版本不一致导致检查有些出入。比如检查出来某个组件参数需要关闭,其实还是上个版本的,k8s最新版本该组件参数已被启用,这种情况就需要挨个检查。
  2. 不要随意修改组件参数,尤其是线上环境更不能直接修改,修改前需要掂量改后的结果。

1.检查master配置。

[root@k8s-master1 ~]# kube-bench run -s master

在这里插入图片描述

2.将检查出来的 [FAIL] 问题统一粘贴出来,这里的编号与下载的pdf文件里编号是一一对应的。

#1、建议etcd服务的配置文件权限设置成644,或者更为严谨。
[FAIL] 1.1.7 Ensure that the etcd pod specification file permissions are set to 644 or more restrictive (Automated)
#2、建议etcd服务的配置文件属主属组为root:root。
[FAIL] 1.1.8 Ensure that the etcd pod specification file ownership is set to root:root (Automated)
#3、建议etcd的数据目录权限设置为700;属主属组设置为etcd:etcd。
[FAIL] 1.1.11 Ensure that the etcd data directory permissions are set to 700 or more restrictive (Automated)
[FAIL] 1.1.12 Ensure that the etcd data directory ownership is set to etcd:etcd (Automated)

#4、k8s连接kubelet证书配置,可忽略。
[FAIL] 1.2.6 Ensure that the --kubelet-certificate-authority argument is set as appropriate (Automated)
#5、pod入口插件,检查pod创建是否允许规则,已弃用,有个替代品。
[FAIL] 1.2.16 Ensure that the admission control plugin PodSecurityPolicy is set (Automated)
#6、kube-apiserver之前监听6443、8080端口,但8080是非安全端口,安全等级低,设置为0不再默认监听8080,该参数已弃用。
[FAIL] 1.2.19 Ensure that the --insecure-port argument is set to 0 (Automated)
#7、api-server性能分析接口,很多情况下不需要用,默认开启,这里建议关闭掉。
[FAIL] 1.2.21 Ensure that the --profiling argument is set to false (Automated)

#8、审计日志相关。
[FAIL] 1.2.22 Ensure that the --audit-log-path argument is set (Automated)
[FAIL] 1.2.23 Ensure that the --audit-log-maxage argument is set to 30 or as appropriate (Automated)
[FAIL] 1.2.24 Ensure that the --audit-log-maxbackup argument is set to 10 or as appropriate (Automated)
[FAIL] 1.2.25 Ensure that the --audit-log-maxsize argument is set to 100 or as appropriate (Automated)

#9、控制器性能分析接口,建议关闭。
[FAIL] 1.3.2 Ensure that the --profiling argument is set to false (Automated)
#10、调度器该参数已弃用。
[FAIL] 1.4.1 Ensure that the --profiling argument is set to false (Automated)

2.2.1 改成INFO状态

1.找到要修改的条目,这里检查1.1.7条目内容,可以看到实际的权限没有问题,所以这里的建议可以忽略。
在这里插入图片描述
2.进入/etc/kube-bench/cfg/cis-1.6目录,我这里是cis-1.6这个版本,大家根据自己的实际情况来。找到文件里的对应编号。

#添加此行。
type: skip

在这里插入图片描述
3.再次执行检查命令,此时该词条的状态已经变为 [INFO] 状态。
在这里插入图片描述

2.2.2 改成pass状态

1.比如我这里需要修改1.2.21条目的状态为 [PASS],在k8s官网查找对应参数的用法,kube-apiserver接口官方地址,是需要把api-server的这个参数改成false。
在这里插入图片描述

在这里插入图片描述
2.还需要把1.3.2条目的状态为 [PASS],是需要把kube-controller-manager控制器的参数修改成false。kube-controller-manager官网接口
在这里插入图片描述

在这里插入图片描述
3.修改kube-apiserver和kube-conontroller-manager两个组件的yaml文件,添加此参数配置,而kube-scheduler调度器已启用,可以忽略。
在这里插入图片描述

在这里插入图片描述
4.静态Pod文件被修改,会自动重建该组件pod,再次检查安全配置就会显示为 【PASS】状态。
在这里插入图片描述

三、kube-hunter工具

  • 是一个 Python 工具,查找Kubernetes集群中的安全漏洞,一般是放在K8s集群之外的机器上执行扫描。
  • 有三种安装方式,二进制、容器、Pod,这里使用docker来安装。
  • 有三种扫描方式:
    1. 远程扫描:扫描一个或多个特定的ip或DNS名称
    2. 接口扫描:扫描本地网络所有接口上的子网
    3. IP范围扫描:扫描给定的IP范围

1.拉取镜像安装。

docker run -it --rm --network host aquasec/kube-hunter

在这里插入图片描述
2.查看结果。
在这里插入图片描述
3.查看漏洞解决方案。
在这里插入图片描述
在这里插入图片描述
4.端口扫描。

docker run --rm aquasec/kube-hunter   --interface

在这里插入图片描述
5.网段扫描。

docker run --rm aquasec/kube-hunter --cidr 192.168.130.0/24

在这里插入图片描述

四、Trivy镜像漏洞扫描工具

基本概念:

  • Trivy:是一种用于容器镜像、文件系统、Git仓库的漏洞扫描工具。发现目标软件存在的漏洞。
  • Trivy易于使用,只需安装二进制文件即可进行扫描,方便集成CI系统。
  • 项目地址

注意事项:

  1. 并非所有漏洞都需要修复,有的不好修复,只有对外提供服务时用到某个库才可会被黑客利用。
  2. 可以通过升级库的版本、打补丁方式修复漏洞。

1.下载安装包,推荐使用二进制安装,随后解压可以直接使用。
在这里插入图片描述
2.拉取镜像漏洞缓存库。

[root@k8s-master1 trivy]# ./trivy image nginx

在这里插入图片描述
3.过滤等级查看。

[root@k8s-master1 trivy]# ./trivy image nginx -s high

在这里插入图片描述

4.json格式输出到文件。

[root@k8s-master1 trivy]# ./trivy image nginx -s high -f json -o qingjun.log

在这里插入图片描述

五、kubesec检查YAML文件安全配置

基本概念:

  • kubesec:是一个针对K8s资源清单文件进行安全配置评估的工具,根据安全配置最佳实践来验证并给出建议。
  • 项目地址

1.下载二进制包解压使用。

[root@k8s-master1 trivy]# tar zxf kubesec_linux_amd64.tar.gz 

2.扫描一个deploy.yaml文件,给出相关安全配置建议。

[root@k8s-master1 trivy]# ./kubesec scan deploy.yaml 

在这里插入图片描述
3.使用容器环境执行检查。

[root@k8s-master1 opa]# docker run -i kubesec/kubesec scan /dev/stdin < deploy.yaml

在这里插入图片描述
4.也可以把它与CICD集成使用,实现远程调用。

#可以先设置成http服务,直接启动调用。
[root@k8s-master1 trivy]# ./kubesec  http 8080 &

#运行一个容器。
[root@k8s-master1 opa]# docker run -d --name=my-kubesec  -p 8888:8080 kubesec/kubesec http 8080

#远程调用kubesec检查本地的yaml文件安全配置。
[root@k8s-master1 opa]# curl -sSX POST --data-binary @gatekeeper.yaml http://192.168.130.145:8888/scan

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

百慕卿君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值