开源容器安全平台 NeuVector 中文入门指南

公众号关注 「奇妙的 Linux 世界」

设为「星标」,每天带你玩转 Linux !

f50e6bfe661a4ecd018067e72064f683.jpeg

1. 背景

NeuVector业界首个端到端的开源容器安全平台,唯一为容器化工作负载提供企业级零信任安全的解决方案。NeuVector 是业界领先的安全和合规解决方案,已被全球知名企业广泛采用;其代码库的开源不仅使 NeuVector 成为开源社区的首选技术,还为受严格监管的客户(包括政企、金融)提供了更可靠的保证。

NeuVector开源容器镜像可以安装在任何Kubernetes集群上。支持包括红帽OpenShift、VMWare Tanzu、Google GKE、Amazon EKS、Microsoft Azure AKS等在内的众多企业级容器管理平台。

NeuVector 将驱动 SUSE 旗舰 Kubernetes 管理平台——SUSE Rancher 的容器安全创新,此举将有助于推动Kubernetes安全领域的重大生态系统革新,此前这一领域通常由闭源的专有解决方案主导。

2. NeuVector 简介

0c605a257ee9e972ceeb876482645c9e.jpeg

2.1 功能特性

NeuVector 提供强大的端到端容器安全平台。这包括对容器、Pod 和主机的端到端漏洞扫描和完整的运行时保护,包括:

  • CI/CD 漏洞管理和准入控制,使用 Jenkins 插件扫描镜像、扫描注册表并强制实施准入控制规则以将其部署到生产环境中。

  • 违规保护,发现行为并创建基于白名单的策略来检测违反正常行为的行为。

  • 威胁检测,检测容器上的常见应用程序攻击,例如 DDoS 和 DNS 攻击。

  • DLP 和 WAF 传感器。检查网络流量以防止敏感数据丢失,并检测常见的 OWASP Top10 WAF 攻击。

  • 运行时漏洞扫描。扫描注册表、镜像和正在运行的容器编排平台和主机以查找常见 (CVE) 以及特定于应用程序的漏洞。

  • 合规与审计。自动运行 Docker Bench 测试和 Kubernetes CIS Benchmarks。

  • 端点/主机安全。检测权限升级,监控主机和容器内的进程和文件活动,并监控容器文件系统的可疑活动。

  • 多集群管理。从单个控制台监控和管理多个 Kubernetes 集群。

NeuVector 的其他特性包括隔离容器和通过 SYSLOG 和 webhooks 导出日志的能力,为调查启动数据包捕获,以及与 OpenShift RBACs、 LDAP、 Microsoft AD 和 SSO 与 SAML 的集成。

注意: 隔离意味着所有网络通信都被阻塞。容器将保持并继续运行——只是没有任何网络连接。Kubernetes 不会启动一个容器来替换隔离的容器,因为 api-server 仍然能够到达容器。

2.2 全生命周期安全

  • 构建:镜像构建扫描,避免生成有隐患的镜像

  • 部署:通过准入控制策略机制,避免有隐患的镜像和不符合策略要求的容器部署到环境

  • 运行:四层/七层防火墙避免外部攻击和数据窃取

  • 运行:东西向网络动态微隔离,避免内部攻击扩展。WAF 防火墙避免外部攻击。

  • 运行:容器内病毒、木马、破解器防护.

  • 主机、Runtime、 K8S 级别安全基线扫描,合规性评估。

2.3 优势

  • 开放性: 100%开源,无需担心供应商锁定。

  • 灵活性:灵活部署各类 Kubernetes 发行版, Rancher、Openshift、EKS、 GKE、ACK、 TKE。

  • 可靠性: 7 年迭代,成熟稳定产品。

  • 专业性:专业支持服务,保障业务安全可靠持续运行。

3. 组件构成即部署模式

NeuVector 运行时容器安全方案包括四种类型安全容器:Controllers,Enforcers,Managers,Scanners。

其能够部署为一个 Allinone 的特殊容器,也能即将个功能组合在一个容器总,当然也可以在虚拟机或单个操作系统的裸机上面部署。

6ac25222f093c01adf400e2bec46154d.jpeg

3.1 Controller

