CRD實現自動化容器安全方法
長久以來,安全一直是困擾著許多DevOps團隊(包括我自己供職的加拿大保險和金融服務合作社)的癥結所在。儘管在各種工具的幫助下,我們的CI/CD管道的絕大部分都已經實現了自動化,而且基於容器的自動化應用部署也是我們的常態,但是在安全方面的自動化程度仍然比較落後。與大多數DevOps團隊一樣,我們實施了自動化的漏洞掃描,但是在手動構建安全策略,以保護生產環境中的應用程式、及其工作負載方面仍存在著一定的問題。 |
可喜的是,如今Kubernetes的自定義資源型別(custom resource definitions,CRDs),卻能夠使我們的團隊透過自己的管道,儘早地將應用程式的安全策略宣告融入程式碼,並將此類安全策略自動化地部署到生產環境中。
目前,我們透過CRD引入了各種全域性安全策略。這些策略預定義了應用程式的允許行為,並在多個Kubernetes叢集之間實施了不同的防護措施。透過使用CRD來自動化且集中化地管理安全策略即程式碼(security policy as code),我們既可以加強與簡化策略的執行,又能夠以高效、容錯且安全的方式部署和更新各種應用程式。
下面,我們將分享本企業是如何實現應用安全策略的自動化:
為了利用容器工具所提供的各項優勢,我們的團隊使用了NeuVector CRD,並在NeuVector容器安全平臺內定義了各種安全策略。
- 首先透過CRD,我們讓這些策略能夠捕獲應用程式最初的正常與合法行為,並以此建立一個完整的配置檔案(profile)。
- 接著,CRD將這些行為列入白名單,其中包括:與應用程式的標準操作相一致的所有網路規則、流程、協議、以及檔案活動。
- 最後,在應用程式的容器環境內,CRD透過只允許那些獲批的網路連線(使用ISO第7層的應用協議,進行識別與檢查)來提供安全性,並拒絕任何異常的外部連線。
- 有了NeuVector CRD之後,所有由NvSecurityRule型別呼叫的自定義資源,現在都可以交由CRD來處理。因此,您可以繼續建立各種自定義的資源,來定義更多的安全策略。不過在此之前,請參考NeuVector的相關文件,以新增所有必需的clusterroles和clusterrolebindings。
- NeuVector會在新建立的自定義資源中解析安全策略,並繼續對NeuVector Controller進行REST API的呼叫。該Controller會按需在NeuVector中透過建立規則和配置,以實施各項策略。
- NeuVector會在新建立的自定義資源中解析安全策略,並繼續對NeuVector Controller進行REST API的呼叫。該Controller會按需在NeuVector中透過建立規則和配置,以實施各項策略。
據此,我們的策略便能夠防止攻擊者試圖利用內部或外部的通訊連線,進入應用程式所在的生產環境。
CRD既允許我們基於全域性或每一個服務,來定義不同的規則;又透過支援RBAC,使我們能夠利用本地的Kubernetes服務帳戶與角色,來實施各項安全策略。同時,它的版本控制功能也有助於我們跟蹤每一個應用程式修訂版的策略。另外,諸如Open Policy Agent之類的安全策略管理工具,也能夠按需支援各類整合。
NeuVector CRD允許您使用Kubernetes的本地YAML檔案來建立各項安全規則。
首先,您需要建立一個NeuVector CRD。如下圖所示,我們使用YAML程式碼建立了一個CRD。同時,我們為NvSecurityRule定義了一個namespaced域,並將NvClusterSecurityRule的域範圍定義為能夠跨叢集進行操作
我們透過執行如下 來建立CRD:
另外,CRD可以在Kubernetes內部部署原生的、啟用了RBAC的NeuVector安全規則。那些由CRD為特定的名稱空間所宣告的安全策略,只能由具備部署到工作區許可權的服務帳戶來執行。同樣地,服務帳戶必須具有適當的群集管理員許可權,才能夠跨名稱空間部署那些群集範圍的CRD定義。
以下是demo-security-v1.yaml檔案的程式碼片段。它使用HTTP協議,來限制demo名稱空間中的nginx-pod容器,去連線同一名稱空間中的node-pod容器。
除了上述程式碼段,yaml檔案還應該繼續指定demo名稱空間中各個容器所允許的所有網路連線,使用Redis協議的網路連線,以及每個容器允許的程式與檔案活動。在部署應用程式之前,您可以透過將它們部署到NeuVector中,以提前準備好安全規則。此舉可讓應用程式在開始執行之時,就已經啟用了相應的安全屬性。
請參照如下 部署您的安全策略:
另外,CRD可以在Kubernetes內部部署原生的、啟用了RBAC的NeuVector安全規則。那些由CRD為特定的名稱空間所宣告的安全策略,只能由具備部署到工作區許可權的服務帳戶來執行。同樣地,服務帳戶必須具有適當的群集管理員許可權,才能夠跨名稱空間部署那些群集範圍的CRD定義。
以下是demo-security-v1.yaml檔案的程式碼片段。它使用HTTP協議,來限制demo名稱空間中的nginx-pod容器,去連線同一名稱空間中的node-pod容器。
除了上述程式碼段,yaml檔案還應該繼續指定demo名稱空間中各個容器所允許的所有網路連線,使用Redis協議的網路連線,以及每個容器允許的程式與檔案活動。在部署應用程式之前,您可以透過將它們部署到NeuVector中,以提前準備好安全規則。此舉可讓應用程式在開始執行之時,就已經啟用了相應的安全屬性。
請參照如下命令部署您的安全策略:
我個人認為:CRD和安全策略即程式碼的定義能力,應該能夠為DevOps、DevSecOps、以及開發團隊帶來更好的安全性。我們可以從如下四個方面著手進行實踐:
透過為應用程式建立部署與安全清單,開發人員能夠在開發的初期儘早的利用CRD來保障安全性。在完成映象的構建、自動化漏洞掃描、以及DevOps的審查之後,DevOps人員可以透過測試這兩份清單,來為開發人員提供有效的安全性反饋。
因此,從最初到被部署到生產環境中,有效的安全策略始終伴隨著新的應用程式。
DevOps團隊可以在測試環境中使用NeuVector的行為學習功能,來定義安全策略,並建立針對NeuVector CRD的YAML格式檔案。透過如下的工作流(從圖的右下角開始),DevOps和QA團隊就能夠將應用程式順利地部署到測試與QA環境之中。也就是說,應用程式在此將完成全部與行為相關的配置檔案,其中包括:產生適當的網路、流程、以及檔案訪問的安全性規則等。
在部署到生產環境之前,開發人員可以將新建立的規則匯出為YAML格式,以便進行檢查、編輯、以及開展DevOps的相關測試。
值得注意的是:透過啟用全域性安全策略的定義方式,NeuVector CRD既可以為那些未連線到任何特定應用的負載,又可以不針對叢集中的某個特定負載予以分組。例如:安全、合規或運營團隊可能需要定義網路出、入口的全域性安全規則,以阻止某些程式橫跨各個容器,或是允許某些程式對於整個叢集中的監控與診斷。
因此,透過結合使用全域性策略,和那些特定於某個應用的策略,整個團隊就可以制定出本組織真正所需的精確規則。如下圖所示,我們用如下規則來拒絕來自容器的SSH連線。
透過使用NeuVector CRD,您可以將全部或是某些選定的安全策略,從研發階段自動化遷移到生產環境中。在NeuVector控制檯中,您可以透過配置“New Services Mode”,來發現、監視或保護各種設定。透過選擇“Monitor”或“Protect”,您可以確保所有新部署的、或更新的服務,在啟用之前,都必須包含必需的安全規則。
綜上所述,透過利用Kubernetes CRD、以及安全策略即程式碼,開發團隊和DevOps團隊能夠確保從開發伊始到生產部署,都能夠得到安全自動化的“加持”,進而為應用程式提供更好的保護。
原文地址:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559985/viewspace-2700711/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Docker容器的自動化監控實現Docker
- 是否只有實現了容器化、自動編排等等才算是實現了運維自動化?運維
- Selenium自動化實現web自動化-1Web
- 企業實現銷售自動化有哪些方法?
- IT 自動化:如何去實現
- 多雲環境下,如何實現自動化的安全防護?
- 使用gulp實現前端自動化前端
- iOS如何實現自動化打包iOS
- 使用 fastlane 實現自動化打包AST
- 如何實現辦公自動化?
- 自動化整合:Pipeline整合Docker容器Docker
- 實現容器安全管理的最佳實踐
- [原] php + Laravel 實現部署自動化PHPLaravel
- 如何實現高度自動化測試?
- python自動化審計及實現Python
- python實現自動化辦公01Python
- 利用Github Actions實現自動化部署Github
- Postman實現UI自動化測試PostmanUI
- 基於RestAssured實現介面自動化REST
- Python 實現自動化 Excel 報表PythonExcel
- 自動化整合:Kubernetes容器引擎詳解
- 通過自動化和現代化實現網路優化優化
- 左移測試,如何確保安全合規還能實現高度自動化?
- PXE實現系統自動化安裝
- 用 Python(PyVISA) 實現儀器自動化Python
- GO 使用Webhook 實現github 自動化部署GoWebHookGithub
- jenkins + GitHub 實現專案自動化部署JenkinsGithub
- 用python實現selenium 自動化測試Python
- 使用 Jenkins + Ansible 實現自動化部署 NginxJenkinsNginx
- iOS--利用Fastlane實現自動化打包iOSAST
- 如何利用 RPA 實現自動化獲客?
- postman實現介面的自動化測試Postman
- 突破效能瓶頸,實現流程自動化
- 【python】實現文章同步csdn社群自動化Python
- 使用 Postman 實現 API 自動化測試PostmanAPI
- 介面自動化測試框架--http請求的get、post方法的實現框架HTTP
- 自動化整合:Docker容器入門簡介Docker
- API自動化測試平臺,高效實現對API的自動化測試API