云原生安全检测器 Narrows(CNSI)的部署和使用

news2024/11/17 23:42:36

近日, 云原生安全检测器 Narrows(Cloud Native Security Inspector,简称CNSI)发布了0.2.0版本。
(https://github.com/vmware-tanzu/cloud-native-security-inspector)

此项目旨在对K8s集群中的工作负载进行动态(运行时)的安全检测,并报告安全问题,从而弥补了现有静态安全扫描技术的不足之处。

Harbor等云原生镜像仓库提供了静态扫描能力,例如镜像CVE扫描,覆盖的范围主要是镜像的应用层。当镜像被部署到K8s集群后,在不同的配置条件下可能会出现新的漏洞。Narrows可以探测到这部分漏洞并报告给用户,而且可以采取相应的措施(如网络隔离等)减少漏洞的影响。

本文的目的在于使用一个简单的Demo来指导用户在自己的K8s集群中快速部署Narrows(CNSI)。我们将使用Minikube来部署一个简单的K8s集群,部署一个Prometheus工作荷载,并使用CNSI来检查这个Prometheus负载的风险。

前置条件

1.需要准备一台Linux机器,本文中我们使用了一台“CentOS Linux release 7.9.2009 (Core)”型号的机器。

2.我们的机器拥有32核CPU和64GB内存,此配置不代表实现demo的最小配置。

3.在机器上需要安装好Docker, 参考https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-centos-7

4.需要已经有一个版本为2.5.0以上的Harbor(https://goharbor.io/)实例。并且已经配置好Harbor的安全扫描功能(https://goharbor.io/docs/main/administration/vulnerability-scanning/)。CNSI会利用Harbor的安全扫描功能。

使用Minikube准备K8s集群

部署一个简单的K8s集群有多种方式,例如使用Kind或者使用kubeadm。在本文中我们使用Minikube来部署一个单节点的K8s集群。

执行下面三行命令,即可在Linux机器上部署K8s v1.23.0。

在这里插入图片描述

验证K8s集群部署成功:

在这里插入图片描述

在K8s集群上部署CNSI

安装依赖程序

执行以下四行命令来安装git, wget, gcc和helm:

在这里插入图片描述

在K8s集群上部署CNSI

执行以下三行命令来部署CNSI:

在这里插入图片描述

“./deploy.sh install” 命令会使用helm在K8s集群上帮你自动部署一个Open Search服务(https://opensearch.org/)。CNSI支持使用Open Search或Elastic Search(https://www.elastic.co/)来存储安全检查报告。

在生产环境中用户需要自己准备Open Search或Elastic Search服务。“deploy.sh”脚本帮助安装的Open Search仅限于POC使用。

验证CNSI部署成功:

在这里插入图片描述

验证Open Search部署成功:

在这里插入图片描述

现在我们可以通过节点IP:30150的来访问CNSI的Portal服务了。因为我们将Portal服务部署成了NodePort的形式。Portal是CNSI的前端界面。

搭建Prometheus工作负载

在试用CNSI之前,首先我们要有一个待扫描的工作负载。

这里我们使用VMware Application Catalog认证的Prometheus,执行两行命令即可安装到prometheus命名空间下:

在这里插入图片描述

验证安装成功:

在这里插入图片描述

使用CNSI检查工作负载运行时的漏洞

CNSI的0.2版本支持三种扫描器来检查用户负载:

1.镜像扫描器: 用来扫描工作负载镜像中的CVE,基于Harbor的漏洞扫描功能(https://goharbor.io/docs/main/administration/vulnerability-scanning/)

2.Kubebench扫描器:用来扫描整个K8s集群中的配置问题,基于开源项目kube-bench实现的。(https://github.com/aquasecurity/kube-bench)

3.风险扫描器:基于镜像扫描器的报告,以及工作负载的配置来进一步分析是否有潜在的安全隐患。功能代码由雅客云团队贡献(https://arksec.cn)

为了让CNSI能够和Harbor实例建立网络连接,我们需要创建一个设置(Setting)来进行一写配置。

创建设置

在本机的浏览器上输入【K8s节点IP:30150】,将会看到CNSI的前端页面:

在这里插入图片描述

点击新建Secret,来保存Harbor的用户名和密码。我们的例子中用户名和密码是Harbor默认的admin,Harbor12345。

然后点击“设置”,按照截图来配置必添项。其中的执行周期是指Harbor的静态镜像扫描器工作的周期。

在这里插入图片描述

点击”Next“,接下来是配置已知镜像仓库。这一部分是可选的,如果配置了,我们就可以不需要把待扫描的工作负载的镜像上传到Harbor上。假设镜像来自于dockerhub,那如果在这里配置dockerhub为已知镜像仓库的话,CNSI在扫描工作负载的时候,Harbor会从dockerhub自动复制一份镜像到自己这里。

我们选择配置一个已知镜像仓库,和Harbor类似的是,在这之前需要创建一个dockerhub的Secret。

在这里插入图片描述

点击”Next“,跳过Cache的步骤,点击“创建”完成配置的创建。

验证配置状态为“Healthy”:

在这里插入图片描述

创建策略

配置定义了CNSI和一些外部组件的通信信息,而策略会定义CNSI内部的扫描器的工作方式。

在这里插入图片描述

在策略中需要定义扫描器扫描的周期,和配置进行绑定(未来会支持多配置)。以及配置导出数据的端点,这里我们使用的是前面部署好的OpenSearch。

单击“Next”,接下来是配置“基线”,这个配置表示高于何种基准的漏洞需要被CNSI报告出来。这里我们为了展示更多的漏洞,选择“Medium”。

为了扫描到我们部署的Prometheus工作负载,我们还需要填写prometheus这个命名空间的标签,如下图所示:

在这里插入图片描述

对于检查结果配置,目前不需要进行改动。“评估配置”是指是否在K8s集群中留下一些镜像扫描报告以及报告存活的时间,这部分未来会被取消并直接将报告发送到例如OpenSearch这样的终端。“动作”是指发现高于“基线”的漏洞之后CNSI做出的反应,目前只支持隔离负载。

隔离负载是指CNSI会在K8s上面自动创建一个network policy资源,这个资源会对访问Prometheus这个命名空间的请求采取“deny-all”的处理,等问题解决之后,例如升级到一个没有风险的镜像,这个隔离措施会被撤回。

在这里插入图片描述

点击“创建”,来创建这样一个policy,因为我们时间间隔选的是3分钟一次,很快就会看到报告。

查看检查报告

镜像扫描报告

可以查看镜像有漏洞的容器数量的变化趋势。

在这里插入图片描述

点开其中一个历史报告,可以查看更具体的信息,例如每一个工作负载是否存在镜像扫描漏洞:

在这里插入图片描述

点开一个工作负载,可以查看更加详细的镜像扫描结果。

在这里插入图片描述

当镜像扫描报告的结果是某个工作负载存在CVE问题时,相应的pod会被隔离,其原理是cnsi会自动创建一个networkpolicy资源。

在这里插入图片描述

在这里插入图片描述

这个networkpolicy会阻止任何通过标签“goharbor.io/controller=CNSI,goharbor.io/inspection=risk”找到的pod的网络流量, 即,以下这些pod:

在这里插入图片描述

kubebench报告

Kubebench报告的原理是,把集群节点上的K8s相关的一些配置文件挂载到一个cronjob pod中,在此pod中完成对这些文件的检查,并上传结果到OpenSearch/ElasticSearch。

UI从OpenSearch/ElasticSearch上拉取数据并进行展示。

在这里插入图片描述

上面的五张饼图代表五类K8s配置问题。这些问题需要对多节点进行检查,例如"Worker node security config"需要检查集群中的所有worker node。所有的检查报告会出现在下方列表中。而饼图取的始终是一类K8s问题的最新的一次检查(可能是随机的一个node)。

如果关心某个节点的检查结果,可以根据“节点名称”这一列的提示,选择感兴趣的一个节点,点进去查看细节:

在这里插入图片描述

我们去了“Control Plane Security Configuration”这一类问题作为例子。可以看到这一类问题又分为四个子类别,下方列表中可以看到四种问题的存在数量。

点开一个子类别,可以进一步查看细节:

在这里插入图片描述

Kubebench扫描器是基于CIS Kubernetes Benchmark(https://www.cisecurity.org/benchmark/kubernetes/)实现的扫描器。

风险扫描报告

风险扫描报告首先提取镜像扫描报告的内容,然后从集群中获取每个镜像部署的方式,并计算出现有镜像CVE是否有可能存在更大的潜在隐患。

首先可以看到总风险数量的时间变化趋势:

在这里插入图片描述

点开一个报告,可以看到风险数量在不同的pod中的分布情况:

在这里插入图片描述

进一步点开一个pod的详细情况:

在这里插入图片描述

可以看到各种风险点。这里面包含镜像扫描器扫描出来的比较严重的问题(>= Medium),严重程度分数会是从1-3,1代表Meduim,2代表High,3代表Critical。

此外,CNSI还会看pod所属的工作负载是否有相应的K8s服务在集群中,如果有的话,那这种配置可能会提高某些CVE的风险度。这类潜在风向的严重程度分数将会是2-5,2代表Low,3代表Medium,4代表High,5代表Critical。

查看集群的安全状态

在0.2.0版本中,这一部分UI完全是关于镜像扫描报告。

集群视图可以帮我们查看集群中有多少不合规的工作负载,以及他们在不同命名空间的分布情况。

在这里插入图片描述

在这里插入图片描述

命名空间视图可以帮我们查看没个命名空间有哪些不合规的工作负载,以及他们在不同类型工作负载中的分布情况。

在这里插入图片描述
在这里插入图片描述

工作负载视图就是把所有不合规的工作负载列出来:

在这里插入图片描述

用户可以点任意一个工作负载查看详情。

总结

以上就是CNSI项目0.2.0的安装演示和功能简介。欢迎下载并使用体验,如果有任何宝贵的意见,请通过GitHub issue:https://github.com/vmware-tanzu/cloud-native-security-inspector/issues 提出。

同时也欢迎对这个开源项目进行贡献。

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

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

相关文章

分布式文件管理系统(MinIO)

1.去中心化,每个点是对等的关系,通过Ngix对负载做均衡工作。 好处: 能够避免单点故障,将多块硬盘组成一个对象存储服务。 2. 使用纠删编码技术来保护数据,是一种回复丢失和损坏的数据的数学算法,他将数据分…

小红书用户画像 | 小红书数据平台

小红书的用户画像是小红书品牌营销的必备技能,也是小红书推广种草的一个重要前提。通过对小红书用户画像进行分析,对品牌进行精准营销,实现更高的流量转化。 2022小红书粉丝人群画像 千瓜数据在2022年发布的千瓜活跃用户画像趋势报告中分析了…

Hive---安装教程

Hive安装教程 Hive属于Hadoop生态圈,所以Hive必须运行在Hadoop上 文章目录Hive安装教程上传安装包解压并且更名修改 /etc/profile创建hive-site.xml将mysql的jar包放入Hive库中开启刷新配置文件hadoop开启mysql初始化启动hive上传安装包 将安装包上传到/opt/insta…

一文搞懂Docker容器里进程的 pid 是如何申请出来的?

如果大家有过在容器中执行 ps 命令的经验,都会知道在容器中的进程的 pid 一般是比较小的。例如下面我的这个例子。 # ps -ef PID USER TIME COMMAND1 root 0:00 ./demo-ie13 root 0:00 /bin/bash21 root 0:00 ps -ef 不知道大家是否和我一样…

始于日志,不止于日志,Elastic Stack全面介绍

1、Elastic Stack是什么? 说Elastic Stack之前,先说一下ELK Stack。这个词相信很多人都是耳熟能详的,作为一个著名的日志系统解决方案,应用非常广泛。 “ELK”是三个开源项目的首字母缩写词:Elasticsearch、Logstash…

第五章.与学习相关技巧—Batch Normalization

第五章.与学习相关技巧 5.3 Batch Normalization Batch Norm以进行学习时的mini_batch为单位,按mini_batch进行正则化,具体而言,就是进行使数据分布的均值为0,方差为1的正则化。Batch Norm是调整各层激活值的分布使其拥有适当的广…

进程组和用处

进程组:一个或多个进程的集合,进程组id是一个正整数。组长进程:进程组id 进程id组长进程可以创建一个进程组,创建该进程组的进程,终止了,只要进程组有一个进程存在,进程组就存在,与…

卷积神经网络(CNN)

目录The Basic Usage of CNNPadding(填充)Weights(权重)PoolingThe Basic Usage of CNN What are Convolutional Neural Networks? They’re basically just neural networks that use Convolutional layers(卷积层…

家政服务小程序实战教程13-接入客服

小程序在微信里使用,以其无需安装随用随走为特点。但是有个问题是,如果提供商品或者服务的,用户如果有问题往往希望平台的运营方给出专业的解答。为了满足这类需求,就需要我们提供客服接入的功能,用户可以点击客服图标…

Linux使用定时任务监控java进程并拉起

需求描述: 设计一个脚本,通过Linux定时任务,每分钟执行一次,监控jar包进程是否存在,存在则不做动作,不存在则重新拉起jar包程序。 定时任务配置: */1 * * * * bash -x /root/myfile/jars/che…

stk 根据六根数文件生成卫星轨迹(一)

先简单介绍下上面的参数。 Propagator预报轨道模型。 TwoBody为二体(开普勒运动模型)。HPOP为高精度轨道模型。目前只用到这两个。 下图为六根数参数 Orbit Epoch:为根数时间(UTC) Semimajor Axis:长半…

软考高项——第五章进度管理

范围管理进度管理总线索规划进度管理定义活动活动排序估算活动资源估算活动时间制定进度管理计划控制进度进度管理总线索 进度管理的总线索包括: 1)规划进度管理 2)定义活动 3)活动排序 4)估算活动资源 5)…

pandas基本操作

df.head()/tail() 查看头/尾5条数据;df.info 查看表格简明概要;df.dtypes 查看字段数据类型;df.index 查看表格索引;df.columns 查看表格列名;df.values 以array形式返回指定数据的取值;list(dt.groupby(&q…

vue2 使用 cesium 篇

vue2 使用 cesium 篇 今天好好写一篇哈,之前写的半死不活的。首先说明:这篇博文是我边做边写的,小白也是,实现效果会同时发布截图,如果没有实现也会说明,仅仅作为技术积累,选择性分享&#xff0…

远程管理时代,还得是智能化PDU才靠得住!

在如今这个信息技术高速发展的时代,数据中心IDC机房服务器数量与日俱增,提供DNS域名服务、主机托管服务、虚拟主机服务等服务的服务器是IDC最基本的功能之一。服务器需要7*24小时不间断持续工作,但当服务器数量很大,服务器工作、重…

.net6API使用AutoMapper和DTO

AutoMapper,是一个转换工具,说到AutoMapper时,就不得不先说DTO,它叫做数据传输对象(Data Transfer Object)。 通俗的来说,DTO就是前端界面需要用的数据结构和类型,而我们经常使用的数据实体,是数…

华为ensp模拟校园网/企业网实例(同城灾备及异地备份中心保证网络安全)

文章简介:本文用华为ensp对企业网络进行了规划和模拟,也同样适用于校园、医院等场景。如有需要可联系作者,可以根据定制化需求做修改。作者简介:网络工程师,希望能认识更多的小伙伴一起交流,私信必回。一、…

多元回归分析 | CNN-LSTM卷积长短期记忆神经网络多输入单输出预测(Matlab完整程序)

多元回归分析 | CNN-LSTM卷积长短期记忆神经网络多输入单输出预测(Matlab完整程序) 目录 多元回归分析 | CNN-LSTM卷积长短期记忆神经网络多输入单输出预测(Matlab完整程序)预测结果评价指标基本介绍程序设计参考资料预测结果 评价指标 训练集平均绝对误差MAE:0.69559 训练…

宝塔搭建实战php源码人才求职管理系统后台端thinkphp源码(一)

大家好啊,我是测评君,欢迎来到web测评。 在开源社区里看到了这一套系统,骑士人才系统SE版,搭建测试了,感觉很不错。能够帮助一些想做招聘平台的朋友降低开发成本,就是要注意,想商业使用的话&…

QT+OpenGL光照2

QTOpenGL材质 本篇完整工程见gitee:QtOpenGL 对应点的tag,由turbolove提供技术支持,您可以关注博主或者私信博主 材质 在现实世界中,每个物体会对光照产生不同的反应 在OpenGL中模拟多种类型的物体,必须为每种物体分别定义一个…