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

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

文章目录

一、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工具

基本了解

  • 互联网安全中心CISCenter 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如果为truekube-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

在这里插入图片描述

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: k8s

“k8s进阶4——安全机制常用工具之kube-beach、kube-hunter、Trivy、kubesec” 的相关文章