保護Docker容器安全的14個最佳實踐
應用程序的容器化,是將應用程序代碼及其依賴項(包括所需的庫、框架及配置文件)一股腦打包到虛擬容器當中。這種方法能夠極大提升可移植性,確保應用程序在不同計算環境及基礎設施當中擁有一致的運行效果,且不致降低效率。作為當前最流行的容器平臺,無數企業正在使用Docker開發應用程序以實現有效優化、高度可擴展、可移植、敏捷的優勢。
通過輕量級運行時環境,Docker容器能夠共享底層操作系統以托管支持DevOps環境的應用程序。作為云原生框架中的關鍵元素,Docker能夠為企業的軟件開發生命周期(SDLC)帶來一系列助益。當然,收益的背后總有風險。Docker的介入往往會帶來新的復雜性,特別是在Docker框架的安全保護方面。
默認情況下,Docker容器非常安全。但大家必須了解可能存在的漏洞,并采取相應方法來防范潛在的安全風險。在本文中,我們將著眼于基礎設施、鏡像、訪問與身份驗證這三個關鍵領域聊聊Docker架構保護方面的最佳實踐。
保護Docker基礎設施
由于容器本身是云原生的基礎,保護它們免受潛在攻擊侵害就成了整個容器生命周期當中的一項關鍵工作。保護此類框架的整體方法不僅是要保護Docker容器,更需要捍衛處于更底層的基礎設施。
下面我們從基礎設施保護的最佳實踐出發,看看這些方法的具體起效方式。
實踐一 定期更新Docker版本
保護基礎設施的第一件事,就是需要保證Docker版本始終最新。陳舊的版本很容易受到安琪攻擊。新版本則通常包含解決舊版本漏洞的補丁與bug修復。
主機環境同樣如此,企業需要確保所支持的應用程序為最新,而且不存在已知的bug或安全漏洞。
實踐二 保持容器精益和清潔
容器環境的擴展會擴大攻擊面,而且要比精益設置更易受到安全漏洞的影響。為了避免這種情況,運維人員需要將容器配置為僅包含按預期方式運行所必要的組件——軟件包、庫、配置文件。
此外,企業需要定期檢查主機實例中是否存在未使用的容器和基礎鏡像,及時清理掉這些多余的部分。
實踐三 配置API與網絡
Docker Engine使用HTTP API實現跨網絡通信。而API的配置錯誤有可能遺留下可被黑客利用的安全漏洞。
為了避免這種情況,需要通過安全配置限制容器公開的API,借此實現容器保護。一種可行的方法,是啟用基于證書的身份驗證以強制加密通信內容。
實踐四 限制系統資源使用
限制各個容器所能使用的基礎設施資源比例,具體資源類型包括CPU、內存、網絡帶寬。
Docker使用控制組來限制不同進程之間的資源分配與分發。這種方法能夠防止受到感染的容器消耗掉過多基礎設施資源,避免安全漏洞被攻擊者利用時發生服務宕機問題。
實踐五 保持主機隔離
在不同的主機上來運行具有不同安全要求的容器,通過不同的命名空間保持容器隔離,借此保證關鍵數據免受全面攻擊的影響。這種方法還能防止相鄰容器在同一資源池內消耗過多資源,進而影響其他容器的運行性能。
實踐六 限制容器權限
默認情況下,Docker容器可以維持并獲取多種額外權限。這些權限可能與其核心服務需求相關,也可能并無關聯。
作為一項最佳實踐,大家應將容器的權限控制在運行自身應用程序的必要水平上。為此,請使用以下命令刪除Docker容器的所有權限:

在此之后,使用-cap-add標記向容器添加特定權限。這種方法能夠限制Docker容器因安全漏洞而遭到利用時,向攻擊者提供不必要的過高權限。
實踐七 過濾系統調用
使用系統調用過濾器,借此為容器指定能夠對Linux內核執行的具體調用。
這種方法能夠支持安全計算模式,從而減少潛在的暴露點以避免安全事故——特別是對內核漏洞的利用。
保護Docker鏡像
現在,讓我們轉向基礎設施之外的安全最佳實踐。Docker鏡像實際就是用于創建容器和托管應用程序的可執行代碼模板。Docker鏡像由運行時加上root文件系統組合,它也是Docker容器最關鍵的基礎之一。
在保護Docker鏡像時,請遵循以下幾項最佳實踐。
實踐八 使用可信鏡像
僅從最新且正確配置的受信來源獲取Docker基礎鏡像。
另外,啟用Docker內容信任功能以過濾掉不安全的可疑來源,確保Docker鏡像擁有正確簽名。
實踐九 定期掃描鏡像
維護Docker鏡像良好安全態勢的一大關鍵,在于定期執行鏡像漏洞掃描。除了在下載鏡像時執行初始掃描之外,還應定期復檢以確保鏡像可以安全使用。
通過定期鏡像掃描,企業還可以通過審計關鍵文件與目錄,以及使用最新安全補丁保持持續更新的方式最大限度降低暴露風險。
實踐十 優先使用最小基礎鏡像
避免在較小的鏡像需求中使用較大的通用型Docker鏡像,這能有效降低安全漏洞發生幾率,從而縮小攻擊面、避免使用易受黑客攻擊的默認配置。
訪問與身份驗證管理
Docker安全的最后一項重點,在于訪問與身份驗證。通過訪問控制保護Docker守護進程,正是從業者們常說的第一安全層。如果沒有Docker守護程序的加持,底層運營、應用程序、業務功能、實施最低權限用戶等一切都將暴露在風險當中。
實踐十一 實施最低權限用戶
默認情況下,Docker容器中的進行具有root權限,因此有權訪問容器及主機管理操作。而一旦被黑客利用,容器與底層主機中的漏洞將構成巨大的威脅。
為了避免這些漏洞,請設置最低權限用戶,僅為該用戶授權運行容器所需的必要權限。或者,也可以調整運行時配置以禁止使用高權限用戶。
實踐十二 使用secret管理工具
永遠不要將secret存儲在Dockerfile當中,避免有權訪問Dockerfile的用戶將這些機密信息放置在不當位置、加以濫用甚至危及整個框架的總體安全水平。
標準最佳實踐要求在第三方工具(例如Hashicorp Vault)當中安全存放加密密鑰secret,企業 可以對訪問憑證以外的其他容器secret采取相同的保護方法。
實踐十三 限制對容器文件的直接訪問
瞬態容器需要統一的升級與bug修復支持。因此,每當用戶訪問此類容器文件時都會導致文件內容暴露。
作為最佳實踐,請在容器之外維護容器日志。這將大大減少容器文件的統一直接使用,還能幫助團隊在無需訪問容器目錄內日志的情況下完成調試與問題處理。
實踐十四 啟用加密通信
將Docker守護程序的訪問權限限定在少數關鍵用戶之內。此外,對一般用戶強制執行僅限SSH訪問,借此控制他們對容器文件的直接訪問能力。
同時,使用TLS證書加密主機級通信。禁用未使用的端口,并保證默認端口僅可供內部使用。
結語
保障IT環境中的安全性,已經成為一項不容忽視的重要任務。保護Docker,就是保護我們的IT環境。
云原生框架的保護,應該始終以考量框架中的關鍵元素為起點。因此,企業應建立并維持一套以容器及其底層基礎設施為中心的強大安全體系。
盡管具體的端到端安全實施方法可能有所不同,但我們的目標只有一個——發現漏洞點,以最佳實踐為武器最大程度降低風險。