Docker 的優(yōu)點(diǎn)
898
2025-04-01
【摘要】容器云平臺(tái),主要涉及什么樣的安全問題?容器云安全該怎么做?本文總結(jié)了9個(gè)層面的安全保障。
安全是一個(gè)非常非常重要但又是一個(gè)比較大的命題,涉及到方方面面。采用了容器云平臺(tái),主要涉及什么樣的安全問題?容器云安全該怎么做?基于我們?nèi)萜髟破脚_(tái)的層次架構(gòu),我考慮從容器云的不同層次來看下容器云涉及的安全問題。
容器云的底層是基礎(chǔ)設(shè)施資源層,包括主機(jī)計(jì)算節(jié)點(diǎn)、網(wǎng)絡(luò)、存儲(chǔ)等資源共同構(gòu)建容器云集群;基礎(chǔ)設(shè)施資源層上運(yùn)行的是容器和容器調(diào)度管理組件,比如Kubernetes、Mesos、DockerSwarm等;容器引擎運(yùn)行在主機(jī)節(jié)點(diǎn)上,通過容器調(diào)度管理組件來實(shí)現(xiàn)容器的資源分配、限額、調(diào)度管理等能力;業(yè)務(wù)服務(wù)運(yùn)行在容器中,每個(gè)服務(wù)可能對(duì)應(yīng)著若干個(gè)服務(wù)實(shí)例(Pods或容器),所有的服務(wù)共同構(gòu)成了服務(wù)層;這些業(yè)務(wù)服務(wù)通過服務(wù)編排成為業(yè)務(wù)應(yīng)用,為客戶提供相應(yīng)的應(yīng)用服務(wù)。應(yīng)用服務(wù)可以投放到不同的渠道,比如手機(jī)app、WEB瀏覽器、PC應(yīng)用等。容器云平臺(tái)涉及這些層次,有很多個(gè)組件,每一個(gè)地方都涉及安全問題,所以安全其實(shí)是一個(gè)非常難handle的問題。人的思維總是會(huì)有局限、有漏洞,要想絕對(duì)的安全真的是比登天都難,不過我們嘗試來力所能及的通過對(duì)這些層次分析來考慮安全問題,可能這也是比較容易理解和簡化容器云的安全問題,更容易采取相應(yīng)的措施以加強(qiáng)安全。
容器云平臺(tái)層次(借用網(wǎng)上圖片)
一、基礎(chǔ)設(shè)施資源層安全
基礎(chǔ)設(shè)施資源層為容器云平臺(tái)供給資源。理論上基礎(chǔ)設(shè)施資源層資源應(yīng)該由IaaS來提供,但目前還存在一些技術(shù)難題,暫時(shí)還不能完全滿足容器云的資源需求能力。所以大多數(shù)情況下我們基于虛擬化層之上或者直接使用物理機(jī)來搭建容器云集群。虛擬化做了一層隔離,多一層安全保證,但性能損失比較大。但從安全角度考慮,性能好的物理機(jī)可以考慮做一層虛擬化,有所得有所失,可以根據(jù)實(shí)際情況選擇。
除了容器節(jié)點(diǎn),這一層的安全涉及網(wǎng)絡(luò)安全和存儲(chǔ)安全。Kubernetes提供了一種網(wǎng)絡(luò)策略,不過目前只是支持Calico、Romana、Weave Net等,網(wǎng)絡(luò)策略說明一組 Pod 之間是如何被允許互相通信,以及如何與其它網(wǎng)絡(luò) Endpoint 進(jìn)行通信。網(wǎng)絡(luò)策略資源使用標(biāo)簽來選擇 Pod,并定義了一些規(guī)則,這些規(guī)則指明允許什么流量進(jìn)入到選中的 Pod 上。默認(rèn)情況下,所有Pod之間是全通的。每個(gè)Namespace可以配置獨(dú)立的網(wǎng)絡(luò)策略,來隔離Pod之間的流量。網(wǎng)絡(luò)策略通過使用標(biāo)簽選擇器(包括namespaceSelector和podSelector)來控制Pod之間的流量,比如創(chuàng)建一個(gè)可以選擇所有 Pod 但不允許任何流量的隔離策略,這確保了即使是沒有被任何網(wǎng)絡(luò)策略選中的 Pod,將仍然是被隔離的。(詳細(xì)內(nèi)容請(qǐng)查看Kubernetes文檔 Network Policies)
其他網(wǎng)絡(luò)模式目前還不支持網(wǎng)絡(luò)策略。Kubernetes集群網(wǎng)絡(luò)模式跟Docker Swarm不一樣。Kubernetes在創(chuàng)建集群時(shí)需要安裝Pod網(wǎng)絡(luò)插件,一個(gè)集群只能安裝一種Pod網(wǎng)絡(luò);Docker Swarm網(wǎng)絡(luò)可以在使用時(shí)創(chuàng)建。從容器云平臺(tái)來說,不管通過網(wǎng)絡(luò)策略或者其他方式能實(shí)現(xiàn)一層網(wǎng)絡(luò)隔離,安全性會(huì)更高。當(dāng)然,按需而定。
對(duì)于容器云存儲(chǔ)安全,和使用具體的存儲(chǔ)技術(shù)有關(guān)。數(shù)據(jù)安全對(duì)任何一家企業(yè)都是重大的事情。所以一般考慮數(shù)據(jù)不能放在容器內(nèi)存儲(chǔ)上,包括日志數(shù)據(jù)。數(shù)據(jù)需要及時(shí)備份、采集到節(jié)點(diǎn)存儲(chǔ)或共享存儲(chǔ)或外部數(shù)據(jù)中心。
二、容器管理調(diào)度層安全
容器管理調(diào)度層安全主要涉及容器調(diào)度、容器生命周期管理等。容器調(diào)度可以采用親和性、反親和性策略等,確保容器調(diào)度到合適的節(jié)點(diǎn)上。這特別在彈性伸縮的時(shí)候,確保容器實(shí)例均勻分布于不同節(jié)點(diǎn)上。避免容器集中而導(dǎo)致節(jié)點(diǎn)資源耗盡或緊張,這也可以通過對(duì)節(jié)點(diǎn)資源使用情況和服務(wù)的響應(yīng)時(shí)間等的實(shí)時(shí)監(jiān)控來及時(shí)自動(dòng)調(diào)整。
容器云彈性伸縮我們也討論過,“伸”相對(duì)容易,“縮”就要確保業(yè)務(wù)請(qǐng)求被處理完畢才能收回資源。這可能需要結(jié)合負(fù)載均衡策略,確保沒有新的請(qǐng)求的到來,等待所有請(qǐng)求被處理完畢之后回收容器資源。
除非容器異常,容器的遷移、刪除、重啟也面臨著這樣的問題。特別金融行業(yè)涉及資金的問題,需要確保數(shù)據(jù)不丟失、不重復(fù)。當(dāng)然,不能只依賴于容器,也需要考慮業(yè)務(wù)邏輯和事務(wù)機(jī)制來保證安全。容器異常導(dǎo)致請(qǐng)求處理中斷,需要有相應(yīng)的措施保證請(qǐng)求能被處理并且不被重復(fù)處理。
容器的操作可以通過API來實(shí)現(xiàn),Kubernetes支持多種API安全訪問策略,Node、ARAC、BRAC、Webhook等。提供授權(quán)、認(rèn)證、準(zhǔn)入機(jī)制。但需要明白的是,Kubernetes這些訪問控制機(jī)制不等于容器云平臺(tái)的訪問控制機(jī)制,只是容器云平臺(tái)一個(gè)組件的訪問控制機(jī)制,所以容器云平臺(tái)必須有建立自己的權(quán)限、認(rèn)證、訪問控制能力。Kubernetes的訪問控制如何映射到容器云平臺(tái)的訪問控制能力,是容器云平臺(tái)需要考慮并解決的問題。
三、容器引擎和容器安全
容器引擎通過Linux系統(tǒng)安全策略來實(shí)現(xiàn)。不同的容器引擎實(shí)現(xiàn)的能力不同。Docker支持Namespace隔離性,Cgroup配額資源限制,Capability權(quán)限劃分,SELinux/AppArmor訪問控制權(quán)限。Kubernetes通過API可以實(shí)現(xiàn)Namespace隔離性、資源分配和資源限額。相當(dāng)于重新做了一次虛擬化,確保資源不會(huì)被某一容器耗盡。
有朋友問到過一個(gè)問題,客戶私有代碼在容器中運(yùn)行,安全性如何保證?這個(gè)我想首先要保證容器資源分配時(shí)有配額,在客戶的容器中它可以自由折騰,但不能越界,不能逃逸。我們知道Docker等容器引擎需要訪問系統(tǒng)資源,有root權(quán)限才方便。我們PoC測試時(shí)每家廠商都要求root用戶權(quán)限,這讓我們感覺很不靠譜。root用戶權(quán)限太大,開放root權(quán)限可能帶來致命威脅。所以我們要求梳理出容器云平臺(tái)需要root用戶權(quán)限的所有指令,賦予普通用戶身份執(zhí)行這些指令的權(quán)限。為了整個(gè)系統(tǒng)的安全,必須嚴(yán)格控制訪問權(quán)限。所以對(duì)于客戶私有代碼的問題,就不能給它root權(quán)限,劃分給它一塊區(qū)域與其他容器和資源隔離,同時(shí)配以容器和資源實(shí)時(shí)監(jiān)控,確保容器運(yùn)行安全。
四、服務(wù)層安全
服務(wù)層就是實(shí)現(xiàn)的微服務(wù)。微服務(wù)的安全包含數(shù)據(jù)的安全,這里涉及數(shù)據(jù)治理的問題。我們也一直強(qiáng)調(diào),數(shù)據(jù)治理能力直接影響著微服務(wù)的實(shí)現(xiàn)。數(shù)據(jù)的分類分級(jí)、分庫分表、存儲(chǔ)方式、數(shù)據(jù)體量、數(shù)據(jù)質(zhì)量等都關(guān)系著微服務(wù)的設(shè)計(jì)實(shí)現(xiàn)及部署方式以及所能提供的服務(wù)質(zhì)量。
微服務(wù)接口和通信安全也是重點(diǎn)。通常我們需要部署服務(wù)網(wǎng)關(guān)來實(shí)現(xiàn)對(duì)服務(wù)接口的管理和訪問控制,服務(wù)接口也需要實(shí)現(xiàn)安全的通信機(jī)制,比如SSL/TSL加密。服務(wù)網(wǎng)關(guān)是一個(gè)關(guān)鍵的安全組件,通常這一層需要實(shí)現(xiàn)路由、過濾、映射、轉(zhuǎn)換、限流、熔斷、容錯(cuò)、服務(wù)優(yōu)先級(jí)設(shè)置等機(jī)制。通過這些機(jī)制來保證服務(wù)安全和容器云平臺(tái)的安全。不過需要注意的是服務(wù)網(wǎng)關(guān)是所有請(qǐng)求應(yīng)答的出入口,所以其可能會(huì)成為一個(gè)瓶頸,這一則需要選擇合適的產(chǎn)品,二則需要考慮部署服務(wù)網(wǎng)關(guān)集群或者多集群方式來滿足需求。
目前容器云廠商基本都把容器終端console開放給用戶。通過容器云平臺(tái)可以直接打開容器終端,通過命令行操作容器系統(tǒng)指令。這也是非常危險(xiǎn)的地方??赡芸紤]的角度不同,容器云廠商從開發(fā)人員角度考慮,有這個(gè)終端對(duì)開發(fā)人員來說比較方便,可以登錄查看日志、運(yùn)行情況等。但是對(duì)我們來說這是留了個(gè)安全隱患。所以我們要求對(duì)容器云租戶用戶需要關(guān)閉這個(gè)功能,但需要把容器的日志、容器內(nèi)應(yīng)用的日志、容器資源使用、應(yīng)用運(yùn)行狀況等信息要采集并展示出來,在出現(xiàn)異常的時(shí)候能夠順利定位問題并有助于解決問題。當(dāng)然這個(gè)終端可以對(duì)容器云平臺(tái)管理員開放,畢竟特殊情況下是需要登錄特定容器。
五、應(yīng)用層安全
我們在交流的時(shí)候跟廠商說過,應(yīng)用管理和安全是我們考慮的重點(diǎn)。這是容器云平臺(tái)提供給用戶的關(guān)鍵能力。在容器云生產(chǎn)環(huán)境不可能使用流水線或CI再去構(gòu)建鏡像,所以需要明確開發(fā)測試和生產(chǎn)環(huán)境的能力劃分。我們建議鏡像倉庫作為開發(fā)測試和UAT/生產(chǎn)的媒介,開發(fā)CI流程止步于鏡像倉庫,鏡像倉庫保證鏡像的安全。
微服務(wù)通過服務(wù)編排來構(gòu)建業(yè)務(wù)應(yīng)用。企業(yè)內(nèi)應(yīng)用和外部應(yīng)用安全機(jī)制可能是不一樣的。企業(yè)內(nèi)相對(duì)安全,服務(wù)間通信可以不通過服務(wù)網(wǎng)關(guān),不需要太多認(rèn)證加密,采用消息機(jī)制,可以方便的實(shí)現(xiàn)異步處理、優(yōu)先級(jí)設(shè)置、消息負(fù)載均衡等,結(jié)合容器的彈性伸縮機(jī)制,可以更好的滿足業(yè)務(wù)需求。這樣通過技術(shù)架構(gòu)保障,應(yīng)用多實(shí)例部署,實(shí)現(xiàn)負(fù)載均衡機(jī)制,相當(dāng)于實(shí)現(xiàn)了應(yīng)用的雙活/多活部署。
多租戶是容器云平臺(tái)實(shí)現(xiàn)權(quán)限管理和服務(wù)治理的一個(gè)重要方面。我們也談過容器云多租戶權(quán)限中心設(shè)計(jì)及容器云多租戶服務(wù)治理。服務(wù)和應(yīng)用需要按租戶進(jìn)行管理和運(yùn)維,這既是不同業(yè)務(wù)條線的要求,也是化繁為間的需求。把服務(wù)和應(yīng)用作為資源,利用租戶權(quán)限管理來實(shí)現(xiàn)服務(wù)和應(yīng)用的訪問控制準(zhǔn)入機(jī)制,是實(shí)現(xiàn)應(yīng)用安全的重要方面。
應(yīng)用不同的投放渠道,安全要求也不盡相同。面向企業(yè)內(nèi)部使用的和面向客戶的,手機(jī)應(yīng)用、PC 端應(yīng)用、Web瀏覽器等,采用的措施也要因需而定。兵無定式、水無定形,因時(shí)而動(dòng),因勢而動(dòng)。這也超出了我們的能力,需要咨詢專業(yè)的安全團(tuán)隊(duì)人員。不過配置API 網(wǎng)關(guān),通常是一個(gè)不錯(cuò)的選擇。
六、基礎(chǔ)組件
容器云平臺(tái)需要考慮實(shí)現(xiàn)統(tǒng)一認(rèn)證中心和權(quán)限中心等基礎(chǔ)組件,這是建立企業(yè)級(jí)微服務(wù)平臺(tái)和微服務(wù)生態(tài)系統(tǒng)的要求,也是實(shí)現(xiàn)單點(diǎn)登錄、基于角色的權(quán)限管理、授權(quán)認(rèn)證、訪問控制等安全能力的要求。
這里需要說明的是,容器云平臺(tái)的統(tǒng)一認(rèn)證和對(duì)客戶的統(tǒng)一認(rèn)證是兩個(gè)層次的需求,不能混為一談。目前由于建設(shè)容器云平臺(tái)微服務(wù)生態(tài)涉及很多開源組件,大多數(shù)組件都有自己的權(quán)限管理認(rèn)證體系,為了統(tǒng)一便利管理,平臺(tái)各組件權(quán)限最好全部打通,成為一個(gè)完整的云平臺(tái),更好的管理和運(yùn)維服務(wù)。
前面提到的API服務(wù)網(wǎng)關(guān)也是容器云平臺(tái)重要的基礎(chǔ)安全組件。另外,服務(wù)注冊發(fā)現(xiàn)組件、日志組件、監(jiān)控組件、告警組件、任務(wù)調(diào)度組件甚至計(jì)費(fèi)組件等都需要保證部署和訪問控制安全。
密碼安全,這是避不開的一個(gè)話題。集成應(yīng)用系統(tǒng)、使用中間件服務(wù)等都可能需要提供賬戶密碼,密碼如何存放?我們嘗試使用服務(wù)配置中心來管理所有這些配置項(xiàng),密碼加密存放于內(nèi)存,落地于文件或數(shù)據(jù)庫中是加密后的格式,服務(wù)使用密碼時(shí)通過解密函數(shù)來從內(nèi)存中獲取。
七、中間件安全
容器云上業(yè)務(wù)服務(wù)用到的中間件可能會(huì)很多。比如消息中間件Kafka、應(yīng)用服務(wù)器Tomcat、數(shù)據(jù)庫中間件MySQL等,在使用這些中間件時(shí),一方面需要考慮中間件本身的安全措施,另一方面也要考慮容器鏡像等安全。在使用這些中間件時(shí),要確認(rèn)中間件版本,避免使用默認(rèn)配置,特別是生產(chǎn)環(huán)境,不同的版本可能需要構(gòu)建不同的鏡像做備用。這些工作可以和廠商共同維護(hù),在公共鏡像倉庫中提供。
另外可能涉及中間件部署的問題,是部屬于容器?還是物理機(jī)或虛擬機(jī)?我們覺得物理機(jī)或虛擬機(jī)更好些,我們將在容器云部署一文中詳細(xì)討論。
八、鏡像安全
容器是鏡像的運(yùn)行時(shí),鏡像安全直接影響著容器的安全。病從口入,如果鏡像存在安全隱患,容器云平臺(tái)就面臨著威脅。所以鏡像倉庫的鏡像安全掃描能力就顯得尤為重要。Docker Cloud和DockerHub提供在線漏洞掃描,CoreOS也提供了Clair開源項(xiàng)目對(duì)接CVE庫進(jìn)行鏡像的漏洞掃描。目前鏡像倉庫有多種選擇,能力也有些差別。聽說DTR是最強(qiáng)的,不過沒有比較過。
服務(wù)鏡像都構(gòu)建于基礎(chǔ)鏡像,基礎(chǔ)鏡像安全涉及鏡像、系統(tǒng)、容器運(yùn)行時(shí)三部分安全。系統(tǒng)安全則面臨著系統(tǒng)補(bǔ)丁、升級(jí)的問題。基礎(chǔ)鏡像的補(bǔ)丁、升級(jí)等可能會(huì)帶來重新生成鏡像的任務(wù)。在有很多鏡像的情況下,如何管理維護(hù)這些鏡像也是一個(gè)需要考慮的問題。也許通過自動(dòng)化工具來全部重新打包生成新的鏡像,自動(dòng)實(shí)現(xiàn)測試環(huán)境部署測試,保證版本一致可能會(huì)好些??赡苄枰贒evOps流程中去保證,但這個(gè)度怎么把握我們也沒考慮好。
九、DevOps流程安全
持續(xù)集成代碼安全,不僅指安全的代碼存儲(chǔ),也包括編碼的安全,預(yù)防編碼中潛在的漏洞和Sql注入等。實(shí)現(xiàn)自動(dòng)的代碼質(zhì)量檢查和代碼漏洞檢查,自動(dòng)化測試等能力。這可能也需要結(jié)合API Gateway實(shí)現(xiàn)過濾等機(jī)制。
Kubernetes 容器
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。