【轉載】詳解Docker 最低特權編排原則,安全與效率並行!(二)
寫在前麵
Docker 平台和容器已經逐漸成為打包、部署和管理應用程序的標準。為了讓容器在集群中於多節點間協調運行,這就需要一個關鍵功能:容器編排工具(container orchestrator)。上一篇我們著重介紹了第一部分信任引導和節點介紹與第二部分節點身份簽發和管理的相關內容(請參考文章:詳解Docker 最低特權編排原則,安全與效率並行!(一)),下麵小編將對容器編排的餘下部分進行詳細解讀。
回顧:默認安全核心
IT領域有一個安全準則,它規定:如果不是默認的,就沒有人會使用它。 Docker Swarm Mode將這一理念帶入產品中,並配有默認機製來解決編排生命周期中最困難和最重要的三個方麵(本篇將介紹第三個方麵):
- 信任引導和節點介紹;
- 節點身份簽發和管理;
- 對認證、授權、加密過的信息進行存儲和分發;
對認證、授權、加密過的信息進行存儲和分發
在Swarm的正常運行期間,相關任務的信息必須發送到工作節點執行。這不僅提供了該節點將執行哪個容器的信息,而且還提供了成功執行該容器所需的全部資源以及一些敏感的秘密信息,如私鑰、密碼和API令牌。
安全傳遞
事實上,參與Swarm 的每個節點都擁有在X509證書形式中的唯一身份。節點之間的安全通信是不重要的:節點可以使用他們各自的證書來建立彼此之間已認證的連接,繼承其機密性、TLS的真實性和完整性。
關於Swarm Mode 的一個有趣的細節是它所使用的推送模型:即隻允許管理人員向工作人員發送信息——極大的減少了管理員節點的攻擊平麵。
把工作負載精確的分離到安全區
管理員節點的職責之一是決定應該向哪些工作節點發送哪些任務。管理者運用多種策略來做出決定,根據每個節點的獨特屬性和每個節點的工作負載來調度整個Swarm中的工作負載。
在具有Swarm Mode的Docker 企業版(EE)中,管理員可以通過使用安全附加到各個節點身份的標簽來影響這些調度決策。這些標簽允許管理員將節點分組到不同的安全區域,從而限製對特定敏感工作負載的暴露以及與之相關的任何秘密。
安全、秘密信息的分發
除了促進身份簽發過程之外,管理員節點還具有存儲和分發工作人員所需資源的重要任務。對待秘密信息就如同對待任何其它類型的資源一樣,通過安全的mTLS進行連接,使其從管理員節點分發到工作人員節點。
在主機上,Docker企業版(EE)確保將秘密信息隻提供給他們預定的容器。同一主機上的其他容器將無法訪問這些內容。Docker向容器所公開的秘密信息隻是作為一個臨時文件係統,並且Docker確保這些秘密信息總是存儲在內存中,永遠不會存儲到磁盤上。這種方法比其它競爭者的替代方案更加安全,一旦任務完成,秘密信息就永遠消失了。
儲存秘密信息
在管理者的主機上,秘密信息總是在休息時下進行加密。默認情況下,加密這些秘密信息(被稱為DEK)的密鑰也存儲在磁盤中的純文本裏。這使得那些最低安全需求的人可以很容易的開始使用Docker Swarm mode。
但是,您一旦運行了生產集群,我們將建議您啟用自動鎖定模式。當啟用自動鎖定模式時,使用單獨的密鑰加密密鑰(KEK)對新更新的DEK進行加密。此密鑰永遠不會存儲在群集上,管理員負責安全地存儲它,並在集群啟動時提供它,這被稱為Swarm解鎖。
Swarm Mode支持多個管理員模式,根據Raft Consensus Algorithm來進行容錯管理。在這種情況下,安全的秘密信息存儲可以進行無縫擴展。除了共享密鑰之外,每個管理員主機都擁有唯一的磁盤加密密鑰。此外,Raft日誌也在磁盤上進行了同樣的加密處理,並且在自動鎖定模式下,如果沒有KEK,同樣無法對其進行解密處理。
當節點受到威脅時會發生什麼?
在傳統的編排中,對受到劫持的主機進行恢複是一個緩慢而複雜的過程。如今使用Swarm Mode,恢複它就像運行docker rm命令一樣簡單,它將從集群中刪除受到影響的節點。Docker將會處理其餘部分,即重新調整服務,以確保其他主機清楚不會與受到影響的節點進行通信。
正如我們所看到的,由於最低特權編排原則,即使攻擊者仍然活躍在主機上,管理員也可以從網絡的其餘部分將它們切斷。這個代表其身份的主機證書也將會被管理員列入黑名單,並視其為無效證書。
總結
在具有Swarm Mode的Docker 企業版(EE)中,默認情況下確保了所有關鍵領域的安全:
- 加入群集——防止惡意節點加入群集;
- 將主機組織到安全區域——防止攻擊者橫向移動;
- 調度任務——任務隻簽發給指定和認證過的節點;
- 存儲秘密信息——從不以明文形式存儲,也從不在工作人員節點上寫入磁盤;
- 與工作人員節點交流——使用相互驗證的TLS進行加密;
隨著Swarm Mode的不斷改進,Docker團隊正在努力的將最低特權容器編排原則進一步推進。我們正在處理的任務是:如果管理員節點遭到入侵,如何保證係統安全?路徑圖已經就位,其中的一些功能已經可以使用,例如對具體的Docker鏡像列出白名單,預防管理員隨意的分發工作負載。這些功能都可以通過使用Docker Content Trust來實現。
最後更新:2017-10-27 23:03:33