docker安全特性有:1、加密節點ID;2、基於TLS的認證機制;3、安全准入令牌;4、支援週期性證書自動更新的CA設定;5、加密叢集儲存;6、加密網路;7、Docker安全掃描;8、Docker內容信任;9、Docker金鑰等等。
本教學操作環境:linux5.9.8系統、docker-1.13.1版、Dell G3電腦。
Docker 平臺還引入了大量自有安全技術。Swarm 模式基於 TLS 構建,並且設定上極其簡單靈活。安全掃描對映象進行二進位制原始碼級別掃描,並提供已知缺陷的詳細報告。
Docker 內容信任允許使用者對內容進行簽名和認證,金鑰目前也是 Docker 中的一等公民。Docker 為這些安全技術設定了合理的預設值,但是使用者也可以自行修改設定,或者禁用這些安全技術。
Swarm 模式
Swarm 模式是 Docker 未來的趨勢。Swarm 模式支援使用者叢集化管理多個 Docker 主機,同時還能通過宣告式的方式部署應用。
每個 Swarm 都由管理者和工作者節點構成,節點可以是 Linux 或者 Windows。管理者節點構成了叢集中的控制層,並負責叢集設定以及工作負載的分配。工作者節點就是執行應用程式碼的容器。
正如所預期的,Swarm 模式包括很多開箱即用的安全特性,同時還設定了合理的預設值。這些安全特性包括以下幾點。
加密節點 ID。
基於 TLS 的認證機制。
安全准入令牌。
支援週期性證書自動更新的 CA 設定。
加密叢集儲存(設定 DB)。
加密網路。
Docker 安全掃描
快速發現程式碼缺陷的能力至關重要。Docker 安全掃描功能使得對 Docker 映象中已知缺陷的檢測工作變得簡單。
Docker 安全掃描已經可以用於 Docker Hub 上私有倉庫的映象了。同時該技術還可以作為 Docker 可信服務在地化部署解決方案的一部分。最後,所有官方 Docker 映象都經過了安全掃描,掃描報告在其倉庫中可以查閱。
Docker 安全掃描對 Docker 映象進行二進位制程式碼級別的掃描,對其中的軟體根據已知缺陷資料庫(CVE 資料庫)進行檢查。在掃描執行完成後,會生成一份詳細報告。
開啟瀏覽器存取 Docker Hub,並搜尋 Alpine 倉庫。下圖展示了官方 Alpine 倉庫的 Tags 分頁。
Alpine 倉庫是官方倉庫,這意味著該倉庫會自動掃描並生成對應報告。可以看到,映象標籤為 edge、lates 以及 3.6 的映象都通過了已知缺陷的檢查。但是 alpine:3.5 映象存在已知缺陷(標紅)。
如果開啟 alpine:3.5 映象,可以發現如下圖所示的詳細資訊。
這是發現自己軟體中已知缺陷詳情的一種簡單方式。
Docker 可信映象倉庫服務(Docker Trusted Registry, DTR),屬於 Docker 企業版中在地化映象倉庫服務的一部分內容,提供了相同的 Capability,同時還允許使用者自行控制其映象掃描時機以及掃描方式。
例如,DTR 允許使用者選擇映象是在推播時自動觸發掃描,還是隻能手工觸發。同時 DTR 還允許使用者手動更新 CVE 資料庫,這對於 DTL 無法進行聯網來自動更新 CVE 資料的場景來說,是一種理想的解決方案。
這就是 Docker 安全掃描,一種深入檢測 Docker 映象是否存在已知安全缺陷的好方式。當然,能力越大責任越大,當使用者發現缺陷後,就需要承擔解決相應缺陷的責任了。
Docker 內容信任
Dockr 內容信任(Docker Content Trust,DCT)使得使用者很容易就能確認所下載映象的完整性以及其釋出者。在不可信任的網路環境中下載映象時,這一點很重要。
從更高層面來看,DCT 允許開發者對釋出到 Docker Hub 或者 Docker 可信服務的映象進行簽名。當這些映象被拉取的時候,會自動確認簽名狀態。下圖展示了這一過程。
DCT 還可以提供關鍵上下文,如映象是否已被簽名從而可用於生產環境,映象是否被新版本取代而過時等。
DTC 提供的上下文還在初期,設定起來相當複雜。在 Docker 主機上啟用 DCT 功能,所要做的只是在環境中將 DOCKER_CONTENT_TRUST 變數設定為 1。
$ export DOCKER_CONTENT_TRUST=1
在實際環境中,使用者可能希望在系統中預設開啟該特性。
如果使用 Docker 統一設定層(Docker 企業版的一部分),需要勾選下圖所示 Run Only Signed Images 複選項。這樣會強制所有在 UCP 叢集中的節點只執行已簽名映象。
由上圖中可知,UCP 在 DCT 的基礎上進行進一步封裝,提供了已簽名映象的安全偏好設定資訊。例如,使用者可能有這樣的需求:在生產環境中只能使用由 secops 簽名的映象。
一旦 DCT 功能開啟,就不能獲取並使用未簽名映象了。下圖展示了開啟 DCT 之後,如果再次嘗試通過 Docker CLI 或者 UCP Web UI 介面拉取未簽名映象時所報的錯誤(兩個範例都嘗試拉取標籤為「unsigned」的映象)。
下圖展示了 DCT 是如何阻止 Docker 使用者端拉取一個被篡改的映象的。
下圖展示了 DCT 如何阻止使用者端拉取舊映象。
Docker 內容信任是一種很重要的技術,能幫助使用者檢查從 Docker 服務中拉取的映象。該技術的基礎模式設定起來非常簡單,但是類似上下文等一些高階特性,現階段設定起來還是非常複雜的。
Docker 金鑰
很多應用都需要金鑰。比如密碼、TLS 證書、SSH key 等。
在 Docker1.13 版本之前,沒有一種標準且安全的方式能讓金鑰在應用間實現共用。常見的方式是開發人員將金鑰以文字的方式寫入環境變數。這與理想狀態差距甚遠。
Docker1.13 引入了 Docker 金鑰,將金鑰變成 Docker 生態系統中的一等公民。例如,增加了一個新的子命令 docker secret 來管理金鑰。在 Docker 的 UCP 介面中,也有專門的地方來建立和管理金鑰。
在後臺,金鑰在建立後以及傳輸中都是加密的,使用時被掛載到記憶體檔案系統,並且只對那些已經被授權了的服務開放存取。這確實是一種綜合性的端到端解決方案。
下圖展示了其總體流程。
下面依次介紹上圖中所示工作流的每一步。
1) 金鑰被建立,並且傳送到 Swarm。
2) 金鑰存放在叢集儲存當中,並且是加密的(每個管理者節點都能存取叢集儲存)。
3) B 服務被建立,並且使用了該金鑰。
4) 金鑰傳輸到 B 服務的任務節點(容器)的過程是加密的。
5) B 服務的容器將金鑰解密並掛載到路徑 /run/secrets 下。這是一個臨時的記憶體檔案系統(在 Windows Docker 中該步驟有所不同,因為 Windows 中沒有記憶體檔案系統這個概念)。
6) 一旦容器(服務任務)完成,記憶體檔案系統關閉,金鑰也隨之刪除。
7) A 服務中的容器不能存取該金鑰。
使用者可以通過 docker secret 子命令來管理金鑰,可以通過在執行 docker service create 命令時附加 --secret,從而為某個服務指定金鑰。
推薦學習:《》
以上就是docker安全特性有哪些的詳細內容,更多請關注TW511.COM其它相關文章!