這是關(guān)于Kubernetes安全性的三篇系列文章中的第一篇,在本系列文章中,我們將依次介紹如何確保企業(yè)的Kubernetes集群免受外部***、內(nèi)部***,以及如何處理資源消耗或noisy neighbors問(wèn)題。
毋庸置疑,Kubernetes已經(jīng)成為云容器編排系統(tǒng)的標(biāo)準(zhǔn),據(jù)Cloud Native Computing Foundation(CNCF)的定義,它提供了一個(gè)“自動(dòng)化部署、擴(kuò)展以及跨主機(jī)集群操作應(yīng)用程序容器的平臺(tái)”。但是,如果缺乏Kubernetes環(huán)境相關(guān)的安全問(wèn)題認(rèn)識(shí)的話,會(huì)致使各種組件暴露在網(wǎng)絡(luò)集群內(nèi)外的***之下。
鎖定API服務(wù)器,Kubelets
Kubernetes環(huán)境中有多種可由外部訪問(wèn)的組件,包括應(yīng)用程序編程接口(API)服務(wù)器、kubelet以及數(shù)據(jù)存儲(chǔ)。如果沒(méi)有正確鎖定和保護(hù)它們的話,這些組件有可能會(huì)造成數(shù)據(jù)泄漏和系統(tǒng)損害。
Kubernetes為開(kāi)發(fā)、運(yùn)維和安全團(tuán)隊(duì)提供了一個(gè)API結(jié)構(gòu),可用于和應(yīng)用程序和Kubernetes平臺(tái)交互。Kubelet是一個(gè)在節(jié)點(diǎn)上運(yùn)行并且讀取容器清單的服務(wù),它確保定義了的容器已經(jīng)啟動(dòng)并運(yùn)行。Kubernetes利用etcd分布式鍵值存儲(chǔ)來(lái)保存和復(fù)制Kubernetes在整個(gè)集群中使用的數(shù)據(jù)?;旧?,最經(jīng)常受到***的Kubernetes系統(tǒng)是那些根本沒(méi)有設(shè)置訪問(wèn)控制的系統(tǒng)。
Goins指出,Kubernetes易于部署,在默認(rèn)情況下并沒(méi)有內(nèi)置太多確保安全性的東西。例如,直到2017年年中,容器編排系統(tǒng)才開(kāi)始具有RBAC(基于角色的訪問(wèn)控制)功能。
Kubernetes 1.8版本的亮點(diǎn)之一是RBAC(基于角色的訪問(wèn)控制),這是一種用于管理Kubernetes資源周圍權(quán)限的授權(quán)機(jī)制。RBAC允許配置靈活的授權(quán)策略,可以在不需要重啟集群的情況下進(jìn)行更新。
“在很多Kubernetes部署中,一旦出現(xiàn)compromise,用戶可以使用root權(quán)限安裝和運(yùn)行他們想要的軟件。”Goins說(shuō),“***和網(wǎng)絡(luò)犯罪分子希望進(jìn)入一個(gè)系統(tǒng),升級(jí)他們的權(quán)限,接著轉(zhuǎn)向其他系統(tǒng),開(kāi)始收集信用卡和個(gè)人身份識(shí)別數(shù)據(jù)等信息。”
2018年12月在Kubernetes爆出的首個(gè)安全漏洞——特權(quán)升級(jí)漏洞(CVE-2018-1002105),當(dāng)時(shí)是由Rancher Labs聯(lián)合創(chuàng)始人及首席架構(gòu)師Darren Shepherd發(fā)現(xiàn)的。該漏洞演示了用戶如何通過(guò)Kubernetes API服務(wù)器建立和后端服務(wù)器的連接。建立連接之后,***者可以通過(guò)網(wǎng)絡(luò)連接直接向后端集群服務(wù)(如kubelets)發(fā)送任意的請(qǐng)求。該漏洞讓任何用戶在任何計(jì)算節(jié)點(diǎn)上都擁有完整的管理員權(quán)限。后來(lái)發(fā)布了專門修復(fù)受支持的Kubernetes版本的補(bǔ)丁,在1.10.11,1.11.5和1.12.3中都提供了這樣的補(bǔ)丁。
企業(yè)該如何保護(hù)K8s集群免受外部***
Goins建議,Kubernetes用戶需要做的第一件事是完全關(guān)閉外部API訪問(wèn),或者將該功能封裝在某種強(qiáng)身份驗(yàn)證中設(shè)置保護(hù)。為了減輕外部***的威脅,信息技術(shù)/安全管理員必須確保只有必要的Kubernetes服務(wù)能對(duì)外暴露。此外,他們必須設(shè)置身份驗(yàn)證并且給所有公開(kāi)的服務(wù)配置正確的網(wǎng)絡(luò)安全策略。
Handy Tecchnologies的Alexander Uricoli在一篇博客中寫(xiě)道:“除非你在kubelet上指定了一些標(biāo)志(flags),否則它在默認(rèn)操作模式下,是會(huì)接受未經(jīng)身份驗(yàn)證的API請(qǐng)求的?!痹谶@篇博客中Uricoli分析了***是如何***同時(shí)個(gè)人服務(wù)器上的Kubernetes集群的:
https://medium.com/handy-tech/analysis-of-a-kubernetes-hack-backdooring-through-kubelet-823be5c3d67c
Uricoli說(shuō):“看來(lái)有人找到了一種方法,可以在一個(gè)正在運(yùn)行的容器上放置一些加密挖掘軟件,然后執(zhí)行這個(gè)過(guò)程?!盞ubernetes API服務(wù)器雖然面向internet公開(kāi),但是受到證書(shū)身份驗(yàn)證的保護(hù)。
結(jié)果,同事的服務(wù)器公開(kāi)了kubelet端口(tcp 10250和tcp 10255)。Uricoli指出,盡管問(wèn)題已顯而易見(jiàn),這樣的***仍然應(yīng)該引起大家對(duì)Kubernetes的部署的一些問(wèn)題的關(guān)注。如果你的用戶可以通過(guò)網(wǎng)絡(luò)節(jié)點(diǎn)來(lái)訪問(wèn)你的節(jié)點(diǎn),那么kubelet API就是一個(gè)通往集群的API后門,它功能齊全且未經(jīng)身份驗(yàn)證。如果用戶已經(jīng)花了很多心思在webhook、RBAC或其他方法啟用身份驗(yàn)證和授權(quán)上,那么他們也同樣應(yīng)該將kubelet好好地鎖定上。
互聯(lián)網(wǎng)安全中心(CIS)建議用戶為kubelet連接部署HTTPS。CIS在關(guān)于為Kubernetes 1.11建立安全配置的指南中寫(xiě)道,“從API服務(wù)器到kubelets的連接可能帶有機(jī)密和密鑰等敏感數(shù)據(jù)。因此,在API服務(wù)器和kubeletes之間的任何通信中使用在途加密(in-transit)是非常重要的?!?br />
Kubernetes用戶應(yīng)該禁用對(duì)API服務(wù)器的匿名請(qǐng)求。啟用時(shí),沒(méi)有被其他配置好的身份驗(yàn)證方法拒絕的請(qǐng)求將被視為匿名請(qǐng)求,然后API服務(wù)器會(huì)處理這些請(qǐng)求。根據(jù)CIS的說(shuō)法,Kubernetes的用戶應(yīng)該依靠身份驗(yàn)證來(lái)授權(quán)訪問(wèn),并切拒絕匿名請(qǐng)求,而組織應(yīng)該根據(jù)需要實(shí)現(xiàn)可控制的訪問(wèn)。
Goins指出,加強(qiáng)內(nèi)部集群用戶防御的安全控制——RBAC、隔離以及權(quán)限限制——對(duì)于保護(hù)Kubernetes免受外部***同等重要。
他說(shuō):“如果有人使用任何內(nèi)部用戶的賬戶從外部訪問(wèn)集群,他們會(huì)立刻獲得完全訪問(wèn)權(quán)限?!彼?,這并不是說(shuō)你需要內(nèi)部控制來(lái)抵御外部的***。而是說(shuō)如果你沒(méi)有這些措施,當(dāng)受到***的時(shí)候你就遭大殃了。
結(jié) 語(yǔ)
Rancher Kubernetes平臺(tái)擁有著超過(guò)一億次下載量,我們深知安全問(wèn)題對(duì)于用戶而言的重要性,更遑論那些通過(guò)Rancher平臺(tái)在生產(chǎn)環(huán)境中運(yùn)行docker及Kubernetes的數(shù)千萬(wàn)用戶。
2018年年底Kubernetes被爆出的首個(gè)嚴(yán)重安全漏洞CVE-2018-1002105,就是由Rancher Labs聯(lián)合創(chuàng)始人及首席架構(gòu)師Darren Shepherd發(fā)現(xiàn)的。
2019年1月Kubernetes被爆出儀表盤(pán)和外部IP代理安全漏洞時(shí),Rancher Labs也是業(yè)界第一時(shí)間向用戶響應(yīng),確保了所有Rancher 2.x和1.6.x的用戶都完全不被漏洞影響。
未來(lái)Rancher將會(huì)向用戶分享更多容器及Kubernetes安全技巧。在下一篇博客中,我們將分享三種保護(hù)Kubernetes不受內(nèi)部***的方法:基于角色的訪問(wèn)、Kubernetes特性(如邏輯隔離,即命名空間)和Rancher資源(如Project)。記得保持關(guān)注~
更多關(guān)于云服務(wù)器,域名注冊(cè),虛擬主機(jī)的問(wèn)題,請(qǐng)?jiān)L問(wèn)西部數(shù)碼官網(wǎng):m.ps-sw.cn