保護(hù)Docker容器安全的14個最佳實踐
應(yīng)用程序的容器化,是將應(yīng)用程序代碼及其依賴項(包括所需的庫、框架及配置文件)一股腦打包到虛擬容器當(dāng)中。這種方法能夠極大提升可移植性,確保應(yīng)用程序在不同計算環(huán)境及基礎(chǔ)設(shè)施當(dāng)中擁有一致的運(yùn)行效果,且不致降低效率。作為當(dāng)前最流行的容器平臺,無數(shù)企業(yè)正在使用Docker開發(fā)應(yīng)用程序以實現(xiàn)有效優(yōu)化、高度可擴(kuò)展、可移植、敏捷的優(yōu)勢。
通過輕量級運(yùn)行時環(huán)境,Docker容器能夠共享底層操作系統(tǒng)以托管支持DevOps環(huán)境的應(yīng)用程序。作為云原生框架中的關(guān)鍵元素,Docker能夠為企業(yè)的軟件開發(fā)生命周期(SDLC)帶來一系列助益。當(dāng)然,收益的背后總有風(fēng)險。Docker的介入往往會帶來新的復(fù)雜性,特別是在Docker框架的安全保護(hù)方面。
默認(rèn)情況下,Docker容器非常安全。但大家必須了解可能存在的漏洞,并采取相應(yīng)方法來防范潛在的安全風(fēng)險。在本文中,我們將著眼于基礎(chǔ)設(shè)施、鏡像、訪問與身份驗證這三個關(guān)鍵領(lǐng)域聊聊Docker架構(gòu)保護(hù)方面的最佳實踐。
保護(hù)Docker基礎(chǔ)設(shè)施
由于容器本身是云原生的基礎(chǔ),保護(hù)它們免受潛在攻擊侵害就成了整個容器生命周期當(dāng)中的一項關(guān)鍵工作。保護(hù)此類框架的整體方法不僅是要保護(hù)Docker容器,更需要捍衛(wèi)處于更底層的基礎(chǔ)設(shè)施。
下面我們從基礎(chǔ)設(shè)施保護(hù)的最佳實踐出發(fā),看看這些方法的具體起效方式。
實踐一 定期更新Docker版本
保護(hù)基礎(chǔ)設(shè)施的第一件事,就是需要保證Docker版本始終最新。陳舊的版本很容易受到安琪攻擊。新版本則通常包含解決舊版本漏洞的補(bǔ)丁與bug修復(fù)。
主機(jī)環(huán)境同樣如此,企業(yè)需要確保所支持的應(yīng)用程序為最新,而且不存在已知的bug或安全漏洞。
實踐二 保持容器精益和清潔
容器環(huán)境的擴(kuò)展會擴(kuò)大攻擊面,而且要比精益設(shè)置更易受到安全漏洞的影響。為了避免這種情況,運(yùn)維人員需要將容器配置為僅包含按預(yù)期方式運(yùn)行所必要的組件——軟件包、庫、配置文件。
此外,企業(yè)需要定期檢查主機(jī)實例中是否存在未使用的容器和基礎(chǔ)鏡像,及時清理掉這些多余的部分。
實踐三 配置API與網(wǎng)絡(luò)
Docker Engine使用HTTP API實現(xiàn)跨網(wǎng)絡(luò)通信。而API的配置錯誤有可能遺留下可被黑客利用的安全漏洞。
為了避免這種情況,需要通過安全配置限制容器公開的API,借此實現(xiàn)容器保護(hù)。一種可行的方法,是啟用基于證書的身份驗證以強(qiáng)制加密通信內(nèi)容。
實踐四 限制系統(tǒng)資源使用
限制各個容器所能使用的基礎(chǔ)設(shè)施資源比例,具體資源類型包括CPU、內(nèi)存、網(wǎng)絡(luò)帶寬。
Docker使用控制組來限制不同進(jìn)程之間的資源分配與分發(fā)。這種方法能夠防止受到感染的容器消耗掉過多基礎(chǔ)設(shè)施資源,避免安全漏洞被攻擊者利用時發(fā)生服務(wù)宕機(jī)問題。
實踐五 保持主機(jī)隔離
在不同的主機(jī)上來運(yùn)行具有不同安全要求的容器,通過不同的命名空間保持容器隔離,借此保證關(guān)鍵數(shù)據(jù)免受全面攻擊的影響。這種方法還能防止相鄰容器在同一資源池內(nèi)消耗過多資源,進(jìn)而影響其他容器的運(yùn)行性能。
實踐六 限制容器權(quán)限
默認(rèn)情況下,Docker容器可以維持并獲取多種額外權(quán)限。這些權(quán)限可能與其核心服務(wù)需求相關(guān),也可能并無關(guān)聯(lián)。
作為一項最佳實踐,大家應(yīng)將容器的權(quán)限控制在運(yùn)行自身應(yīng)用程序的必要水平上。為此,請使用以下命令刪除Docker容器的所有權(quán)限:
在此之后,使用-cap-add標(biāo)記向容器添加特定權(quán)限。這種方法能夠限制Docker容器因安全漏洞而遭到利用時,向攻擊者提供不必要的過高權(quán)限。
實踐七 過濾系統(tǒng)調(diào)用
使用系統(tǒng)調(diào)用過濾器,借此為容器指定能夠?qū)inux內(nèi)核執(zhí)行的具體調(diào)用。
這種方法能夠支持安全計算模式,從而減少潛在的暴露點(diǎn)以避免安全事故——特別是對內(nèi)核漏洞的利用。
保護(hù)Docker鏡像
現(xiàn)在,讓我們轉(zhuǎn)向基礎(chǔ)設(shè)施之外的安全最佳實踐。Docker鏡像實際就是用于創(chuàng)建容器和托管應(yīng)用程序的可執(zhí)行代碼模板。Docker鏡像由運(yùn)行時加上root文件系統(tǒng)組合,它也是Docker容器最關(guān)鍵的基礎(chǔ)之一。
在保護(hù)Docker鏡像時,請遵循以下幾項最佳實踐。
實踐八 使用可信鏡像
僅從最新且正確配置的受信來源獲取Docker基礎(chǔ)鏡像。
另外,啟用Docker內(nèi)容信任功能以過濾掉不安全的可疑來源,確保Docker鏡像擁有正確簽名。
實踐九 定期掃描鏡像
維護(hù)Docker鏡像良好安全態(tài)勢的一大關(guān)鍵,在于定期執(zhí)行鏡像漏洞掃描。除了在下載鏡像時執(zhí)行初始掃描之外,還應(yīng)定期復(fù)檢以確保鏡像可以安全使用。
通過定期鏡像掃描,企業(yè)還可以通過審計關(guān)鍵文件與目錄,以及使用最新安全補(bǔ)丁保持持續(xù)更新的方式最大限度降低暴露風(fēng)險。
實踐十 優(yōu)先使用最小基礎(chǔ)鏡像
避免在較小的鏡像需求中使用較大的通用型Docker鏡像,這能有效降低安全漏洞發(fā)生幾率,從而縮小攻擊面、避免使用易受黑客攻擊的默認(rèn)配置。
訪問與身份驗證管理
Docker安全的最后一項重點(diǎn),在于訪問與身份驗證。通過訪問控制保護(hù)Docker守護(hù)進(jìn)程,正是從業(yè)者們常說的第一安全層。如果沒有Docker守護(hù)程序的加持,底層運(yùn)營、應(yīng)用程序、業(yè)務(wù)功能、實施最低權(quán)限用戶等一切都將暴露在風(fēng)險當(dāng)中。
實踐十一 實施最低權(quán)限用戶
默認(rèn)情況下,Docker容器中的進(jìn)行具有root權(quán)限,因此有權(quán)訪問容器及主機(jī)管理操作。而一旦被黑客利用,容器與底層主機(jī)中的漏洞將構(gòu)成巨大的威脅。
為了避免這些漏洞,請設(shè)置最低權(quán)限用戶,僅為該用戶授權(quán)運(yùn)行容器所需的必要權(quán)限;蛘撸部梢哉{(diào)整運(yùn)行時配置以禁止使用高權(quán)限用戶。
實踐十二 使用secret管理工具
永遠(yuǎn)不要將secret存儲在Dockerfile當(dāng)中,避免有權(quán)訪問Dockerfile的用戶將這些機(jī)密信息放置在不當(dāng)位置、加以濫用甚至危及整個框架的總體安全水平。
標(biāo)準(zhǔn)最佳實踐要求在第三方工具(例如Hashicorp Vault)當(dāng)中安全存放加密密鑰secret,企業(yè) 可以對訪問憑證以外的其他容器secret采取相同的保護(hù)方法。
實踐十三 限制對容器文件的直接訪問
瞬態(tài)容器需要統(tǒng)一的升級與bug修復(fù)支持。因此,每當(dāng)用戶訪問此類容器文件時都會導(dǎo)致文件內(nèi)容暴露。
作為最佳實踐,請在容器之外維護(hù)容器日志。這將大大減少容器文件的統(tǒng)一直接使用,還能幫助團(tuán)隊在無需訪問容器目錄內(nèi)日志的情況下完成調(diào)試與問題處理。
實踐十四 啟用加密通信
將Docker守護(hù)程序的訪問權(quán)限限定在少數(shù)關(guān)鍵用戶之內(nèi)。此外,對一般用戶強(qiáng)制執(zhí)行僅限SSH訪問,借此控制他們對容器文件的直接訪問能力。
同時,使用TLS證書加密主機(jī)級通信。禁用未使用的端口,并保證默認(rèn)端口僅可供內(nèi)部使用。
結(jié)語
保障IT環(huán)境中的安全性,已經(jīng)成為一項不容忽視的重要任務(wù)。保護(hù)Docker,就是保護(hù)我們的IT環(huán)境。
云原生框架的保護(hù),應(yīng)該始終以考量框架中的關(guān)鍵元素為起點(diǎn)。因此,企業(yè)應(yīng)建立并維持一套以容器及其底層基礎(chǔ)設(shè)施為中心的強(qiáng)大安全體系。
盡管具體的端到端安全實施方法可能有所不同,但我們的目標(biāo)只有一個——發(fā)現(xiàn)漏洞點(diǎn),以最佳實踐為武器最大程度降低風(fēng)險。