Controller 管理 NeuVector Enforcer 容器集群。它还为管理控制台提供 REST api。虽然典型的测试部署只有一个 Controller,但是建议在高可用性配置中使用多个 Controller。控制器是 Kubernetes Production 部署示例 yaml 中的默认控制器。

3.2 Enforce

Enforcer 是一个轻量级容器,用于强制执行安全策略。应该在每个节点(主机)上部署一个执行器,例如作为一个守护进程集。注意: 对于 Docker 本地(非 Kubernetes)部署,执行器容器和控制器不能部署在同一个节点上(下面的 All-in-One 情况除外)。

3.3 Manager

Manager 是一个无状态容器,它为用户提供 Web-UI(仅限 HTTPS)和 CLI 控制台以管理 NeuVector 安全解决方案。可以根据需要部署多个 Manager 容器。

3.4 Scanner

扫描器是一个容器,它执行对镜像、容器和节点的漏洞和顺应性扫描。它通常作为一个副本部署,并可以扩大到所需的许多并行扫描仪,以提高扫描性能。Controller 以循环的方式将扫描作业分配给每个可用的扫描器,直到所有扫描完成。扫描仪还包含最新的 CVE 数据库,并由 NeuVector 定期更新。

4. 平台功能

d6a41bd7443ce340c758f27bfd872355.jpeg

NeuVector 提供操作系统/Runtime/K8s/容器应用三个层面安全业务进行保护。

5. 部署

5.1 Helm 部署

  • 添加 repo

$ helm repo add neuvector https://neuvector.github.io/neuvector-helm/
$ helm search repo neuvector/core
  • Kubernetes 部署

$ kubectl create namespace neuvector
$ kubectl create serviceaccount neuvector -n neuvector
$ helm install neuvector --namespace neuvector neuvector/core  --set registry=docker.io  --set
tag=5.0.0-preview.1 --set=controller.image.repository=neuvector/controller.preview --
set=enforcer.image.repository=neuvector/enforcer.preview --set 
manager.image.repository=neuvector/manager.preview --set 
cve.scanner.image.repository=neuvector/scanner.preview --set cve.updater.image.repository=neuvector/updater.preview


NAME: my-release
LAST DEPLOYED: Wed Jan 19 21:04:03 2022
NAMESPACE: neuvector
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Get the NeuVector URL by running these commands:
  NODE_PORT=$(kubectl get --namespace neuvector -o jsonpath="{.spec.ports[0].nodePort}" services neuvector-service-webui)
  NODE_IP=$(kubectl get nodes --namespace neuvector -o jsonpath="{.items[0].status.addresses[0].address}")
  echo https://$NODE_IP:$NODE_PORT

Helm-chart 参数查看:

https://github.com/neuvector/neuvector-helm/tree/master/charts/core

5.2 资源清单部署

5.2.1 安装环境

软件版本:

  • Kubernetes:1.20.14

  • Docker:19.03.15

  • NeuVector:5.0.0-preview.1

5.2.2 开始执行安装
  • 创建 namespace

$ kubectl create namespace neuvector
  • 部署 CRD ( Kubernetes 1.19+ 版本 )

$ kubectl apply -f https://raw.githubusercontent.com/neuvector/manifests/main/kubernetes/crd-k8s-1.19.yaml
  • 部署 CRD (Kubernetes 1.18 或更低版本 )

$ kubectl apply -f https://raw.githubusercontent.com/neuvector/manifests/main/kubernetes/crd-k8s-1.16.yaml
  • 配置 RBAC

