Docker平臺提供主要的安全技術有哪些?

      網友投稿 782 2022-05-30

      本節會介紹由docker平臺提供的主要的安全技術。

      1.Swarm模式

      正如所預期的,Swarm模式包括很多開箱即用的安全特性,同時還設置了合理的默認值。這些安全特性包括以下幾點。

      加密節點ID。

      基于TLS的認證機制。

      安全準入令牌。

      支持周期性證書自動更新的CA配置。

      加密集群存儲(配置DB)。

      加密網絡。

      接下來將詳細介紹如何構建安全的Swarm,以及如何進行安全相關的配置。

      為了完成下面的內容,讀者需要至少3個Docker主機,每個都運行1.13或者更高版本的Docker。示例中3個Docker主機分別叫作“mgr1”“mgr2”“wrk1”。每臺主機上都安裝Ubuntu 16.04,其上運行了Docker 18.01.0-ce。同時還有一個網絡負責聯通3臺主機,并且主機之間可? 以通過名稱互相ping通。安裝完成后如圖15.6所示。

      圖15.6 3個Docker主機

      (1)配置安全的Swarm集群

      讀者可以在其Swarm集群管理者節點上運行下面的命令。在本例中,命令運行于“mgr1”節點之上。

      上面的命令就是配置安全Swarm集群所要做的全部工作!

      實驗環境如圖15.7所示。

      圖15.7 實驗環境

      現在將“mgr2”節點加入到集群中,作為額外的管理者節點。

      將新的管理者節點加入到Swarm需要兩步。第一步,需要提取加入管理者到集群中所需的令牌;第二步,在“mgr2”節點上執行docker swarm join命令。只要將管理者準入令牌作為docker swarm join命令的一部分,“mgr2”就作為管理者節點加入Swarm。

      在“mgr1”上運行下面的命令獲取管理者準入令牌。

      命令輸出內容給出了管理者加入Swarm所需運行的準確命令。準入令牌和IP地址在讀者自己的實驗環境中是不一樣的。

      復制該命令并在“mgr2”節點上運行。

      “mgr2”現在已經作為另一個管理者加入Swarm。

      可以通過在任意管理者節點上運行docker node ls命令來確認上述操作。

      上述輸出內容中顯示“mgr1”和“mgr2”都加入了Swarm,并且都是Swarm管理者。最新的配置如圖15.8所示。

      圖15.8 “mgr1”和“mgr2”都加入了Swarm

      兩個管理者這個數量,大概是最糟糕的一種情況了。但是這只是一個實驗環境,而不是什么核心業務生產環境,所以糟糕點也無所謂。

      復制如下所示命令到“wrk1”上并且運行。

      在任意Swarm管理者上運行docker node ls命令。

      圖15.9 將管理者配置為高可用(HA)

      (2)了解Swarm安全背后的原理

      到目前為止,讀者已經成功搭建了安全的Swarm集群。接下來一起花費幾分鐘了解一下這背后涉及的安全技術。

      1)Swarm準入令牌

      每個Swarm都包含兩種不同準入令牌。

      管理者所需準入令牌。

      有必要理解Swarm準入令牌的格式。每個準入令牌都由4個不同的字段構成,中間采用虛線(-)連接。

      管理者:SWMTKN-1-1dmtwusdc...r17stb-2axi53zjbs45lqxykaw8p7glz

      如果用戶認為當前準入令牌存在風險,僅用一條命令就可以取消該準入令牌授權,同時發布新的準入令牌。在下面的示例中,取消了已經授權的管理者準入令牌,之后又發布了新的令牌。

      需要注意的是,新舊令牌只有最后字段存在區別。SWARM ID還是相同的。

      準入令牌保存在集群配置的數據庫中,默認是加密的。

      2)TLS和雙向認證

      在Linux主機上,讀者可以指定使用下面的命令查看指定節點的客戶端證書。

      上述輸出中,Subject中用到了O、OU以及CN字段分別表示Swarm ID、節點角色以及節點ID信息。

      組織字段O保存的是Swarm ID。

      組織單元字段OU保存的是節點在Swarm中的角色。

      規范名稱字段CN保存的是節點的加密ID。

      如圖15.10所示。

      圖15.10 Subject中使用的字段

      在Validity中,還可以直接看到證書的更新周期。

      上述信息可以在docker system info命令的輸出中得到驗證。

      3)配置一些CA信息

      通過docker swarm update命令可以配置Swarm證書的更新周期。下面的示例中,將Swarm的證書更新周期修改為30天。

      Swarm允許節點在證書過期前重新創建證書,這樣可以保證Swarm中全部節點不會在同一時間嘗試更新自己的證書信息。

      讀者可以在創建Swarm的時候,通過在docker swarm init命令中增加--external-ca參數來指定外部的CA。

      docker swarm ca命令可以用于管理CA相關配置。可以在運行該命令時指定--help來查看命令功能。

      4)集群存儲

      集群存儲是Swarm的大腦,保存了集群配置和狀態數據。

      存儲目前是基于etcd的某種實現,并且會在Swarm內所有管理者之間自動復制。存儲默認也是加密的。

      集群存儲正逐漸成為很多Docker平臺的關鍵技術。例如,Docker網絡和Docker密鑰都用到了集群存儲。Docker平臺的很多部分都已經用到了集群存儲,未來對集群存儲的利用會更多,而這也是Swarm模式在Docker規劃中占據重要地位的原因之一。這還意味著,如果不使用Swarm模式運行Docker,很多Docker特性就無法使用。

      集群存儲的日常維護由Docker自動完成。但是,在生產環境中,需要為集群存儲提供完整的備份和恢復方案。

      Swarm模式安全部分的內容到此為止。

      2.Docker安全掃描

      快速發現代碼缺陷的能力至關重要。Docker安全掃描功能使得對Docker鏡像中已知缺陷的檢測工作變得簡單。

      Docker平臺提供的主要的安全技術有哪些?

      {注:}

      在本書編寫之時,Docker安全掃描已經可以用于Docker Hub上私有倉庫的鏡像了。同時該技術還可以作為Docker可信服務本地化部署解決方案的一部分。最后,所有官方Docker鏡像都經過了安全掃描,掃描報告在其倉庫中可以查閱。

      Docker安全掃描對Docker鏡像進行二進制代碼級別的掃描,對其中的軟件根據已知缺陷數據庫(CVE數據庫)進行檢查。在掃描執行完成后,會生成一份詳細報告。

      打開瀏覽器訪問Docker Hub,并搜索Alpine倉庫。圖15.11展示了官方Alpine倉庫的Tags標簽頁。

      圖15.11 官方Alpine倉庫的Tags標簽頁

      Alpine倉庫是官方倉庫,這意味著該倉庫會自動掃描并生成對應報告。可以看到,鏡像標簽為edge、latest以及3.6的鏡像都通過了已知缺陷的檢查。但是alpine:3.5鏡像存在已知缺陷(標紅)。

      如果打開alpine:3.5鏡像,可以發現如圖15.12所示的詳細信息。

      圖15.12 alpine:3.5鏡像的詳細信息

      這是發現自己軟件中已知缺陷詳情的一種簡單方式。

      Docker可信鏡像倉庫服務(Docker Trusted Registry, DTR),屬于Docker企業版中本地化鏡像倉庫服務的一部分內容,提供了相同的Capability,同時還允許用戶自行控制其鏡像掃描時機以及掃描方式。例如,DTR允許用戶選擇鏡像是在推送時自動觸發掃描,還是只能手工觸發。同時DTR還允許用戶手動更新CVE數據庫,這對于DTL無法進行聯網來自動更新CVE數據的場景來說,是一種理想的解決方案。

      這就是Docker安全掃描,一種深入檢測Docker鏡像是否存在已知安全缺陷的好方式。當然,能力越大責任越大,當用戶發現缺陷后,就需要承擔解決相應缺陷的責任了。

      3.Docker內容信任

      Dockr內容信任(Docker Content Trust,DCT)使得用戶很容易就能確認所下載鏡像的完整性以及其發布者。在不可信任的網絡環境中下載鏡像時,這一點很重要。

      從更高層面來看,DCT允許開發者對發布到Docker Hub或者Docker可信服務的鏡像進行簽名。當這些鏡像被拉取的時候,會自動確認簽名狀態。圖15.13展示了這一過程。

      DCT還可以提供關鍵上下文,如鏡像是否已被簽名從而可用于生產環境,鏡像是否被新版本取代而過時等。

      在本書編寫之際,DTC提供的上下文還在初期,配置起來相當復雜。

      在Docker主機上啟用DCT功能,所要做的只是在環境中將DOCKER_CONTENT_TRUST變量設置為1。

      圖15.13 鏡像被拉取時自動確認簽名狀態

      在實際環境中,用戶可能希望在系統中默認開啟該特性。

      如果使用Docker統一配置層(Docker企業版的一部分),需要勾選圖中15.14所示Run Only Signed Images復選項。這樣會強制所有在UCP集群中的節點只運行已簽名鏡像。

      圖15.14 勾選Only run signed images復選項

      由圖15.14中可知,UCP在DCT的基礎上進行進一步封裝,提供了已簽名鏡像的安全首選項信息。例如,用戶可能有這樣的需求:在生產環境中只能使用由secops簽名的鏡像。

      一旦DCT功能開啟,就不能獲取并使用未簽名鏡像了。圖15.15展示了開啟DCT之后,如果再次嘗試通過Docker CLI或者UCP Web UI界面拉取未簽名鏡像時所報的錯誤(兩個示例都嘗試拉取標簽為“unsigned”的鏡像)。

      圖15.15 拉取未簽名鏡像時報錯

      圖15.16展示了DCT是如何阻止Docker客戶端拉取一個被篡改的鏡像的。圖15.17展示了DCT如何阻止客戶端拉取舊鏡像。

      圖15.16 拉取被篡改的鏡像

      圖15.17 拉取舊鏡像

      Docker內容信任是一種很重要的技術,能幫助用戶檢查從Docker服務中拉取的鏡像。該技術的基礎模式配置起來非常簡單,但是類似上下文等一些高級特性,現階段配置起來還是非常復雜的。

      4.Docker密鑰

      很多應用都需要密鑰。比如密碼、TLS證書、SSH key等。

      在Docker1.13版本之前,沒有一種標準且安全的方式能讓密鑰在應用間實現共享。常見的方式是開發人員將密鑰以文本的方式寫入環境變量(我們都這么做過)。這與理想狀態差距甚遠。

      Docker1.13引入了Docker密鑰,將密鑰變成Docker生態系統中的一等公民。例如,增加了一個新的子命令docker secret來管理密鑰。在Docker的UCP界面中,也有專門的地方來創建和管理密鑰。在后臺,密鑰在創建后以及傳輸中都是加密的,使用時被掛載到內存文件系統,并且只對那些已經被授權了的服務開放訪問。這確實是一種綜合性的端到端解決方案。

      圖15.18展示了其總體流程。

      下面依次介紹圖15.18中所示工作流的每一步。

      (1)密鑰被創建,并且發送到Swarm。

      (2)密鑰存放在集群存儲當中,并且是加密的(每個管理者節點都能訪問集群存儲)。

      (3)B服務被創建,并且使用了該密鑰。

      (4)密鑰傳輸到B服務的任務節點(容器)的過程是加密的。

      (5)B服務的容器將密鑰解密并掛載到路徑/run/secrets下。這是一個臨時的內存文件系統(在Windows Docker中該步驟有所不同,因為Windows中沒有內存文件系統這個概念)。

      (6)一旦容器(服務任務)完成,內存文件系統關閉,密鑰也隨之刪除。

      (7)A服務中的容器不能訪問該密鑰。

      圖15.18 引入Docker密鑰

      用戶可以通過docker secret子命令來管理密鑰,可以通過在運行docker service create命令時附加--secret,從而為某個服務指定密鑰。

      ###小結 Docker可以通過配置變得特別安全。Docker支持全部的Linux主流安全技術,包括Namespace、Control Group、Capability、MAC以及Seccomp。Docker為這些安全技術設定了合理的默認值,但是用戶也可以自行修改配置,或者禁用這些安全技術。

      在通用的Linux安全技術之上,Docker平臺還引入了大量自有安全技術。Swarm模式基于TLS構建,并且配置上極其簡單靈活。安全掃描對鏡像進行二進制源碼級別掃描,并提供已知缺陷的詳細報告。Docker內容信任允許用戶對內容進行簽名和認證,密鑰目前也是Docker中的一等公民。

      最終結論就是,無論用戶希望Docker環境有多安全,Docker都可以實現。這一切都取決于用戶如何配置Docker。

      本文摘自正在熱銷的技術書[《深入淺出Docker》](https://item.jd.com/12564378.html?dist=jd "《深入淺出Docker》")

      Nigel,Poulton(奈吉爾·波爾頓) 著,李瑞豐,劉康

      Docker技術入門與實踐指南教程

      容器與容器云解析,幫助您快速建立Docker技術知識體系

      Docker認證工程師實用指南

      《深入淺出Docker》由Docker概覽和Docker技術兩部分組成,遵循簡介—詳解—命令的章節布局,全面系統地剖析Docker的基本原理與實踐應用。清晰詳細的操作步驟結合大量的實際代碼,為讀者切實入門Docker保駕護航。

      ### 延伸閱讀:干貨 | Docker中用到的主要Linux安全技術有哪些?

      本文轉載自異步社區

      軟件開發 架構設計

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:一文了解GaussDB 200的產品架構、數據流程、組網方案、服務部署原則、企業級增強特性...
      下一篇:Chap3_數據預處理
      相關文章
      亚洲自偷自拍另类图片二区| 国产精品亚洲精品日韩已方| 久久乐国产精品亚洲综合| 亚洲精品免费网站| 亚洲视频在线一区二区三区| 日韩亚洲Av人人夜夜澡人人爽| 亚洲av无码成人黄网站在线观看| 亚洲精品无码成人片久久| 亚洲免费人成在线视频观看| 亚洲乱码无码永久不卡在线| 亚洲一区二区三区无码中文字幕| 亚洲熟妇av一区二区三区| 亚洲日韩精品A∨片无码| 国产精品亚洲一区二区三区在线| 亚洲精品国产字幕久久不卡| 久久91亚洲人成电影网站| 亚洲国产成人片在线观看| 亚洲成AV人在线观看天堂无码| 久久亚洲精品视频| 国产亚洲无线码一区二区| 中文字幕第一页亚洲| 亚洲精品无码专区久久久| 亚洲成av人在线视| 亚洲男女一区二区三区| 亚洲1区1区3区4区产品乱码芒果| 久久精品国产亚洲αv忘忧草| 亚洲国产综合精品中文第一| 亚洲av无码成人精品国产| 国产亚洲福利精品一区二区| 久久国产成人亚洲精品影院 | 日韩亚洲人成在线综合日本| 亚洲人成色7777在线观看| 久久久久亚洲精品成人网小说| 久久亚洲精精品中文字幕| 亚洲国产日韩在线人成下载| 亚洲综合色丁香婷婷六月图片| 亚洲AV性色在线观看| 亚洲性日韩精品一区二区三区| 亚洲日韩乱码中文无码蜜桃臀网站| 亚洲第一福利网站| 亚洲日本香蕉视频|