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

news2024/11/15 9:56:36

文章目录

  • 一、K8s安全机制
  • 二、kube-beach工具
    • 2.1 安装
    • 2.2 工具使用
      • 2.2.1 改成INFO状态
      • 2.2.2 改成pass状态
  • 三、kube-hunter工具
  • 四、Trivy镜像漏洞扫描工具
  • 五、kubesec检查YAML文件安全配置

一、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),是一个非盈利组织,致力为互联网提供免费的安全防御解决方案。
    • 官网
    • K8s CIS基准

下载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

在这里插入图片描述

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

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

相关文章

【Midjourney】Midjourney Prompt 提示词 ② ( 怀旧像素风 | 物体 A 被物体 B 包围 | 折纸艺术风格 )

文章目录 一、8-bit 16bit 提示词 - 怀旧像素风二、A out of B 提示词 - 物体 A 被物体 B 包围三、layered paper 提示词 - 折纸艺术风格 一、8-bit 16bit 提示词 - 怀旧像素风 使用 8-bit 16-bit 提示词 , 可以绘制出 像素游戏风格的图像 , 如下图所示 ; 该提示词适合创作与游…

Linux Web服务(HTTP HTML DNS)

DNS 域名解析 DNS负责将域名转换为IP地址。 详细的介绍在之前的博客中有详细记录。 这里回顾一下DNS的解析过程。 域名结构 主机名.子域.[二级域].顶级域.(根域) DNS 解析过程&#xff08;面试题&#xff09; 客户端 -> 本地缓存域名服务器 -> 根域服务器 -> 二级域服…

测试分析流程及输出项

测试分析 一、确认测试范围 根据测试项目的不同需求&#xff0c;有大致几类测试项目类型&#xff1a;商户平台功能测试、支付方式接入测试、架构调整类测试、后台优化测试、性能测试、基本功能自动化测试。 测试项目需要按照文档要求进行测试需求分析&#xff0c;并给出对应…

NIFI1.21.0最新版本安装_采用HTTP方式_搭建集群_实际操作---大数据之Nifi工作笔记0050

这里要提一嘴...看中文的,视频或者文档虽然学习会快一点,但是... 有的时候一些新的东西没有中文的,还是得看英文的...时间就了就好了,要不然解决不了问题 英文写的,凡是好东西,肯定是很详细的,并且就是为了让别人弄明白,做了大量解释,所以不用担心看不懂... 首先,把安装包,上…

Java的Arrays类的sort()方法(41)

目录 sort&#xff08;&#xff09;方法 1.sort&#xff08;&#xff09;方法的格式 2.使用sort&#xff08;&#xff09;方法时要导入的类 3.作用 4.作用的对象 5.注意 6.代码及结果 &#xff08;1&#xff09;代码 &#xff08;2&#xff09;结果 sort&#xff08;&…

redis【stream】:对redis流数据类型的详细介绍

目录 stream产生原因 stream的概念 stream底层实现 stream的常用指令 常用命令一览&#xff1a; xadd命令 xread命令 xlen命令 xrange命令 xrevrange命令 xtrim命令 xdel命令 xgroup命令 xinfo命令 xpending命令 xreadgroup命令 xack命令 xclaim命令 stream产…

集合的三种遍历方式

文章目录 目录 文章目录 一.迭代器遍历 二.增强for遍历 三. forEach方法 四. Lambda表达式 函数式接口: 函数式接口是指只有一个抽象方法的接口 为什么Lambda只能用于函数式接口 总结 前言 作者简介:最爱吃兽奶 座右铭:抱怨身处黑暗,不如提灯前行 内容介绍:今天给大家讲一下集合…

学完能拿下阿里23k的JMeter+Grafana+Influxdb搭建可视化性能测试监控平台

【背景说明】 使用jmeter进行性能测试时&#xff0c;工具自带的查看结果方式往往不够直观和明了&#xff0c;所以我们需要搭建一个可视化监控平台来完成结果监控&#xff0c;这里我们采用三种JMeterGrafanaInfluxdb的方法来完成平台搭建 【实现原理】 通过influxdb数据库存储…

Shell运维实战3-while、case、for、select

目录 case基本case 企业级案例 while 循环当型与直到后台运行while 实战 for & selectfor 循环方法linux 生成随机数select case 基本 请注意 case 使用后的闭合问题&#xff0c;开头 case&#xff0c;结尾 esac #! /bin/bashread -p "input your number:" ans…

【C++刷题集】-- day3

