【編者按】對比虛擬機,Docker在體量等方面擁有顯著的優(yōu)勢。然而,當DevOps享受Docker帶來擴展性、資源利用率和彈性提升的同時,其所面臨的安全隱患同樣值得重視,近日Chris Taschner在SEI上撰文進行了總結(jié)。
以下為譯文
基于容器的虛擬化平臺提供了一種方式在隔離的實例中運行多個應用程序。容器技術(shù)可以為DevOps提供顯著的優(yōu)勢,包括提高系統(tǒng)的擴展性、資源利用率和彈性。然而除下容器與主系統(tǒng)完全解耦,這種使用就會存在潛在的安全隱患。因此,這篇博文主要描述了為什么系統(tǒng)管理員應該密切關(guān)在容器中運行應用所采納的權(quán)限等級,以及用戶訪問主機系統(tǒng)的權(quán)限。
容器已經(jīng)成為DevOps中的新熱點技術(shù)。特別是Docker公司,已經(jīng)成為了提供容器技術(shù)服務(wù)的領(lǐng)頭公司。使用Docker平臺,應用程序極其依賴可以被打包進一個單元,也就是所謂的鏡像。隨后,Docker就可以運行這個鏡像的實例,每個鏡像的實例都是在駐留在容器中。
Docker正成為DevOps的代名詞。如果你還不熟悉容器的優(yōu)勢的話,概括地說,它們包括了可使用的鏡像和易于使用的公共庫、鏡像版本,以及Docker的思想。(欲了解更多信息,請參見 devops.com上的Three Reasons We Use Docker)。
在談到大小時,容器具有很多優(yōu)勢。不像虛擬機,一個容器不需要運行整個操作系統(tǒng),或者對系統(tǒng)的硬件進行拷貝。容器僅僅只需要足夠的操作系統(tǒng)和硬件信息資源來運行它負責托管的應用。所以,容器所消耗的資源比虛擬機小很多,因此同一主機上可以跑的容器肯定比虛擬機多。
而在最小化需要運行的容器上,開發(fā)者需要做好足夠的權(quán)衡。其中一個就是減少容器與系統(tǒng)之間的分離度。與此相反,虛擬機與主機的分離性比容器的更高。Docker用戶需要root用戶權(quán)限去運行容器,如果Docker用戶不知道容器中運行的是什么,這可能會引發(fā)問題。通常,那些repository都是未經(jīng)過審核的,這意味著任何人都可以創(chuàng)建和上傳鏡像。顯然,對從互聯(lián)網(wǎng)上下載下來的容器給以太多的信任會引發(fā)安全問題。
共享命名空間的問題通常是Docker的最大問題。命名空間是系統(tǒng)內(nèi)核所創(chuàng)建的組,它通常會為不同源和區(qū)域指定不同的訪問級別。而究于擴展性,在Docker中并沒有為容器提供不同的命名空間——倘若有數(shù)百個容器在運行,那么每個容器都需要有獨立的命名空間。而且,如果一個容器想要共享存儲,那么所有共享這個存儲的命名空間必須使用顯式訪問。
在回應有關(guān)Docker的安全問題時,這里詳細討論了如何緩解Docker的安全問題。緩解方法的建議包括了限制直接訪問主機和在容器中運行應用的權(quán)限。
除了Doker容器的安全指導,還有其它在確保容器安全方面的建議。共享命名空間的一個潛在解決方案是使用Seccomp,它是一個進程處理工具。Daniel Walsh 在opensource.com上詳細地介紹了這項工作。
管理員必須清楚容器中運行的究竟是什么。從互聯(lián)網(wǎng)上下載來的鏡像應該仔細審核,然后才在敏感的環(huán)境中運行。一般規(guī)則,不像字面意義,容器不應是包含在容器內(nèi)運行的應用程序。