容器安全解決方案需要考慮不同技術堆疊和容器生命週期的不同階段。 - 1.容器作業系統與多租用戶- 2.容器內容(使用可信任來源) - 3.容器註冊(容器鏡像加密存取) - 4.建置流程安全- 5.控制叢集中可部署的內容- 6.容器編排:加強容器平台安全- 7.網路隔離- 8.儲存- 9.API 管理, 終端安全和單一登入(SSO) - 10.角色和存取控制管理
容器提供了一種簡單的應用程式打包方法將它們無縫地從開發、測試環境部署到生產環境。它有助於確保各種環境中的一致性,包括實體伺服器、虛擬機器(VM)或私有或公有雲。領先的組織基於這些好處迅速採用容器,以便輕鬆開發和管理增加業務價值的應用程式。
#企業應用程式需要強壯的安全性,任何在容器中運行基礎服務的人都會問:「容器是安全的嗎?」、「可以讓我們的應用程式信任容器嗎?」
保護容器非常類似於確保任何正在執行的進程。在部署和執行容器之前,您需要考慮整個解決方案技術堆疊的安全性。您還需要考慮在應用程式和容器的完整生命週期的安全性。
請嘗試在這 10 個方面加強容器的不同層次、不同技術堆疊和不同生命週期階段的安全性。
對於開發人員來說,容器使得他們更容易建立和升級應用程序,它可以作為一個應用單元的被依賴,透過在共享主機上部署啟用多租戶應用程式來最大限度地利用伺服器資源。容器很容易在單一主機上部署多個應用程序,並根據需要開啟和關閉單一容器。為了充分利用這種打包和部署技術,維運團隊需要正確的運作容器環境。運維人員需要一個作業系統,可以在邊界處保護容器,使主機核心與容器隔離並確保容器彼此之間安全。
容器是隔離和約束資源的 Linux 進程,可讓您在共用宿主核心中執行沙盒應用程式。您保護容器的方法應該與確保 Linux 上任何正在執行的進程的安全方法相同。放棄特權是重要的,目前仍然是最佳實踐。更好的方法是創建盡可能少的特權容器。容器應該作為普通使用者運行,而不是 root 使用者。接下來,利用 Linux 中可用的多種等級的安全特性確保容器的安全: Linux 命名空間,安全增強的Linux(SELinux), cgroups,capabilities 和安全計算模式(seccomp)。
當說到安全性的時候,對於容器內容來說又意味著什麼呢? 。一段時間以來,應用程式和基礎設施都是由現成的元件組成的。很多都來自於開源軟體,例如如 Linux 作業系統,Apache Web 伺服器,紅帽 JBoss 企業應用平台,PostgreSQL 和 Node.js。基於容器的各種軟體包版本現在一應俱全,所以你不需要建立自己。但是,與從外部來源下載的任何程式碼一樣,您需要知道套件的起源、它們是由誰創建,以及它們內部是否存在惡意程式碼。
#你的團隊建立容器的時候基於下載的公共容器鏡像, 所以對它的存取管理和更新下載是管理的關鍵,需以同樣的方式管理容器鏡像、內建的鏡像及其他類型的二進位文件。許多私有倉庫註冊伺服器支援儲存容器鏡像。選擇一個私有的、儲存使用的容器鏡像自動化策略的註冊伺服器。
在一個容器化的環境裡,軟體的建置是整個生命週期的一個階段,應用程式程式碼需要與運行庫整合。管理此建置過程是確保軟體堆疊安全性的關鍵。堅持「一次構建,到處部署(build once, deploy everywhere)」的理念,確保構建過程的產品正是生產中部署的產品。這一點對於維護容器持續穩定也非常重要,換句話說,不要為運行的容器打補丁;而是應該重新建置、重新部署它們。 無論您是在高度規範的行業中工作,還是僅僅想優化團隊的工作,需要設計容器鏡像的管理和建置流程,以利用容器層實現控制分離,從而使:
維運團隊管理基礎鏡像
架構團隊管理中間件、執行時間、資料庫和其它解決方案
開發團隊僅專注於應用層和程式碼
最後,對客製化的容器簽名,這樣可以確保它們在建置和部署環節之間不會被竄改。
為了防備在建置過程中發生任何問題,或在部署一個鏡像後發現漏洞,需要增加以自動化的、基於策略的部署的另一層安全性。
讓我們來看看建立應用程式的三個容器映像層:核心層(core)、中間件層(middleware)和應用層(application)。一個問題如果在核心鏡像被發現,鏡像會重新建構。一旦建置完成,鏡像將被推入容器平台註冊伺服器。平台可以偵測到鏡像發生了變化。對於依賴此鏡像並有定義觸發器的構建,該平台將自動重建應用程式並整合已修復的庫。
一旦建置完成,鏡像將被推入容器平台的內部註冊伺服器。內部註冊伺服器中鏡像的變更能立即偵測到,透過應用程式中定義的觸發器自動部署更新鏡像,確保生產中執行的程式碼總是與最近更新的鏡像相同。所有這些功能協同工作,將安全功能整合到您的持續整合和持續部署(CI / CD)流程中。
#當然,應用程式很少在單一容器中交付。即使是簡單的應用程式通常有一個前端,後端和資料庫。在容器中部署現代微服務應用,通常意味著多容器部署,有時在同一主機上有時分佈在多個主機或節點,如圖所示。
當規模化管理容器部署時,您需要考慮:
哪些容器應該部署到哪個主機上?
哪個主機容量比較大?
哪些容器需要互相存取?他們將如何相互發現?
如何控制共享資源的存取和管理,例如網路和儲存?
如何監控容器健康狀態?
如何自動擴展應用能力以滿足需求?
如何讓開發者在自助服務的同時滿足安全需求?
考慮到開發人員和維運人員擁有的廣泛能力,強大的基於角色的存取控制是容器平台的關鍵元素。例如,編排管理伺服器是存取的中心點,應該得到最高層級的安全檢查。 API 是大規模自動化容器管理的關鍵,用於驗證和配置容器、服務和複製控制器的資料;對傳入的請求執行專案驗證;並呼叫其他主要係統元件上的觸發器。
在容器部署現代微服務應用程式往往意味著在多個節點分散部署多個容器。考慮到網路防禦,您需要一種在叢集中隔離應用程式的方法。
一個典型的公有雲服務,例如Google Container Engine (GKE),Azure Container Services, 或 Amazon Web Services (AWS) Container Service,都是單一租用戶服務。它們允許在您啟動的 VM 叢集上執行容器。為了實現多租戶容器安全,您需要一個容器平台,讓您可以選擇單一叢集並將流量分段,以隔離該叢集中的不同使用者、團隊、應用程式和環境。
透過網路命名空間,每個容器集合(稱為「POD」)會獲得自己的IP和連接埠綁定範圍,從而在節點上隔離 POD 網路。
預設情況下,來自不同命名空間(項目)的 POD 無法將套件傳送到或接收來自不同項目的 POD 、服務的封包,除了下文所述的選項。您可以使用這些特性來隔離叢集中的開發人員、測試和生產環境;然而,IP 位址和連接埠的這種擴展使得網路變得更加複雜。可以投資一些工具來處理這種複雜性。首選的工具是採用軟體定義網路(SDN)容器平台,它提供統一的叢集網絡,保證整個叢集的容器之間的通訊。
#對於有狀態和無狀態的應用程式來說,容器是非常有用的。 保護儲存是保證有狀態服務的關鍵要素。容器平台應提供多樣化的儲存插件,包括網路檔案系統(NFS),AWS Elastic Block Stores(EBS,彈性區塊儲存),GCE Persistent 磁碟,GlusterFS,iSCSI,RADOS(CEPH)、Cinder 等等。
一個持久性磁碟區(PV)可以安裝在由資源提供者支援的任何主機。供應商將有不同的能力,每個 PV 的存取模式可以設定為特定磁碟區支援的特定模式。例如,NFS 可以支援多個 讀/寫的客戶端,但一個特定的 NFS PV 可以在伺服器上僅作為唯讀輸出。每個 PV 都有它自己的一套存取模式,定義特定 PV 的效能指標,例如ReadWriteOnce, ReadOnlyMany, 和 ReadWriteMany。
保護應用程式安全性包括管理應用程式和 API 驗證和授權。 Web SSO 功能是現代應用程式的關鍵部分。當開發者建構自己的應用時,容器平台可以提供各種容器服務給他們使用。
API 是微服務應用的關鍵組成部分。微服務應用程式具有多個獨立的 API 服務,這導致服務端點的擴張,因此需要更多的治理工具。推薦使用 API 管理工具。所有 API 平台都應該提供各種 API 認證和安全的標準選項,它們可以單獨使用或組合使用,發布憑證和控制存取。這些選項包括標準的 API 金鑰、應用ID、金鑰對和 OAuth 2.0。
2016年7月,Kubernetes 1.3 介紹了 Kubernetes Federated Cluster。這是一個令人興奮的新功能,目前在 Kubernetes 1.6 beta 。
在公有雲或企業資料中心場景中,Federation 對於跨叢集部署和存取應用服務是很有用的。多叢集使得應用程式的高可用性成為可能,例如多個區域、多個雲端供應商(如AWS、Google Cloud 和 Azure)實現部署或遷移的通用管理。
在管理叢集聯邦時,必須確保編排工具在不同的部署平台實例中提供所需的安全性。與以往一樣,身份驗證和授權是安全的關鍵 —— 能夠安全地將資料傳遞給應用程序,無論它們在何處運行,在叢集中管理應用程式多租戶。
Kubernetes 擴展了叢集聯邦包括支援聯邦加密,聯邦命名空間和物件入口。
以上是加強Linux 容器安全的十大方面的詳細內容。更多資訊請關注PHP中文網其他相關文章!