$ kubectl create clusterrole neuvector-binding-app --verb=get,list,watch,update --resource=nodes,pods,services,namespaces
$ kubectl create clusterrole neuvector-binding-rbac --verb=get,list,watch --resource=rolebindings.rbac.authorization.k8s.io,roles.rbac.authorization.k8s.io,clusterrolebindings.rbac.authorization.k8s.io,clusterroles.rbac.authorization.k8s.io
$ kubectl create clusterrolebinding neuvector-binding-app --clusterrole=neuvector-binding-app --serviceaccount=neuvector:default
$ kubectl create clusterrolebinding neuvector-binding-rbac --clusterrole=neuvector-binding-rbac --serviceaccount=neuvector:default
$ kubectl create clusterrole neuvector-binding-admission --verb=get,list,watch,create,update,delete --resource=validatingwebhookconfigurations,mutatingwebhookconfigurations
$ kubectl create clusterrolebinding neuvector-binding-admission --clusterrole=neuvector-binding-admission --serviceaccount=neuvector:default
$ kubectl create clusterrole neuvector-binding-customresourcedefinition --verb=watch,create,get --resource=customresourcedefinitions
$ kubectl create clusterrolebinding  neuvector-binding-customresourcedefinition --clusterrole=neuvector-binding-customresourcedefinition --serviceaccount=neuvector:default
$ kubectl create clusterrole neuvector-binding-nvsecurityrules --verb=list,delete --resource=nvsecurityrules,nvclustersecurityrules
$ kubectl create clusterrolebinding neuvector-binding-nvsecurityrules --clusterrole=neuvector-binding-nvsecurityrules --serviceaccount=neuvector:default
$ kubectl create clusterrolebinding neuvector-binding-view --clusterrole=view --serviceaccount=neuvector:default
$ kubectl create rolebinding neuvector-admin --clusterrole=admin --serviceaccount=neuvector:default -n neuvector
  • 检查是否有以下 RBAC 对象

$ kubectl get clusterrolebinding  | grep neuvectorkubectl get rolebinding -n neuvector | grep neuvector
$ kubectl get clusterrolebinding  | grep neuvector
neuvector-binding-admission                            ClusterRole/neuvector-binding-admission                            44hneuvector-binding-app                                  ClusterRole/neuvector-binding-app                                  44hneuvector-binding-customresourcedefinition             ClusterRole/neuvector-binding-customresourcedefinition             44hneuvector-binding-nvadmissioncontrolsecurityrules      ClusterRole/neuvector-binding-nvadmissioncontrolsecurityrules      44hneuvector-binding-nvsecurityrules                      ClusterRole/neuvector-binding-nvsecurityrules                      44hneuvector-binding-nvwafsecurityrules                   ClusterRole/neuvector-binding-nvwafsecurityrules                   44hneuvector-binding-rbac                                 ClusterRole/neuvector-binding-rbac                                 44hneuvector-binding-view                                 ClusterRole/view                                                   44h
$ kubectl get rolebinding -n neuvector | grep neuvectorneuvector-admin         ClusterRole/admin            44hneuvector-binding-psp   Role/neuvector-binding-psp   44h
  • 部署 NeuVector

    • 底层 Runtime 为 Docker

$ kubectl apply -f https://raw.githubusercontent.com/neuvector/manifests/main/kubernetes/5.0.0/neuvector-docker-k8s.yaml
  • 底层 Runtime 为 Containerd(对于 k3s 和 rke2 可以使用此 yaml 文件)

$ kubectl apply -f https://raw.githubusercontent.com/neuvector/manifests/main/kubernetes/5.0.0/neuvector-containerd-k8s.yaml

1.21 以下的 Kubernetes 版本会提示以下错误,将 yaml 文件下载将 batch/v1 修改为 batch/v1beta1

error: unable to recognize "https://raw.githubusercontent.com/neuvector/manifests/main/kubernetes/5.0.0/neuvector-docker-k8s.yaml": no matches for kind "CronJob" in version "batch/v1"

1.20.x cronjob 还处于 beta 阶段,1.21 版本开始 cronjob 才正式 GA 。默认部署 web-ui 使用的是 loadblance 类型的 Service,为了方便访问修改为 NodePort,也可以通过 Ingress 对外提供服务

$ kubectl patch  svc neuvector-service-webui  -n neuvector --type='json' -p '[{"op":"replace","path":"/spec/type","value":"NodePort"},{"op":"add","path":"/spec/ports/0/nodePort","value":30888}]'

访问:

https://node_ip:30888

默认密码为 admin/admin

5.2.3 访问

由于我采用 minikube 部署,临时菜哟哦那个 port-forward 访问测试。

$ kubectl port-forward --address 0.0.0.0 -n neuvector service/neuvector-service-webui 22222:8443
4a62703e2117df2a39ef51acc1e1e506.jpeg

