文獻(xiàn)標(biāo)識碼: A
文章編號: 0258-7998(2013)01-0132-04
云計(jì)算是一種新興的商業(yè)計(jì)算模式,它將計(jì)算任務(wù)分布在大量計(jì)算機(jī)構(gòu)成的資源池上,使各種應(yīng)用系統(tǒng)能夠根據(jù)需要獲取計(jì)算能力、存儲(chǔ)空間和各種軟件服務(wù)[1]。云計(jì)算代表了IT領(lǐng)域向集約化、規(guī)?;c專業(yè)化道路發(fā)展的趨勢,是IT領(lǐng)域正在發(fā)生的深刻變革,但它在提高使用效率的同時(shí),為實(shí)現(xiàn)用戶信息資產(chǎn)安全與隱私保護(hù)帶來極大的沖擊與挑戰(zhàn)[2]。當(dāng)前,安全問題已成為云計(jì)算推廣應(yīng)用的最主要的制約因素,因此,云安全問題成為必須解決的問題之一[4]。
平臺(tái)即服務(wù)PaaS(Platform-as-a-Service)作為云計(jì)算的一種,是將基礎(chǔ)設(shè)施平臺(tái)作為一種服務(wù)呈現(xiàn)給用戶的商業(yè)模式,方案成本比較低。對那些資金有限、IT服務(wù)資源有限,并且急需擴(kuò)展IT基礎(chǔ)支撐的企業(yè)有著巨大的吸引力[3]。同時(shí),PaaS也是SaaS模式的一種應(yīng)用,它降低了SaaS開發(fā)應(yīng)用的門檻,提高了開發(fā)效率,充分體現(xiàn)了互聯(lián)網(wǎng)低成本、高效率、規(guī)?;瘧?yīng)用的特性,是一場互聯(lián)網(wǎng)應(yīng)用軟件開發(fā)的革命。
本文首先分析了現(xiàn)有PaaS平臺(tái)的特征及其面臨的安全問題,然后介紹了現(xiàn)有解決方案及其不足,最后提出了一種基于Java安全體系結(jié)構(gòu)的托管PaaS平臺(tái)安全容器解決方案。
1 托管PaaS平臺(tái)及其安全問題
1.1 托管PaaS平臺(tái)
PaaS提供基于基礎(chǔ)設(shè)施(即IaaS)上的軟件、中間件和應(yīng)用開發(fā)工具[8]。不同的PaaS提供不同組合的服務(wù),綜合的PaaS是一個(gè)集開發(fā)、測試、部署、托管和應(yīng)用維護(hù)為一體的集成運(yùn)維環(huán)境,有的PaaS還提供源代碼和版本控制等應(yīng)用軟件開發(fā)的過程管理[6]。從PaaS環(huán)境的應(yīng)用支撐環(huán)境出發(fā),典型的PaaS系統(tǒng)分為兩類:開放PaaS平臺(tái)和托管PaaS平臺(tái)。其中托管PaaS平臺(tái)只提供包含安全和可伸縮性等基本功能的托管服務(wù),不提供開發(fā)和測試環(huán)境。
1.2 托管PaaS平臺(tái)的安全問題
托管PaaS平臺(tái)為了實(shí)現(xiàn)可擴(kuò)展、可用性、管理以及運(yùn)行效率等方面的“經(jīng)濟(jì)性”,基本都采用多租戶模式。多租戶PaaS服務(wù)模式的應(yīng)用面臨著一些安全隔離問題[9]。
(1)云計(jì)算應(yīng)用所用的數(shù)據(jù)會(huì)和其他用戶的數(shù)據(jù)混合存儲(chǔ),惡意的云服務(wù)提供商、惡意的鄰居“租戶”以及某些類型應(yīng)用的濫用會(huì)造成用戶數(shù)據(jù)安全問題;
(2)不同用戶的應(yīng)用共同運(yùn)行在一個(gè)JVM之上,對JVM的非法操作會(huì)造成鄰居租戶的應(yīng)用安全問題,例如惡意應(yīng)用通過系統(tǒng)調(diào)用使JVM退出;
(3) 不同用戶的應(yīng)用在運(yùn)行過程中共享系統(tǒng)資源,如CPU、內(nèi)存、網(wǎng)絡(luò)資源等。惡意應(yīng)用對共享資源過多的非法占用將會(huì)造成鄰居租戶應(yīng)用無法正常運(yùn)行。
1.3 PaaS平臺(tái)安全問題一般解決方案
在多租戶PaaS模式中,最核心的安全原則就是多租戶應(yīng)用隔離[7]。云用戶確保自己的數(shù)據(jù)只能被自己的企業(yè)用戶和應(yīng)用程序訪問。為了實(shí)現(xiàn)多租戶應(yīng)用隔離,云提供商必須提供“沙盒”架構(gòu),通過平臺(tái)的“沙盒”性實(shí)現(xiàn)集中維護(hù)客戶部署在PaaS平臺(tái)上應(yīng)用的保密性和完整性。為了提供“沙盒”架構(gòu),現(xiàn)有云提供商通過為每一個(gè)用戶應(yīng)用提供一個(gè)Servlet容器的方法來實(shí)現(xiàn)邏輯上的隔離,例如Google App Engine為每一個(gè)應(yīng)用運(yùn)行一個(gè)獨(dú)有的Jetty容器。
現(xiàn)有解決方案能有效提供平臺(tái)的“沙盒”架構(gòu),實(shí)現(xiàn)多租戶應(yīng)用隔離,但是同時(shí),多租戶模式下運(yùn)行多個(gè)Servlet容器的模式會(huì)帶來較大的系統(tǒng)開銷。本文在現(xiàn)有解決方案的基礎(chǔ)上,提出了一種由一個(gè)Servlet容器承載不同應(yīng)用的解決方案,在實(shí)現(xiàn)多租戶應(yīng)用隔離的同時(shí)保證系統(tǒng)性能。
2 托管PaaS平臺(tái)安全容器設(shè)計(jì)
本研究中,基于Java實(shí)現(xiàn)托管PaaS平臺(tái),采用Jetty作為Servlet容器,實(shí)現(xiàn)對Java Web應(yīng)用的托管服務(wù)。
自Java技術(shù)出現(xiàn)以來,Java平臺(tái)的安全問題以及應(yīng)用Java技術(shù)而產(chǎn)生的安全問題引起了廣泛的關(guān)注,并從JDK1.0以來,Java的安全體系結(jié)構(gòu)不斷演變,安全也不斷得到加強(qiáng),如今Java技術(shù)已能提供對安全的良好支持。本文提出的PaaS平臺(tái)安全容器,就是利用Java技術(shù)提供的安全性,并在此基礎(chǔ)上結(jié)合托管PaaS平臺(tái)特點(diǎn)進(jìn)行定制而實(shí)現(xiàn)的。
2.1 Java安全體系結(jié)構(gòu)
Java技術(shù)從多個(gè)方面提供了對安全性的支持:Java語言本身安全性;虛擬機(jī)的雙親委托類加載機(jī)制;安全管理器和Java API。這些共同構(gòu)成了Java安全體系結(jié)構(gòu),即沙盒模型:一個(gè)支持靈活的細(xì)粒度訪問控制安全策略,并且具有可擴(kuò)充性和伸縮性的安全體系結(jié)構(gòu)。 Java沙盒采用了靈活的保護(hù)域安全模型, 由安全策略來決定代碼具有的訪問許可,對被保護(hù)資源的訪問會(huì)激發(fā)安全檢查,這些檢查會(huì)將授權(quán)的許可和其試圖訪問所需要的權(quán)限進(jìn)行比較。這些激發(fā)安全檢查的訪問包括文件系統(tǒng)訪問、JNI訪問本地代碼和創(chuàng)建Socket連接等。
2.2 托管PaaS安全容器
利用Java沙盒模型提供的訪問控制功能,可以將同一JVM中運(yùn)行的代碼從邏輯上分開:分別運(yùn)行于不同的沙盒中。在本研究中,托管PaaS平臺(tái)安全容器,即基于Java沙盒模型實(shí)現(xiàn)應(yīng)用隔離。
利用Java沙盒模型可以實(shí)現(xiàn)PaaS平臺(tái)應(yīng)用的訪問控制功能,但同時(shí)也存在一些不足:
(1) Java安全策略文件實(shí)現(xiàn)代碼和權(quán)限映射,在托管PaaS平臺(tái)上,系統(tǒng)運(yùn)行過程中,用戶不斷上傳新應(yīng)用,這就使得安全策略文件需要不斷修改并生效。
(2) 用戶上傳Web應(yīng)用多采用war包的形式,Jetty部署應(yīng)用時(shí)會(huì)將其自動(dòng)解壓至臨時(shí)文件夾,這為在安全策略文件中指定該應(yīng)用的代碼位置帶來了困難。
(3) 在PaaS平臺(tái)中,多租戶應(yīng)用共同運(yùn)行在一個(gè)Jetty容器中。為避免相互影響,這些應(yīng)用只能擁有有限并且相同的資源訪問權(quán)限,通過安全策略文件的形式存在很大的重復(fù),并且JVM實(shí)現(xiàn)安全策略文件到應(yīng)用權(quán)限的映射也會(huì)降低系統(tǒng)性能。
因此,本研究中,基于托管PaaS平臺(tái)及Jetty和用戶應(yīng)用的特點(diǎn),在Java沙盒模型的基礎(chǔ)上進(jìn)行了擴(kuò)展和定制。其體系結(jié)構(gòu)如圖1所示。
在托管PaaS平臺(tái)運(yùn)行環(huán)境中,安全容器提供應(yīng)用運(yùn)行受限的環(huán)境,即沙盒環(huán)境。沙盒環(huán)境實(shí)現(xiàn)應(yīng)用運(yùn)行時(shí)5個(gè)方面的訪問控制:文件訪問控制、網(wǎng)絡(luò)訪問控制、多線程控制、JNI訪問控制和System.exit()方法訪問控制。在托管PaaS平臺(tái)運(yùn)行環(huán)境中,安全容器在Java安全體系結(jié)構(gòu)基礎(chǔ)上進(jìn)行擴(kuò)展,實(shí)現(xiàn)了兩套邏輯沙盒模型,在邏輯上把系統(tǒng)代碼和應(yīng)用代碼分開處理,實(shí)現(xiàn)簡化安全策略文件的配置,提高系統(tǒng)性能。
在托管PaaS平臺(tái)運(yùn)行環(huán)境中,兩套邏輯沙盒模型(默認(rèn)沙盒、應(yīng)用沙盒)分別提供系統(tǒng)代碼和應(yīng)用代碼的運(yùn)行環(huán)境,并實(shí)現(xiàn)相應(yīng)的訪問控制。托管PaaS平臺(tái)運(yùn)行環(huán)境安全模型主要通過保護(hù)域模塊、類加載模塊、安全策略模塊、訪問控制模塊4個(gè)邏輯模塊來實(shí)現(xiàn)。
(1) 保護(hù)域模塊
在Java安全體系結(jié)構(gòu)中,域在邏輯上封裝了一組類,并根據(jù)當(dāng)前有效的安全策略,將這組類的實(shí)例賦予一組相同的許可權(quán)限。當(dāng)類加載器將類型裝入Java虛擬機(jī)時(shí),它們將為每個(gè)類型指派一個(gè)保護(hù)域, Java應(yīng)用環(huán)境通過維持代碼到它們的保護(hù)域,再到它們的許可權(quán)限的映射來實(shí)現(xiàn)沙盒。
在PaaS系統(tǒng)中,定義了兩種安全域:系統(tǒng)保護(hù)域和應(yīng)用保護(hù)域。系統(tǒng)保護(hù)域使用Java安全體系結(jié)構(gòu)中默認(rèn)的域模型,即通過代碼位置及簽名指定保護(hù)域,并通過安全策略文件為其指定權(quán)限。
類似地,應(yīng)用保護(hù)域由每個(gè)應(yīng)用的AppContext來指定,邏輯上與一個(gè)Web應(yīng)用相對應(yīng)。同時(shí),由于安全容器中所有應(yīng)用擁有特定的有限權(quán)限,可以通過應(yīng)用類加載器直接為應(yīng)用指定權(quán)限集,從而避免安全策略文件到權(quán)限的映射。
(2) 類加載模塊
在Java安全體系結(jié)構(gòu)中,由類加載器根據(jù)所加載的所有類或接口的代碼庫和簽名,以及系統(tǒng)的安全策略創(chuàng)建保護(hù)域的實(shí)例,并為每個(gè)類型指派到相應(yīng)的保護(hù)域。
PaaS平臺(tái)運(yùn)行環(huán)境中實(shí)現(xiàn)了兩套保護(hù)域模型,相應(yīng)地實(shí)現(xiàn)了兩套類加載策略:系統(tǒng)類(Jetty代碼和服務(wù)端代碼)和應(yīng)用類分別由系統(tǒng)類加載器和WebApp類加載器加載。系統(tǒng)類加載器加載代碼時(shí),使用Java安全體系結(jié)構(gòu)默認(rèn)的方式(即代碼位置)為每個(gè)類型指派保護(hù)域。WebApp類加載器加載應(yīng)用類時(shí),根據(jù)該應(yīng)用的AppContext為其指派保護(hù)域,并為此保護(hù)域賦予默認(rèn)應(yīng)用權(quán)限集。
在Jetty中,應(yīng)用類的加載利用ContextClssLoader的方法,為每一個(gè)應(yīng)用起一個(gè)線程,通過該線程的ContextClassLoader屬性保存一個(gè)ClassLoader實(shí)例的引用,使得此線程的任何語句都可以得到此ClassLoader,然后用來加載類。即在Jetty中,每一個(gè)應(yīng)用由一個(gè)WebAppClassLoader實(shí)例進(jìn)行加載。
(3) 安全策略模塊
在Java安全體系結(jié)構(gòu)中,沙盒模型中類和權(quán)限的映射由類加載器加載類時(shí)實(shí)現(xiàn):類加載器創(chuàng)建一個(gè)保護(hù)域的實(shí)例,并根據(jù)當(dāng)前安全策略為該保護(hù)域內(nèi)代碼創(chuàng)建權(quán)限集。
默認(rèn)沙盒采用Java安全體系結(jié)構(gòu)默認(rèn)的安全策略文件來實(shí)現(xiàn)安全策略,即JVM實(shí)現(xiàn)安全策略文件到保護(hù)域權(quán)限集的映射。應(yīng)用沙盒采用PaaS系統(tǒng)默認(rèn)應(yīng)用安全策略,該策略指定了PaaS系統(tǒng)中應(yīng)用的默認(rèn)權(quán)限集,由WebAppClassLoader加載應(yīng)用類型時(shí)直接指定。
(4) 訪問控制模塊
Java安全體系結(jié)構(gòu)中,運(yùn)行于沙盒中的代碼訪問被保護(hù)資源時(shí),由安全管理器進(jìn)行安全檢查,最終實(shí)現(xiàn)對沙盒中代碼的訪問控制。由PaaS平臺(tái)運(yùn)行環(huán)境體系結(jié)構(gòu)圖可知,在PaaS中,為了更好地進(jìn)行應(yīng)用的訪問控制,系統(tǒng)代碼和應(yīng)用代碼分別運(yùn)行于兩套沙盒模型中,并且這兩套沙盒分別采用各自的域模型和安全策略模型。因此,為了實(shí)現(xiàn)訪問控制,需要分別按照兩套邏輯分別進(jìn)行權(quán)限檢查。同時(shí),出于安全的考慮,Java安全體系結(jié)構(gòu)中,JVM實(shí)例某一時(shí)刻最多只能指定一個(gè)安全管理器實(shí)例,因此在PaaS平臺(tái)運(yùn)行托管環(huán)境中,安全管理器需要同時(shí)處理兩套訪問控制邏輯。其訪問控制流程如圖2所示。
PaaS云平臺(tái)中邏輯結(jié)點(diǎn)均為虛擬機(jī),包括一個(gè)PaaS Manager、一個(gè)FTP服務(wù)器以及若干PaaS Container結(jié)點(diǎn)。測試中,所有虛擬機(jī)性能均相同,CPU個(gè)數(shù)為1,內(nèi)存為1 024 MB。
3.2 安全容器系統(tǒng)開銷測試
在此測試階段,3臺(tái)Container結(jié)點(diǎn)分別使用以下方式托管應(yīng)用:運(yùn)行一個(gè)Servlet容器,托管一個(gè)用戶應(yīng)用;運(yùn)行一個(gè)Servlet容器,托管3個(gè)不同用戶應(yīng)用;運(yùn)行3個(gè)Servlet容器,分別托管一個(gè)用戶應(yīng)用。系統(tǒng)啟動(dòng)并運(yùn)行穩(wěn)定后,每5 s記錄一次Container占用CPU及內(nèi)存的情況。測試結(jié)果分別如圖4、圖5所示。
由測試結(jié)果可知,運(yùn)行Servlet容器將會(huì)帶來較大的系統(tǒng)開銷,而一個(gè)Servlet容器中托管應(yīng)用數(shù)的增加并不會(huì)帶來較明顯的CPU及內(nèi)存的消耗。因此,與現(xiàn)有PaaS使用一個(gè)容器托管一個(gè)應(yīng)用的方式相比,本文中PaaS安全容器解決方案將會(huì)帶來明顯的系統(tǒng)性能提升。
3.3 沙箱模型性能測試
為了實(shí)現(xiàn)PaaS容器安全,通過Java沙箱機(jī)制實(shí)現(xiàn)應(yīng)用隔離。本文的PaaS安全解決方案中,結(jié)合Jetty托管應(yīng)用的特點(diǎn),在Java沙箱模型基礎(chǔ)上實(shí)現(xiàn)定制。本測試階段,3臺(tái)Container結(jié)點(diǎn)分別作如下實(shí)現(xiàn):無沙箱、默認(rèn)沙箱和定制沙箱。3臺(tái)Container分別托管相同應(yīng)用,該應(yīng)用無文件訪問權(quán)限,系統(tǒng)啟動(dòng)并運(yùn)行穩(wěn)定后,通過PC客戶端訪問應(yīng)用,進(jìn)行10次文件讀操作,記錄所需CPU時(shí)間。測試結(jié)果如圖6所示。
無沙箱限制時(shí),應(yīng)用讀文件成功,沙箱環(huán)境下,應(yīng)用訪問失敗。同時(shí),由上述測試結(jié)果可知,沒有沙箱限制時(shí),應(yīng)用讀文件所需CPU時(shí)間最短。通過定制沙箱,減少從安全策略文件到沙箱權(quán)限集的映射,一定程序上提高了應(yīng)用運(yùn)行速度,提高系統(tǒng)性能。
云計(jì)算是當(dāng)前發(fā)展迅速的新興產(chǎn)業(yè),其發(fā)展面臨著許多關(guān)鍵問題,其中安全問題成為制約其發(fā)展的最主要因素[7]。PaaS作為云計(jì)算的一種服務(wù)方式,具有廣闊的發(fā)展前景。本文研究了PaaS云平臺(tái)所面臨的一些安全問題,分析了現(xiàn)有解決方案及其存在的缺陷,并在此基礎(chǔ)上提出托管PaaS平臺(tái)安全容器解決方案。通過測試證明,本文所提出的解決方案在實(shí)現(xiàn)PaaS平臺(tái)應(yīng)用隔離的前提下,降低了系統(tǒng)開銷,保證了系統(tǒng)性能。
參考文獻(xiàn)
[1] 劉鵬.云計(jì)算的定義和特點(diǎn)[OL].(2009-02-05). http://www.chinaclold.cnlshow.aspx?id=741&eid=17.
[2] CSA, Cloud Security Alliance[EB/OL].http://clandsecuring aliance.org.
[3] LUIS M V, LUIS R M, JUAN C, et al. A break in the clouds: towards a cloud definition[J].ACM SIGCOMM Computer Communication Review, 2009, 39(1):50-55.
[4] BALACHANDRA R K, RAMAKRISHNA P V, ATANU R. Cloud security issues[C]. Proceedings of the 2009 IEEE International Conference on Services Computing. 2009:517-520.
[5] 張?jiān)朴? 陳清金, 潘松柏,等. 云計(jì)算安全關(guān)鍵技術(shù)分析[J]. 電信科學(xué),2010,26(9):64-69.
[6] RAJU B P R, SWARNA P R, RAO M S. Privacy and security issues of Cloud Computing[J]. IJART, 2011,1(2):128-136.
[7] 馮登國,張敏,張妍,等.云計(jì)算安全研究[J]. 軟件學(xué)報(bào),2011,22(1):71-83.
[8] KUYORA S O, LBIKUNLE F, AWODELE O. Cloud computing security issues and challenges[J]. IJCN, 2011,3(5):344-349.
[9] 林兆驥,付雄,王汝傳,等. 云計(jì)算安全關(guān)鍵問題研究[J].信息化研究,2011,37(2):1-4.