容器如何做到敏捷又安全?
技術(shù)發(fā)展的目標(biāo)在于解決問題,但大部分新興技術(shù)的誕生與普及往往又帶來了新的問題。同樣的情況,也出現(xiàn)在過去十年來顛覆整個IT格局的三大重要新興技術(shù)身上——微服務(wù)、容器與Kubernetes。微服務(wù)架構(gòu)與容器化應(yīng)用程序解決了不少難題,但也帶來了在管理、安全性與合規(guī)性等方面新的挑戰(zhàn)。
有效使用這些新技術(shù)的前提,自然是從容應(yīng)對這些挑戰(zhàn)。在本文中,我們將介紹企業(yè)在運用微服務(wù)與容器技術(shù)方面迎接的一系列挑戰(zhàn),以及有望解決問題的最佳實踐。
安全性、合規(guī)性與容器化應(yīng)用程序
微服務(wù)與容器技術(shù)之所以給IT團(tuán)隊帶來一系列新挑戰(zhàn),原因非常簡單,是因為它們引入了一系列的層 (layers) ,而且將部分層轉(zhuǎn)移到應(yīng)用程序部署當(dāng)中。隨著復(fù)雜性的不斷提升,滿足安全性及合規(guī)性要求的難度自然也越來越大。
具體來說,目前典型的微服務(wù)應(yīng)用程序部署中包含以下幾層:容器鏡像,用于容納應(yīng)用程序代碼;容器運行引擎,例如Docker,用于啟動單一容器;Kubernetes,負(fù)責(zé)管理所有容器;底層基礎(chǔ)設(shè)施,用于托管容器鏡像、運行時以及Kubernetes編排工具。
每個層都存在自身潛在漏洞與安全風(fēng)險。容器鏡像中可能包含惡意代碼,容器運行時或Kubernetes可能遭到權(quán)限升級攻擊,或者包含可用于對容器集群內(nèi)部分資源進(jìn)行未授權(quán)訪問的漏洞。主機(jī)基礎(chǔ)設(shè)施則可能因操作系統(tǒng)層級或者云服務(wù)商IAM框架中的漏洞或配置錯誤而遭到侵害。
除此以外,在容器化環(huán)境中建立強(qiáng)大可靠的安全體系,還有著自己的一整套特殊要求,具體包括:將各容器與Pod彼此隔離;將主機(jī)與各容器及Pod隔離開來;管理組成容器集群的各類網(wǎng)絡(luò),并確保網(wǎng)絡(luò)之間相互隔離;保護(hù)容器集群所依賴的一切持久性數(shù)據(jù)存儲;在高度動態(tài)且不斷變化的環(huán)境中滿足合規(guī)性要求。但整個審計往往需要數(shù)周甚至數(shù)月才能完成,遵循“瀑布式”時間表,因此難以跟上實際情況變化。
與虛擬機(jī)等傳統(tǒng)架構(gòu)相比,上述這些要求給IT團(tuán)隊的保護(hù)工作帶來不少的麻煩。相較之下,傳統(tǒng)虛擬機(jī)天然彼此隔離,一般也不需要在不同的網(wǎng)絡(luò)、應(yīng)用程序組件或者存儲資源之間進(jìn)行隔離。而這一切,都成為IT團(tuán)隊在部署容器化應(yīng)用程序時必須面對的挑戰(zhàn)。
容器帶來新的安全機(jī)遇
看到這里,你可能覺得容器與微服務(wù)在本質(zhì)上缺乏安全可靠性;蛘哒f,只有付出更多努力,才能對其加以正確管理與保護(hù)。而實際上,容器技術(shù)雖然帶來了一系列新的安全挑戰(zhàn),但同時也給IT團(tuán)隊提供了新的應(yīng)對性工具與策略:
第一,是對環(huán)境配置采用聲明式方法的能力。在Kubernetes集群當(dāng)中,幾乎所有內(nèi)容都可以通過簡單的JSON或者YAML文件進(jìn)行配置。因此,IT團(tuán)隊可以創(chuàng)建一組文件,利用這些文件定義集群的行為方式、不同組件的隔離方式等等,而后據(jù)此構(gòu)建環(huán)境。在這方面,將安全權(quán)限集成至Kubernetes環(huán)境配置當(dāng)中的難度,要遠(yuǎn)遠(yuǎn)低于以往先構(gòu)建環(huán)境、再對其進(jìn)行額外的安全保護(hù)。
第二,Kubernetes與容器還能夠輕松構(gòu)建起不可變基礎(chǔ)設(shè)施,這意味著用戶一般會通過完全撤銷其前身、而非對運行中的組件進(jìn)行更新,來部署新的容器與Pod。不可變基礎(chǔ)設(shè)施使團(tuán)隊能夠在部署之前更全面地審查新軟件發(fā)布,并減少因意外配置問題將安全風(fēng)險引入生產(chǎn)環(huán)境的可能性。
因此,容器、微服務(wù)與Kubernetes并不一定會提高安全性與合規(guī)性的實現(xiàn)難度。換言之,引入更多層與組件只是擴(kuò)大了IT團(tuán)隊需要管理的攻擊面;但與此同時,新的技術(shù)也帶來新的工具與策略,最終令全面管理攻擊面成為可能。
保護(hù)現(xiàn)代架構(gòu)的最佳實踐
除了以上提到的特定策略之外,組織還可以采用以下重要方法盡可能提升基于容器、基于Kubernetes類環(huán)境的安全水平。
Kubernetes集群一旦啟動并開始運行,其極高的復(fù)雜度會給保護(hù)工作帶來巨大壓力。因此,團(tuán)隊必須在集群啟動之前就進(jìn)行安全性設(shè)計,借此降低相關(guān)風(fēng)險。如上所述,聲明式配置有助于實現(xiàn)這項目標(biāo)。
同樣的,IT團(tuán)隊還應(yīng)該在用于部署及管理容器化應(yīng)用程序的代碼當(dāng)中,充分引入安全保護(hù)機(jī)制。換句話說,單在實際環(huán)境中掃描漏洞或跟蹤惡意行為還遠(yuǎn)遠(yuǎn)不夠;你需要確保用于控制環(huán)境以及運行應(yīng)用程序的代碼本身安全可靠,同時以自動化方式持續(xù)審計以檢測一切非安全配置。
通過這種方式,IT團(tuán)隊可以從先破壞、后修復(fù)這一被動方法(即只有在問題發(fā)生后才能發(fā)現(xiàn)漏洞)過渡至對環(huán)境進(jìn)行默認(rèn)安全保護(hù)的主動方法。
由于Kubernetes環(huán)境中包含大量層,且每一層都擁有匹配自己的安全審計與監(jiān)控類型,因此IT團(tuán)隊需要采取相應(yīng)措施分別加以保護(hù)。與簡單的基礎(chǔ)設(shè)施不同,容器與微服務(wù)無法通過單獨關(guān)注其中某一層實現(xiàn)有效保護(hù)。
Kubernetes提供一系列原生安全功能,IT團(tuán)隊可以借此幫助實現(xiàn)隔離并緩解安全風(fēng)險。但需要主要的是,Kubernetes本身并不屬于安全工具,因此請務(wù)必充分了解這些原生工具的局限性,并明確需要部署哪些其他工具以填補(bǔ)安全空白。
結(jié)束語
使用微服務(wù)、容器與Kubernetes構(gòu)建的現(xiàn)代基礎(chǔ)設(shè)施,確實要比傳統(tǒng)應(yīng)用具有更大且更為復(fù)雜的攻擊面。但在這種復(fù)雜性提升的同時,我們也迎來了運用新工具與新策略應(yīng)對現(xiàn)代環(huán)境安全挑戰(zhàn)的重大機(jī)遇。因此,保障Kubernetes部署安全的核心在于充分把握這些機(jī)遇,一味在現(xiàn)代環(huán)境中堅守傳統(tǒng)安全實踐將無異于給業(yè)務(wù)體系埋下“定時炸彈”。