6. 功能测试

6.1 Dashboard

在 neuvector 的 dashboard 页面,除了有集群的健康体检,还有入口和出口暴露,已经 TOP 安全事件/资源/策略等。

4eb7b53d73ad3281942be52d0ebd422c.jpeg b0a9843c659e7c3c5698b3401ea8faed.jpeg

6.2 Network Activity

98d8550b957e155caa225add3e3921ff.jpeg

6.3 资产

6.3.1 平台

在平台模块,可以看到当前集群运行的 K8s 版本,及当前集群中存在的 CVE 漏洞及详细漏洞信息。

98b36ab476334f5fdcae6eb9f8762762.jpeg
6.3.2 主机

在改模块可以看到运行 K8s 集群的 Node 节点资源信息,保护操作系统及资源软件版本等信息。

4506d37d54f39408cf2f8a0071f4d37f.jpeg
  • 合规信息

59f8607f6528e0f56af4ad076eef8e20.jpeg
  • 漏洞信息

d87caa236e8d53aca9d5c677a6fa6720.jpeg
  • 容器信息

fe5dd110d83a82fe85e5c5a2e35b7373.jpeg
6.3.3 容器

该模块可以看到集群运行的所有容器,并可以对单个容器进行查询详细信息,漏洞信息,容器进程,容器实时监控等。

b48e5c1c6e667f83c68c2de99ed9b38f.jpeg c876e70ed40c54e8b2b4314f2baa865a.jpeg
6.3.4 镜像库

镜像库可以添加公有云镜像,或自建镜像,对其中存储的镜像进行安全扫描。

33d2aab54502809157000e4c5b36c6d9.jpeg
6.3.5 系统组件

该模块是对 NeeuVector 的系统自己例如控制器/扫描器/代理器进行信息展示和监控统计。

02ecafdaef5f0ef90aeb1b317ce7a5bc.jpeg fb2194a5db7e6efdac0ebcb8ddcf6577.jpeg

6.4 策略

  • 准入控制

5c711ce341511db37c75c972fc7e79bf.jpeg
  • 策略了

f99ef0ee8bf224e96a4a1a395e29f7af.jpeg

6.5 安全隐患

  • 漏洞

817d823503631c381d066b9588934294.jpeg
  • 合规

165c0a1efaaeafa82d4f2e15b6ec5f7d.jpeg

6.7 通知/设置

  • 风险报告

3383bcf50de2f27d0c1f2e4a8abf3457.jpeg
  • 事件

d0421659a15eb3b9fe2f3c310e56b4fb.jpeg

7. 其他

  • NeuVector 支持多集群管理。

  • 支持丰富的策略及报告导出。

8. 总结

容器安全一直是企业构建和运行 Kubernetes 应用的关键需求,NeuVector 项目使 Rancher 用户能够满足整个应用生命周期中的主要安全场景要求,包括深入的网络可视化、检查和微隔离;漏洞检测、配置和合规管理;以及风险分析、威胁检测和事件响应,丰富的全场景容器安全帮助用户守护业务安全。

9. 参考链接

  • https://open-docs.neuvector.com/

  • https://github.com/neuvector/neuvector

  • https://github.com/neuvector/manager

本文转载自:「掘金」,原文:https://url.hi-linux.com/eOa0g,版权归原作者所有。欢迎投稿,投稿邮箱: editor@hi-linux.com。

12ca0cb16862359f008288856633aac4.gif

最近,我们建立了一个技术交流微信群。目前群里已加入了不少行业内的大神,有兴趣的同学可以加入和我们一起交流技术,在 「奇妙的 Linux 世界」 公众号直接回复 「加群」 邀请你入群。

9a84b3484896e68905bc2d2b0fec3f8c.png

你可能还喜欢

点击下方图片即可阅读

4e46b1523636d2ebd7e4e78365ca49af.png

如何优雅的监控 Kubernetes Pod 网络状态

0e54308c6e7853096c14965ead93cc45.png
点击上方图片,『美团|饿了么』外卖红包天天免费领

3766d97159b9a58a8c837bb336523f9f.png

更多有趣的互联网新鲜事,关注「奇妙的互联网」视频号全了解!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值