Rainbond結合NeuVector實踐容器安全管理

  • 2022 年 5 月 10 日
  • 筆記

前言

Rainbond 是一個雲原生應用管理平台,使用簡單,不需要懂容器、Kubernetes和底層複雜技術,支援管理多個Kubernetes集群,和管理企業應用全生命周期。但是隨著雲原生時代的一點點進步,層出不窮的網路容器安全事件的出現,也是讓大家對於容器安全,網路安全的重要性,有了更進一步的想法,Rainbond 為了保證用戶在使用的過程中不出現類似的容器安全事件,特別適配整合了 NeuVector。

NeuVector 是業界首個端到端的開源容器安全平台,為容器化工作負載提供企業級零信任安全的解決方案。NeuVector 可以提供實時深入的容器網路可視化、東西向容器網路監控、主動隔離和保護、容器主機安全以及容器內部安全,容器管理平台無縫集成並且實現應用級容器安全的自動化,適用於各種雲環境、跨雲或者本地部署等容器生產環境。

本文主要表述,基於 Rainbond 安裝部署 NeuVector 容器安全平台的步驟,以及配合 Rainbond 實現生產環境中的最佳實踐。

部署 NeuVector

NeuVector 有多種部署安裝形式,為了更加簡化安裝,選用 helm 的形式進行安裝,Rainbond 也是支援 helm 商店的形式,只需要在應用市場,添加一個新的商店,把 helm商店的URL 填寫上即可。

準備工作

創建團隊

NeuVector 通常是安裝在 neuvector 命名空間裡面的,而在 Rainbond ,團隊的概念則是對應 kubernetes 里命名空間,所以通過 helm 安裝的時候,首先需要創建出來對應的團隊,團隊的英文名對應的則是該團隊在集群中的命名空間,此處填寫 neuvector,選擇對應集群即可。

對接 helm 商店

Rainbond支援基於helm直接部署應用,所以接下來對接 neuvector 官方helm倉庫,後續基於Helm商店部署 neuvector 即可, 在應用市場頁面,點擊添加商店,選擇helm商店,輸入相關資訊即可完成對接。

helm 商店地址://neuvector.github.io/neuvector-helm/

安裝

在 helm 倉庫找到 core 點擊安裝到 neuvector 團隊里即可

修改默認的 key 以及 value

values 配置項:

registry docker.io
tag 5.0.0-preview.1
controller.image.repository neuvector/controller.preview
enforcer.image.repository neuvector/enforcer.preview
manager.image.repository neuvector/manager.preview
cve.scanner.image.repository neuvector/scanner.preview
cve.updater.image.repository neuvector/updater.preview
manager.svc.type ClusterIP

安裝完成以後,確認 pod 的狀態為 Running

neuvector 提供了可視化操作的介面,安裝過程將自動創建Service,通過Rainbond平台第三方組件的形式可將 neuvector 的訪問埠暴露出來。

以下為需要進行配置的選項

組件名稱 neuvector-web
組件英文名稱 neuvector
組件註冊方式 kubernetes
Namespace neuvector
Service neuvector-service-webui

添加完成以後,需要添加並打開對外訪問的埠(8443),默認用戶名以及密碼均為 admin/admin

注意:訪問的時候,需要通過 https 的形式進行訪問,至此 neuvector 安裝完畢

NeuVector 最佳實踐

網路流量監視治理

NeuVector 提供的網路活動,可以清楚的查看每一個 pod 之間的網路流量動向。以及對應的埠,規則,更加清晰明了的查看走向。

藍色線代表正常的流向是記錄在學習模式里的。

黃色的流向則是記錄在監視模式下,需要我們手動進行審閱規則,決定是否通過這個流量。

紅色則代表是記錄在保護模式下,被拒絕的動向,也可通過規則進行避免。

學習模式,監視模式,保護模式的使用

NeuVector 的組支援 3 種模式:學習模式、監控模式和保護模式;各個模式實現作用如下:

學習模式

學習和記錄容器、主機間網路連接情況和進程執行資訊。

自動構建網路規則白名單,保護應用網路正常行為。

為每個服務的容器中運行的進程設定安全基準線,並創建進程配置文件規則白名單。

監控模式

NeuVector 監視容器和主機的網路和進程運行情況,遇到非學習模式下記錄的行為將在 NeuVector 安全事件中進行告警。

保護模式

NeuVector 監視容器和主機的網路和進程運行情況,遇到非學習模式下記錄的行為直接拒絕。

針對於以上三種模式,可以總結出來適於生產環境的最佳實踐,當新的業務準備上線的時候,可以先默認是學習模式,經過一段時間的學習,記錄容器的以及主機的規則,然後轉換成監控模式,運行一段時間,監控是否有特殊的網路流量以及主機進程,幫助我們把特殊的網路動向記錄下來,並進行告警確認是否放行,最後轉換成監控模式,避免一些惡意的操作對我們的環境造成不必要的危險。

基於集群的鏡像倉庫做漏洞檢查

kubernetes 集群部署業務的最小單元是 pod 但是pod 的組成部分最重要的其實是鏡像, NeuVector 也是可以基於鏡像進行漏洞檢查,避免在鏡像被注入特殊的漏洞機制

對接 Rainbond 時,在不使用外部的鏡像倉庫的情況下,Rainbond 會提供一個默認的用於存儲鏡像的倉庫 goodrain.me ,它是用來存儲通過 Rainbond 構建的所有業務的鏡像,所以通過檢查裡面的鏡像,可以清楚的看出業務所依賴的鏡像都存在那些漏洞,已避免因為鏡像漏洞問題所造成的影響。

如果在對接 Rainbond 時使用了外部的鏡像倉庫,且域名可以被解析到的情況,可以直接填寫域名即可,因為 goodrain.me 本身是不能被 NeuVector 解析的,所以需要通過集群的 coredns 手動添加對應的解析,來確保 NeuVector 可以連接上。

編輯coredns

kubectl edit cm coredns -n kube-system  

獲取 goodrain.me 解析的 IP

kubectl get rainbondcluster -n rbd-system -oyaml | egrep -v [A-Za-z{}]

在指定位置添加以下內容,注意修改 IP

hosts {
  192.168.0.1 goodrain.me
  fallthrough
}

在 NeuVector web介面左側選擇 資產 > 鏡像庫 添加倉庫

goodrain.me 默認用戶為 admin,密碼通過以下命令獲取

 kubectl get rainbondcluster -n rbd-system -oyaml | grep password | sed "1d"

鏡像掃描結束以後,鏡像的資訊會在下面進行呈現,點擊想要查看的鏡像名稱,即可查看詳細資訊,以下供參考

寫在最後

通過本文,希望大家可以基於 Rainbond 成功把 NeuVector 容器安全平台部署起來,並且可以根據最佳實踐,做好相對應的操作,當然NeuVector 的功能遠遠不止於此,還是需要大家不斷的探索,不斷的實踐。