目录 选择题 单选 OR59 字符串中找出连续最长的数字串⭐ 【题目解析】 【解题思路】 JZ39 数组中出现次数超过一半的数字⭐ 【题目解析】 【解题思路1】 【解题思路2】 选择题 单选 1、以下程序的输出结果是 ( ) #include <stdio.h> int main() {char a[10] …

vite + vue3 + storybook + ts 搭建组件库记录

目标 只按需引入&#xff0c;不依赖babel-import-plugin 插件。第三方依赖都不打包。用原生fetch请求数据。仅支持esmodule。配置package.json type:"module" 搭建 根据storybook 官网文档&#xff0c;需要在已有的项目中运行 npx storybooklatest init 也就是事…

电源原理分析、波形分析、应力计算、回路布局

1、Flyback变换器工作模态分析&#xff1b; 2、Flyback关键波形分析&#xff1b; 3、RCD吸收电路设计及开关管应力&#xff1b; 4、从噪音回路看布线要点。 5、基于实际项目&#xff0c;原创反激开关电源视频教程曝光 Flyback 变换器模态分析 ​ ON&#xff1a;开关管导通&…

516. 最长回文子序列

516. 最长回文子序列 C代码&#xff1a;dp int longestPalindromeSubseq(char* s) {int n strlen(s);int dp[n][n];memset(dp, 0, sizeof(dp));for (int i 0; i < n; i) {dp[i][i] 1;}for (int i n - 1; i > 0; i--) {for (int j i 1; j < n; j) {if (s[i] s[…

2023最新CTF入门的正确姿势

前言 随着网络安全意识的增强&#xff0c;越来越多的人开始涉足网络安全领域&#xff0c;其中CTF比赛成为了重要的学习和竞赛平台。本人从事网络安全工作多年&#xff0c;也参加过大大小小的CTF比赛&#xff0c;今天就来详细介绍CTF的流程&#xff0c;以及需要具备的知识&…

【前端相关】elementui使用el-upload组件实现自定义上传

elementui使用el-upload组件实现自定义上传 一、问题描述二、实现方式三、实现步骤3.1 方式一&#xff1a;选择后自动上传3.2 方式二&#xff1a;选择图片后手动上传3.3 拓展&#xff1a;上传文件夹 四、服务器相关接口 一、问题描述 elmentui 中的upload默认的提交行为是通过…

[C++]哈希表实现,unordered_map\set封装

目录​​​​​​​ 前言&#xff1a; 1 哈希 1.1 为什么有哈希 1.2 哈希结构 1.3 哈希冲突 2 闭散列 2.1 闭散列结点结构和位置状态表示 2.2 哈希类结构 2.3 插入 2.4 查找 2.5 删除 3 开散列 3.1 哈希表结点结构 3.2 哈希表结构 3.3 插入 3.4 查找、删除 3.5…

Ubuntu/Debian/CentOS搭建Socks5代理一键脚本

说明 Socks5属于明文代理&#xff0c;不要用于科学上网&#xff0c;否则会被阻断端口&#xff0c;可用于正常的跳板使用&#xff1b; 比如SSH转发加速国外VPS的连接速度&#xff0c;特别是一些延迟高或者丢包高的VPS&#xff1b; 使用Socks5转发后SSH就可以快速稳定的连接了&a…

Java中的Replace和ReplaceAll的区别

replace和replaceAll是都是String类中提供的两种用于字符/字符串替换的方法&#xff0c;从字面意思理解&#xff0c;replace表示替换单个匹配项&#xff0c;而replaceAll表示替换所有匹配项&#xff1b;实际上并不是这样子的,replace和replaceAll都是替换所有匹配项,replace是非…

链式二叉树OJ题思路分享

⏩博主CSDN主页:杭电码农-NEO⏩   ⏩专栏分类:刷题分享⏪   ⏩代码仓库:NEO的学习日记⏩   &#x1f339;关注我&#x1faf5;带你刷更多C语言和数据结构的题!   &#x1f51d;&#x1f51d; 链式二叉树OJ题分享 1. 前言&#x1f6a9;2. 单值二叉树&#x1f6a9;2.1 审题…

macOS Ventura 13.5beta OpenCore黑苹果双引导分区原版镜像

镜像特点&#xff08;原文地址&#xff1a;http://www.imacosx.cn/113700.html&#xff0c;转载请注明出处&#xff09; 完全由黑果魏叔官方制作&#xff0c;针对各种机型进行默认配置&#xff0c;让黑苹果安装不再困难。系统镜像设置为双引导分区&#xff0c;全面去除clover引…