本發(fā)明涉及容器安全技術(shù)領(lǐng)域,具體涉及基于白名單的Docker容器服務(wù)運(yùn)行時(shí)鏡像安全驗(yàn)證處理方法及系統(tǒng)。
背景技術(shù):
在云計(jì)算技術(shù)發(fā)展過(guò)程中,以Docker為代表的云容器技術(shù)被稱之為是虛擬化后最重要的云計(jì)算技術(shù),Docker這樣的容器能夠提高云應(yīng)用的可移植性,并讓企業(yè)用戶能夠更高效地使用IT資源。
容器云安全的一個(gè)問(wèn)題是云應(yīng)用鏡像安全,如果企業(yè)創(chuàng)建了它自己的容器鏡像,那么這個(gè)鏡像的安全性水平將取決于企業(yè)本身的安全技術(shù)能力;如果企業(yè)需要從一個(gè)存儲(chǔ)庫(kù)中獲得一個(gè)容器,它可能并不能確切地知道正在下載什么內(nèi)容;例如,如果容器有一個(gè)記錄按鍵操作的技術(shù)可將用戶名和密碼上傳至遠(yuǎn)程服務(wù)器,那么就會(huì)存在致命的安全風(fēng)險(xiǎn)。
現(xiàn)有的技術(shù)方案中,為方便企業(yè)用戶在公有云和私有云環(huán)境下使用Docker容器云技術(shù),Docker開(kāi)發(fā)了registry企業(yè)倉(cāng)庫(kù),來(lái)統(tǒng)一管理企業(yè)容器運(yùn)行環(huán)境運(yùn)行的云應(yīng)用鏡像,通過(guò)registry管理和認(rèn)證授權(quán)云應(yīng)用鏡像,但由于Docker宿主機(jī)在執(zhí)行創(chuàng)建并運(yùn)行一個(gè)云應(yīng)用鏡像指令時(shí),首先是從本機(jī)存儲(chǔ)的鏡像列表中查詢要運(yùn)行的云應(yīng)用鏡像,如果本地存在云應(yīng)用鏡像,就直接執(zhí)行指令,創(chuàng)建并啟動(dòng)鏡像實(shí)例,不再去Registry企業(yè)鏡像倉(cāng)庫(kù)中進(jìn)行查詢和下載鏡像。所以用戶可用文件拷貝或加載的方式運(yùn)行未經(jīng)驗(yàn)證的云應(yīng)用鏡像,這樣對(duì)會(huì)容器運(yùn)行環(huán)境帶來(lái)很大的安全風(fēng)險(xiǎn)。
技術(shù)實(shí)現(xiàn)要素:
為解決現(xiàn)有技術(shù)存在的不足,本發(fā)明公開(kāi)了一種基于白名單的容器運(yùn)行安全驗(yàn)證處理方法及系統(tǒng),本發(fā)明基于Docker Engine Plugin插件機(jī)制,為容器運(yùn)行鏡像增加鏡像白名單安全檢查功能,實(shí)現(xiàn)與Docker Engine無(wú)縫集成,用戶在操作時(shí),由Docker Engine自動(dòng)完成,不需要人工操作干預(yù)。
為實(shí)現(xiàn)上述目的,本發(fā)明的具體方案如下:
一種基于白名單的容器運(yùn)行安全驗(yàn)證處理方法,包括以下步驟:
Docker客戶端創(chuàng)建運(yùn)行云應(yīng)用鏡像請(qǐng)求,Docker Engine服務(wù)接收到Docker客戶端的請(qǐng)求后,解析指令信息,并調(diào)用白名單客戶端插件進(jìn)行安全驗(yàn)證;
白名單客戶端插件發(fā)送驗(yàn)證請(qǐng)求到白名單服務(wù)器,白名單服務(wù)器根據(jù)接收的元數(shù)據(jù)信息調(diào)用服務(wù)器端的白名單進(jìn)行對(duì)比驗(yàn)證,并返回驗(yàn)證信息至白名單客戶端插件,白名單客戶端插件將驗(yàn)證信息返回給Docker engine服務(wù);
Docker Engine服務(wù)程序如果接收到的是驗(yàn)證通過(guò)信息,在宿主機(jī)創(chuàng)建并運(yùn)行云應(yīng)用鏡像實(shí)例,并將運(yùn)行信息返回給Docker客戶端;如果接收到的是驗(yàn)證不通過(guò)信息,Docker engine服務(wù)程序終止命令的執(zhí)行。
進(jìn)一步的,Docker客戶端創(chuàng)建運(yùn)行云應(yīng)用鏡像請(qǐng)求之前需要在Docker宿主機(jī)環(huán)境,安裝白名單客戶端插件程序。
更進(jìn)一步的,白名單客戶端插件程序安裝方式,一種是在Docker宿主機(jī)環(huán)境先安裝Docker官方的Docker Engine服務(wù)程序,然后安裝獨(dú)立的白名單客戶端程序;另一種是直接安裝包含白名單客戶端的重新打包好的Docker Engine服務(wù)安裝程序。
進(jìn)一步的,安裝白名單客戶端插件程序之后,用文本編輯器軟件修改并保存配置文件中的白名單服務(wù)器地址,停止Docker服務(wù),然后重新啟動(dòng)Docker Engine服務(wù),確保宿主機(jī)上運(yùn)行的Docker Engine服務(wù)能夠正確的加載白名單客戶端插件程序。
進(jìn)一步的,白名單服務(wù)器指定白名單數(shù)據(jù)保存在配置文件中,配置文件中還包含一組服務(wù)器程序運(yùn)行需要的配置參數(shù);配置參數(shù)包括服務(wù)端口、數(shù)據(jù)存取方式類型、數(shù)據(jù)存取方式URL地址、數(shù)據(jù)存取用戶名、數(shù)據(jù)存取密碼、日志配置參數(shù)等。
進(jìn)一步的,白名單服務(wù)器對(duì)每次驗(yàn)證請(qǐng)求都進(jìn)行記錄,將請(qǐng)求信息記錄到數(shù)據(jù)文件或數(shù)據(jù)庫(kù)中。
基于白名單的Docker Engine服務(wù)運(yùn)行鏡像安全驗(yàn)證處理系統(tǒng),包括:
Docker客戶端,用于創(chuàng)建運(yùn)行云應(yīng)用鏡像請(qǐng)求;
Docker Engine服務(wù),在接收到Docker客戶端的請(qǐng)求后,解析指令信息,并調(diào)用白名單客戶端插件進(jìn)行安全驗(yàn)證;
白名單客戶端插件,發(fā)送驗(yàn)證請(qǐng)求到白名單服務(wù)器;
白名單服務(wù)器,根據(jù)接收的元數(shù)據(jù)信息調(diào)用服務(wù)器端的白名單進(jìn)行對(duì)比驗(yàn)證,并返回驗(yàn)證信息至白名單客戶端插件,白名單客戶端插件將驗(yàn)證信息返回給Docker engine服務(wù);
Docker Engine服務(wù),如果接收到的是驗(yàn)證通過(guò)信息,在宿主機(jī)創(chuàng)建并運(yùn)行云應(yīng)用鏡像實(shí)例,并將運(yùn)行信息返回給Docker客戶端;如果接收到的是驗(yàn)證不通過(guò)信息,Docker engine服務(wù)程序終止命令的執(zhí)行。
進(jìn)一步的,Docker客戶端在創(chuàng)建運(yùn)行云應(yīng)用鏡像請(qǐng)求之前需要在Docker宿主機(jī)環(huán)境,安裝白名單客戶端插件程序。
更進(jìn)一步的,白名單客戶端插件程序安裝方式,一種是在Docker宿主機(jī)環(huán)境先安裝Docker官方的Docker Engine服務(wù)程序,然后安裝獨(dú)立的白名單客戶端程序;另一種是直接安裝包含白名單客戶端的重新打包好的Docker Engine服務(wù)安裝程序。
進(jìn)一步的,安裝白名單客戶端插件程序之后,用文本編輯器軟件修改并保存配置文件中的白名單服務(wù)器地址,停止Docker服務(wù),然后重新啟動(dòng)Docker Engine服務(wù),確保宿主機(jī)上運(yùn)行的Docker Engine服務(wù)能夠正確的加載白名單客戶端插件程序。
進(jìn)一步的,白名單服務(wù)器指定白名單數(shù)據(jù)保存在配置文件中,配置文件中還包含一組服務(wù)器程序運(yùn)行需要的配置參數(shù);配置參數(shù)包括服務(wù)端口、數(shù)據(jù)存取方式類型、數(shù)據(jù)存取方式URL地址、數(shù)據(jù)存取用戶名、數(shù)據(jù)存取密碼、日志配置參數(shù)等。
進(jìn)一步的,白名單服務(wù)器對(duì)每次驗(yàn)證請(qǐng)求都進(jìn)行記錄,將請(qǐng)求信息記錄到數(shù)據(jù)文件或數(shù)據(jù)庫(kù)中。
本發(fā)明適用于在云計(jì)算容器云環(huán)境下通過(guò)白名單管理Docker宿主機(jī)節(jié)點(diǎn)運(yùn)行的Docker云應(yīng)用鏡像,增強(qiáng)容器運(yùn)行環(huán)境安全,可與Docker Engine無(wú)縫集成,應(yīng)用范圍廣,適用于任何運(yùn)行Docker的云環(huán)境,既適用于使用Docker單機(jī)環(huán)境,也可應(yīng)用在Google Kubernetes、Docker Swarm、Apache Mesos等Docker容器集群環(huán)境,同樣對(duì)于在亞馬遜AWS或阿里云等公有云環(huán)境上運(yùn)行容器云應(yīng)用鏡像也可以使用,可大大增強(qiáng)容器的運(yùn)行安全。
本發(fā)明的有益效果:
1、本發(fā)明強(qiáng)化Docker engine安全,完全杜絕了運(yùn)行未經(jīng)驗(yàn)證、不安全云應(yīng)用鏡像的安全風(fēng)險(xiǎn),特別適用于生產(chǎn)環(huán)境和高安全要求行業(yè)如銀行、公安行業(yè)客戶等的安全要求。
2、本發(fā)明的系統(tǒng)軟件使用場(chǎng)景非常靈活,可與Docker Engine無(wú)縫集成,應(yīng)用范圍廣,適用于任何運(yùn)行Docker和云環(huán)境,既適用于使用Docker單機(jī)環(huán)境,也可應(yīng)用在Google Kubernetes、Docker Swarm、Apache Mesos等Docker容器集群環(huán)境,同樣對(duì)于在亞馬遜AWS或阿里云等公有云環(huán)境上運(yùn)行容器云應(yīng)用鏡像也可以使用。
3、本發(fā)明的軟件集成方便,白名單服務(wù)器程序可以作為私有鏡像倉(cāng)庫(kù)的一部分也可以作為獨(dú)立程序來(lái)運(yùn)行;白名單服務(wù)器程序可以與容器云管理平臺(tái)或容器云PaaS平臺(tái)結(jié)合,作為其中的一部分提升用戶的安全和操作。
4、本發(fā)明能夠?qū)崿F(xiàn)與Docker Engine無(wú)縫集成,白名單客戶端插件完全符合Docker Plugins插件規(guī)范,適用于Docker v.1.9以上所有版本,對(duì)用戶操作Docker沒(méi)有任何影響。
附圖說(shuō)明
圖1安裝白名單客戶端后的Docker Engine運(yùn)行鏡像安全驗(yàn)證處理流程圖。
具體實(shí)施方式:
下面結(jié)合附圖對(duì)本發(fā)明進(jìn)行詳細(xì)說(shuō)明:
本發(fā)明的目的是:解決容器宿主機(jī)不通過(guò)Registry企業(yè)鏡像倉(cāng)庫(kù)來(lái)下載Docker云應(yīng)用鏡像,直接加載和運(yùn)行本地Docker云應(yīng)用鏡像,由鏡像安全問(wèn)題引發(fā)的安全風(fēng)險(xiǎn)問(wèn)題。
本發(fā)明公開(kāi)了一種基于Docker Engine Plugin插件機(jī)制,為容器運(yùn)行鏡像增加鏡像白名單安全檢查功能,可以與Docker Engine無(wú)縫集成,用戶在操作時(shí),由Docker Engine自動(dòng)完成,不需要人工操作干預(yù)。用戶在通過(guò)Docker CLI命令運(yùn)行Docker云應(yīng)用鏡像實(shí)例之前,Docker Engine會(huì)調(diào)用它來(lái)檢查要運(yùn)行的云應(yīng)用鏡像是否在服務(wù)器端的白名單之內(nèi),如果要運(yùn)行的鏡像不在白名單中,Docker系統(tǒng)自動(dòng)停止用戶運(yùn)行鏡像的操作,并提示用戶該鏡像沒(méi)有取得授權(quán),無(wú)法運(yùn)行云應(yīng)用鏡像。通過(guò)白名單機(jī)制,可以完全杜絕在Docker宿主機(jī)上創(chuàng)建和運(yùn)行未經(jīng)授權(quán)驗(yàn)證的Docker云應(yīng)用鏡像實(shí)例。降低運(yùn)行非法云應(yīng)用鏡像給云基礎(chǔ)設(shè)施運(yùn)行環(huán)境帶來(lái)的安全風(fēng)險(xiǎn)。
本發(fā)明涉及的系統(tǒng)軟件包括以下兩部分:
白名單客戶端插件程序是一個(gè)符合Docker Engine plugin插件API接口規(guī)范,基于Docker Authorization plugin model,他的主要作用是在執(zhí)行創(chuàng)建運(yùn)行云應(yīng)用鏡像實(shí)例指令前,對(duì)照白名單中的云應(yīng)用鏡像列表驗(yàn)證要執(zhí)行的云應(yīng)用鏡像,通過(guò)它云計(jì)算數(shù)據(jù)中心管理員可以通過(guò)它來(lái)增強(qiáng)Docker宿主機(jī)的安全,允許在宿主機(jī)上運(yùn)行的云應(yīng)用鏡像;
白名單服務(wù)器程序負(fù)責(zé)對(duì)白名單客戶端程序發(fā)出的驗(yàn)證請(qǐng)求進(jìn)行驗(yàn)證,如果鏡像名稱和版本信息在白名單列表中,就返回給客戶端驗(yàn)證通過(guò)的信息,否則返回驗(yàn)證不通過(guò)的信息。
白名單服務(wù)器軟件平臺(tái)和的新功能之一是對(duì)云計(jì)算環(huán)境中可運(yùn)行云應(yīng)用鏡像的白名單進(jìn)行管理,管理員可以對(duì)不同環(huán)境分別設(shè)置經(jīng)過(guò)驗(yàn)證的云應(yīng)用白名單列表。云應(yīng)用白名單信息包括環(huán)境名稱、云應(yīng)用鏡像名稱、版本信息,管理員可以添加、修改、查詢和刪除白名單中的云應(yīng)用鏡像信息。
用戶管理:管理可以使用白名單服務(wù)器程序的用戶信息。
參數(shù)配置:白名單服務(wù)器軟件平臺(tái)運(yùn)行依賴一個(gè)配置文件指定白名單數(shù)據(jù)保存的地方,數(shù)據(jù)存取可采用文件和數(shù)據(jù)庫(kù)等存取方式,配置文件中還包含一組服務(wù)器程序運(yùn)行需要的配置參數(shù),有些參數(shù)是必須的,有些參數(shù)是可選的,如果可選參數(shù)沒(méi)有配置,平臺(tái)將使用其缺省值,配置參數(shù)包括服務(wù)端口、數(shù)據(jù)存取方式類型、數(shù)據(jù)存取方式URL地址、數(shù)據(jù)存取用戶名、數(shù)據(jù)存取密碼、日志配置參數(shù)等。
請(qǐng)求記錄,白名單服務(wù)器軟件對(duì)白名單客戶端程序的每次驗(yàn)證請(qǐng)求都進(jìn)行記錄,將請(qǐng)求IP,請(qǐng)求運(yùn)行的云應(yīng)用鏡像名稱,版本信息,請(qǐng)求時(shí)間等請(qǐng)求信息記錄到數(shù)據(jù)文件或數(shù)據(jù)庫(kù),供系統(tǒng)管理員對(duì)云計(jì)算環(huán)境中一段時(shí)間內(nèi)的請(qǐng)求進(jìn)行的行為分析。
系統(tǒng)日志,負(fù)責(zé)記錄服務(wù)器軟件運(yùn)行信息,可以根據(jù)日志級(jí)別過(guò)濾日志信息,來(lái)減少磁盤空間占用,提高性能并突出重要的日志信息,日志文件可以根據(jù)日期命名,可以設(shè)定日志文件的上限尺寸,超過(guò)設(shè)定上限時(shí),自動(dòng)備份并打開(kāi)一個(gè)新的日志文件,原有備份副本被覆蓋,可以設(shè)定循環(huán)使用的日志文件的數(shù)目,避免持續(xù)消耗磁盤空間,實(shí)現(xiàn)日志文件的自我管理,無(wú)需手工定期清理日志信息。
一種基于白名單的容器運(yùn)行安全驗(yàn)證處理方法,如圖1所示,具體包括:
(1)首先在Docker宿主機(jī)環(huán)境,安裝白名單客戶端插件程序;
白名單客戶端插件程序的安裝方式有兩種,一種是開(kāi)發(fā)人員在Docker宿主機(jī)環(huán)境先安裝Docker官方的Docker Engine程序,然后安裝獨(dú)立的白名單客戶端程序;另一種是直接安裝包含白名單客戶端的重新打包好的Docker Engine安裝程序。
用文本編輯器軟件修改并保存配置文件中的白名單服務(wù)器地址,停止Docker服務(wù),然后重新啟動(dòng)Docker Engine服務(wù),確保宿主機(jī)上運(yùn)行的Docker Engine服務(wù)能夠正確的加載白名單客戶端插件程序。
(2)用戶通過(guò)Docker客戶端程序(Docker CLI工具或其他Docker UI工具)執(zhí)行運(yùn)行Docker云應(yīng)用鏡像實(shí)例請(qǐng)求。
用戶通過(guò)Docker管理平臺(tái)或直接通過(guò)Docker Engine CLI客戶端程序輸入“docker run”指令向所在的宿主機(jī)節(jié)點(diǎn)的Docker Engine上發(fā)出執(zhí)行“Docker run鏡像名稱…”指令請(qǐng)求,Docker Engine接收到執(zhí)行創(chuàng)建并運(yùn)行云應(yīng)用鏡像實(shí)例指令后,通過(guò)Docker Engine的授權(quán)接口調(diào)用白名單客戶端插件程序進(jìn)行安全驗(yàn)證,白名單客戶端插件程序根據(jù)宿主機(jī)的信息(IP地址,運(yùn)行的鏡像名稱、版本等元數(shù)據(jù)信息)去調(diào)用配置好的白名單服務(wù)器的鏡像白名單校驗(yàn)API接口進(jìn)行安全校驗(yàn)。
(3)Docker Engine接收到客戶端的請(qǐng)求后,解析指令信息,并調(diào)用白名單客戶端插件進(jìn)行安全驗(yàn)證。
(4)白名單客戶端插件發(fā)送驗(yàn)證請(qǐng)求到白名單服務(wù)器進(jìn)行安全驗(yàn)證
白名單客戶端插件通過(guò)Docker客戶端程序(Docker CLI工具或其他Docker UI工具)獲取到宿主機(jī)的元數(shù)據(jù)信息(IP地址,運(yùn)行的鏡像名稱、版本等元數(shù)據(jù)信息),并將信息傳送給服務(wù)器端進(jìn)行對(duì)比驗(yàn)證,并返回驗(yàn)證信息(通過(guò)或不通過(guò));
(5)白名單服務(wù)器通過(guò)鏡像白名單校驗(yàn)API接口接收到客戶端程序發(fā)送的宿主機(jī)元數(shù)據(jù)信息(IP地址,運(yùn)行的鏡像名稱、版本等元數(shù)據(jù)信息),調(diào)用自身的白名單數(shù)據(jù)信息進(jìn)行對(duì)比驗(yàn)證,并給出驗(yàn)證結(jié)果信息,如果鏡像在白名單之列就返回驗(yàn)證通過(guò)信息,否則就返回驗(yàn)證失敗信息。
(6)白名單客戶端插件將接收到的驗(yàn)證結(jié)果信息返回給Docker engine服務(wù);
白名單客戶端插件程序接收到白名單服務(wù)器端程序的安全驗(yàn)證信息后,并將結(jié)果返回給Docker Engine服務(wù)程序。
(7)Docker engine服務(wù)根據(jù)驗(yàn)證插件返回的信息,執(zhí)行指令并將執(zhí)行結(jié)果返回給Docker客戶端。
Docker Engine程序如果接收到的是通過(guò)信息,Docker Engine執(zhí)行docker run指令,在宿主機(jī)創(chuàng)建并運(yùn)行云應(yīng)用鏡像實(shí)例,并將運(yùn)行信息返回給Docker客戶端;如果接收到的是不通過(guò)信息,Docker engine提示用戶執(zhí)行的操作是未授權(quán)操作。終止docker run命令的執(zhí)行
(8)Docker客戶端接收到Docker Engine返回的執(zhí)行結(jié)果信息
上述雖然結(jié)合附圖對(duì)本發(fā)明的具體實(shí)施方式進(jìn)行了描述,但并非對(duì)本發(fā)明保護(hù)范圍的限制,所屬領(lǐng)域技術(shù)人員應(yīng)該明白,在本發(fā)明的技術(shù)方案的基礎(chǔ)上,本領(lǐng)域技術(shù)人員不需要付出創(chuàng)造性勞動(dòng)即可做出的各種修改或變形仍在本發(fā)明的保護(hù)范圍以內(nèi)。