Docker 涉密信息管理介紹
構建更安全的應用程序的一個關鍵因素是與系統和其他應用程序進行安全通信,這通常需要證書、令牌、密碼和其他類型的驗證信息憑證 —— 通常稱為應用程序 涉密信息 。我們很高興可以推出 Docker Secrets,這是一個容器原生的解決方案,它是加強容器安全的 可信賴交付 組件,用戶可以在容器平台上直接集成涉密信息分發功能。
有了容器,現在應用程序是動態的,可以跨越多種環境移植。這使得現存的涉密信息分發的解決方案略顯不足,因為它們都是針對靜態環境。不幸的是,這導致了應用程序涉密信息管理不善的增加,在不安全的、土造的方案中(如將涉密信息嵌入到 GitHub 這樣的版本控制系統或者同樣糟糕的其它方案),這種情況十分常見。
Docker 涉密信息管理介紹
根本上我們認為,如果有一個標準的介面來訪問涉密信息,應用程序就更安全了。任何好的解決方案也必須遵循安全性實踐,例如在傳輸的過程中,對涉密信息進行加密;在不用的時候也對涉密數據進行加密;防止涉密信息在應用最終使用時被無意泄露;並嚴格遵守最低許可權原則,即應用程序只能訪問所需的涉密信息,不能多也不能不少。
通過將涉密信息整合到 Docker 編排,我們能夠在遵循這些確切的原則下為涉密信息的管理問題提供一種解決方案。
下圖提供了一個高層次視圖,並展示了 Docker swarm 模式體系架構是如何將一種新類型的對象 —— 一個涉密信息對象,安全地傳遞給我們的容器。
在 Docker 中,涉密信息是任意的數據塊,比如密碼、SSH 密鑰、TLS 憑證,或者任何其他本質上敏感的數據。當你將一個涉密信息加入 swarm 集群(通過執行 docker secret create
)時,利用在引導新集群時自動創建的內置證書頒發機構,Docker 通過相互認證的 TLS 連接將密鑰發送給 swarm 集群管理器。
$ echo "This is a secret" | docker secret create my_secret_data -
一旦,涉密信息到達某個管理節點,它將被保存到內部的 Raft 存儲區中。該存儲區使用 NACL 開源加密庫中的 Salsa20、Poly1305 加密演算法生成的 256 位密鑰進行加密,以確保從來不會把任何涉密信息數據寫入未加密的磁碟。將涉密信息寫入到內部存儲,賦予了涉密信息跟其它 swarm 集群數據一樣的高可用性。
當 swarm 集群管理器啟動時,包含涉密信息的加密 Raft 日誌通過每一個節點獨有的數據密鑰進行解密。此密鑰以及用於與集群其餘部分通信的節點 TLS 證書可以使用一個集群級的加密密鑰進行加密。該密鑰稱為「解鎖密鑰」,也使用 Raft 進行傳遞,將且會在管理器啟動的時候使用。
當授予新創建或運行的服務許可權訪問某個涉密信息許可權時,其中一個管理器節點(只有管理器可以訪問被存儲的所有涉密信息)會通過已經建立的 TLS 連接將其分發給正在運行特定服務的節點。這意味著節點自己不能請求涉密信息,並且只有在管理器提供給他們的時候才能訪問這些涉密信息 —— 嚴格地控制請求涉密信息的服務。
$ docker service create --name="redis" --secret="my_secret_data" redis:alpine
未加密的涉密信息被掛載到一個容器,該容器位於 /run/secrets/<secret_name>
的內存文件系統中。
$ docker exec $(docker ps --filter name=redis -q) ls -l /run/secrets
total 4
-r--r--r-- 1 root root 17 Dec 13 22:48 my_secret_data
如果一個服務被刪除或者被重新安排在其他地方,集群管理器將立即通知所有不再需要訪問該涉密信息的節點,這些節點將不再有權訪問該應用程序的涉密信息。
$ docker service update --secret-rm="my_secret_data" redis
$ docker exec -it $(docker ps --filter name=redis -q) cat /run/secrets/my_secret_data
cat: can't open '/run/secrets/my_secret_data': No such file or directory
查看 Docker Secret 文檔以獲取更多信息和示例,了解如何創建和管理您的涉密信息。同時,特別感謝 Laurens Van Houtven 與 Docker 安全和核心團隊合作使這一特性成為現實。
通過 Docker 更安全地使用應用程序
Docker 涉密信息旨在讓開發人員和 IT 運營團隊可以輕鬆使用,以用於構建和運行更安全的應用程序。它是首個被設計為既能保持涉密信息安全,並且僅在特定的容器需要它來進行必要的涉密信息操作的時候使用。從使用 Docker Compose 定義應用程序和涉密數據,到 IT 管理人員直接在 Docker Datacenter 中部署的 Compose 文件,涉密信息、網路和數據卷都將加密並安全地與應用程序一起傳輸。
更多相關學習資源:
- 1.13 Docker 數據中心具有 Secrets、安全掃描、容量緩存等新特性
- 下載 Docker 且開始學習
- 在 Docker 數據中心嘗試使用 secrets
- 閱讀文檔
- 參與 即將進行的在線研討會
via: https://blog.docker.com/2017/02/docker-secrets-management/
作者:Ying Li 譯者:HardworkFish 校對:imquanquan, wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive