0


开源容器安全平台 NeuVector

1. 背景

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

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

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

2. NeuVector 简介

在这里插入图片描述

  • NeuVector 本身包含 Controller、Enforcer、Manager、Scanner 和 Updater 模块。
  • Controller :整个 NeuVector 的控制模块,API 入口,包括配置下发,高可用主要考虑 Controller 的 HA ,通常建议部署 3 个 Controller 模块组成集群。
  • Enforcer :主要用于安全策略部署下发和执行,DaemonSet 类型会在每个节点部署。
  • Manager:提供 web-UI(仅HTTPS) 和 CLI 控制台,供用户管理 NeuVector 。
  • Scanner :对节点、容器、Kubernetes 、镜像进行 CVE 漏洞扫描
  • Updater :cronjob ,用于定期更新 CVE 漏洞库

2.1 功能特性

NeuVector 提供强大的端到端容器安全平台。这包括对容器、Pod 和主机的端到端漏洞扫描和完整的运行时保护,包括:
  • CI/CD 漏洞管理和准入控制,使用 Jenkins 插件扫描镜像、扫描注册表并强制实施准入控制规则以将其部署到生产环境中。 违规保护,发现行为并创建基于白名单的策略来检测违反正常行为的行为。 威胁检测,检测容器上的常见应用程序attack,例如 DDoS 和 DNS 污染。
  • DLP 和 WAF 传感器。检查网络流量以防止敏感数据丢失,并检测常见的 OWASP Top10 WAF attack。
  • 运行时漏洞扫描。扫描注册表、镜像和正在运行的容器编排平台和主机以查找常见 (CVE) 以及特定于应用程序的漏洞。
  • 合规与审计。自动运行 Docker Bench 测试和 Kubernetes CIS Benchmarks。
  • 端点/主机安全。检测权限升级,监控主机和容器内的进程和文件活动,并监控容器文件系统的可疑活动。
  • 多集群管理。从单个控制台监控和管理多个 Kubernetes 集群。
NeuVector 的其他特性包括隔离容器和通过 SYSLOG 和 webhooks 导出日志的能力,为调查启动数据包捕获,以及与 OpenShift RBACs、 LDAP、 Microsoft AD 和 SSO 与 SAML 的集成。

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

2.2 全生命周期安全

  • 构建:镜像构建扫描,避免生成有隐患的镜像
  • 部署:通过准入控制策略机制,避免有隐患的镜像和不符合策略要求的容器部署到环境
  • 运行:四层/七层防火墙避免外部攻击和数据窃取
  • 运行:东西向网络动态微隔离,避免内部gongji扩展。WAF 防火墙避免外部攻击。
  • 运行:容器内virus、muma、pojie器防护.
  • 主机、Runtime、 K8S 级别安全基线扫描,合规性评估。

2.3 优势

  • 开放性: 100%开源,无需担心供应商锁定。
  • 灵活性:灵活部署各类 Kubernetes 发行版, Rancher、Openshift、EKS、 GKE、ACK、 TKE。
  • 可靠性: 成熟稳定产品。
  • 专业性: 保障业务安全可靠持续运行。

3. 部署

3.1 Helm 部署
  • Adding chart repo
helm repo add neuvector https://neuvector.github.io/neuvector-helm/
helm search repo neuvector/core
Versioning
  • Helm charts for officially released product are published from the release branch of the repository. The main branch is used for the charts of the product in the development. Typically, the charts in the main branch are published with the alpha, beta or rc tag. They can be discovered with --devel option.
$ helm search repo neuvector/core -l
NAME              CHART VERSION    APP VERSION    DESCRIPTION
neuvector/core    2.2.2           5.0.2          Helm chart for NeuVector's core services
neuvector/core    2.2.1            5.0.1          Helm chart for NeuVector's core services
neuvector/core    2.2.0            5.0.0          Helm chart for NeuVector's core services
neuvector/core    1.9.2            4.4.4-s2       Helm chart for NeuVector's core services
neuvector/core    1.9.1            4.4.4          Helm chart for NeuVector's core services
...
...

$ helm search repo neuvector/core --devel
NAME                CHART VERSION    APP VERSION    DESCRIPTION
neuvector/core    2.2.0-b1         5.0.0-b1       Helm chart for NeuVector's core services
neuvector/core    1.9.2            4.4.4-s2       Helm chart for NeuVector's core services
neuvector/core    1.9.1            4.4.4          Helm chart for NeuVector's core services
neuvector/core    1.9.0            4.4.4          Helm chart for NeuVector's core services
neuvector/core    1.8.9            4.4.3          Helm chart for NeuVector's core services
...
...
Deploy in Kubernetes

To install the chart with the release name neuvector:

  • Create the NeuVector namespace. You can use namespace name other than “neuvector”.
kubectl create namespace neuvector
  • Label the NeuVector namespace with privileged profile for deploying on PSA enabled cluster.
kubectl label  namespace neuvector "pod-security.kubernetes.io/enforce=privileged"
  • To install the chart with the release name neuvector.
helm install neuvector --namespace neuvector --create-namespace neuvector/core
Rolling upgrade
helm upgrade neuvector --settag=5.0.2 neuvector/core

3.2 资源清单部署

3.2.1 安装环境

软件版本:

  • OS:centos7.9
  • Rancher:2.5.5
  • Kubernetes:1.21.0
  • Docker:21.10.17
  • NeuVector:5.0.0-preview.1
创建 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 neuvector

在这里插入图片描述

kubectl get rolebinding -n neuvector |grep neuvector

在这里插入图片描述

部署 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在这里插入图片描述在这里插入图片描述
标签: 开源 安全 k8s

本文转载自: https://blog.csdn.net/mccruixi/article/details/139138199
版权归原作者 睿希希 所有, 如有侵权,请联系我们删除。

“开源容器安全平台 NeuVector”的评论:

还没有评论