因爲容器虛擬化技術能夠充分利用硬件資源,對於開發團隊就像夢想照進了現實。儘管容器化沒有推翻虛擬機在企業應用開發和部署上的地位,可是Docker等工具在實現開發、測試和部署大規模現代軟件的速度和敏捷性方面大展身手。Docker容器具備諸多優勢:無需複雜的hypervisor、可移植性、資源隔離性、輕量級、開放標準、完美適應微服務架構。衆多的應用經過容器隔離起來,相互獨立地運行在同一臺宿主機上,哪家公司不喜歡呢?docker
容器的速度和易用性帶來了無限的可能,開發團隊很容易被吸引。迄今爲止,Docker容器的下載量已經超過4個億。可是,對於容器化的擔心真真切切地存在。若是你被一時的熱情衝昏了頭腦,反而會拔苗助長,沒法利用容器的潛力,阻礙開發的快速迭代和創新。若是你的公司決定要安全地擁抱docker,你須要謹慎地處理安全問題並避免牛仔編程文化。shell
須要澄清的是,Docker聲稱本身是安全的,但關鍵在於你必須負責任地使用。當你開始使用Docker,你會在鏡像倉庫(repos)發現有不少可下載的模板(「images」),它提供了一條編寫微服務應用的捷徑,從而大大加快開發速度。問題是你如何判斷哪些images是安全的,是否包含漏洞。我的開發者可能不太關心Image的漏洞,可是對於企業,安全和數據審查是相當重要的,必須有人維護。那麼問題就來了:如何將企業的安全策略應用於Docker呢?編程
非營利組織網絡安全中心(CIS)針對docker的安全配置發佈了一個詳盡的、超過100頁的基準測試結果,有一些特定的點須要關注一下。安全
全部容器都來源於鏡像,比較典型的是操做系統及其附屬項(shell, default users, libraries, 依賴包)。正如Docker安全的一個頁面上所描述:Docker容器運行的一個主要風險是:默認設置提供的隔離多是不完善的,一方面是由於配置參數時只能考慮單個因素,另外一方面鏡像可能包含操做系統漏洞。所以,這須要使用者去修改容器配置和驗證鏡像——這條規則適用於每個容器。網絡
Agent能夠協助你設置容器的安全參數,由於它可以自動獲取鏡像(image)的信息並將其展示給你。雖然Docker Hub上的鏡像在不斷檢查、共享和更新,你不能依賴郵件列表和問題報告來發現和管理漏洞。單個容器的安全仍然須要用戶本身去負責,因此你須要本身去檢查依賴。你的鏡像倉庫裏有哪些鏡像,鏡像是如何運做的,你都應該理解,而且擁有本身的掃描和檢查機制。Agent很適合作這項工做,由於不論是運行在宿主機上,仍是容器中,Agent的系統開銷都很小。架構
運行容器最安全的方式之一是是在只讀模式下運行,容器不能被修改,而對於其餘人訪問的權限都沒有。若是你在只讀模式下運行,就不須要給每一個容器配置一個agent了,也能夠重用你驗證過的鏡像。若是容器以讀/寫模式運行,最好的作法是在每一個容器一個代理。同時設定一些規則,不容許從公有倉庫下載鏡像,也不容許root下運行容器。負載均衡
一個運行的容器能夠暴露端口到宿主機的任何一個網卡(network interface)——這是極其危險的。一個解決辦法是隻暴露宿主機的一個網卡到外網,任何外部來的請求,好比入侵檢測,入侵預防、防火牆、負載均衡等均經過這個網卡處理。容器端口也應該綁定到宿主機上一個受權的可信端口。微服務
Docker支持不少安全加強選項,但默認狀況下是沒有設置的。所以,你須要一個Linux專家來管理基礎設施,以保證Docker容器正常運做,並防止宿主機被誤配置。工具
總的來講,企業使用Docker的最佳策略是結合CIS基準安全測試與企業現有的安全策略,爲企業內的Docker容器創建一套安全配置「姿式」,並給開發團隊創造一個安全的實驗環境。測試
本文由時速雲工程師趙帥龍編譯,原文連接:企業級容器安全最佳實踐