張 偉(中國大唐集團(tuán)科學(xué)技術(shù)研究院有限公司,北京100040)
在我國,云計算應(yīng)用市場有著巨大的發(fā)展?jié)摿ΑR环矫?,我國擁有世界上?shù)量最多的中小企業(yè),對于這些處在成長期的中小企業(yè)而言,自己投資建立數(shù)據(jù)中心的投資回報率較低,并且很難與業(yè)務(wù)的快速成長匹配,而云計算的租用模式正好為這些中小企業(yè)提供了合適的解決方案;另一方面,眾多的服務(wù)器、存儲硬件廠商以及平臺軟件廠商都希望通過云計算平臺將自己的產(chǎn)品推廣到中小企業(yè)中,以便未來能獲得更多的市場機(jī)會。數(shù)據(jù)中心的客戶集聚了高科技中小企業(yè),包括IT行業(yè)和金融行業(yè)的企業(yè),這些企業(yè)在使用了數(shù)據(jù)中心提供的云計算基礎(chǔ)服務(wù)后,必然對基于數(shù)據(jù)中心的云計算審計系統(tǒng)產(chǎn)生需求。信息審計應(yīng)用于云計算服務(wù)能夠提高網(wǎng)絡(luò)安全防護(hù)水平,云計算審計系統(tǒng)所覆蓋的范圍能夠發(fā)現(xiàn)大多數(shù)云計算服務(wù)可能存在的信息安全問題,從而減少信息風(fēng)險。目前市場上一些云計算審計系統(tǒng)存在顆粒度相對較粗、審計信息不完全,事件發(fā)生后無法真正去溯源調(diào)查事件原因等問題。
數(shù)據(jù)審計是以審計底層原始數(shù)據(jù)為切入點(diǎn),在對信息系統(tǒng)內(nèi)部控制測評的基礎(chǔ)上,通過對數(shù)據(jù)的采集、轉(zhuǎn)換、整理、分析和驗(yàn)證,并且運(yùn)用查詢分析、數(shù)據(jù)挖掘等多種技術(shù)方法構(gòu)建模型進(jìn)行數(shù)據(jù)分析,發(fā)現(xiàn)趨勢、異常和錯誤,從而收集審計證據(jù),實(shí)現(xiàn)審計目標(biāo)的審計方式。
數(shù)據(jù)審計在分布式云存儲的環(huán)境下顯得尤為重要。首先,在該環(huán)境中數(shù)據(jù)的完整性得不到保證,元數(shù)據(jù)服務(wù)器(Metadata Server)和數(shù)據(jù)塊服務(wù)器(Chunk Server)相分離,之間的更新有延遲,造成元數(shù)據(jù)中描述的文件與實(shí)際存儲在數(shù)據(jù)塊中的文件不一致;其次,在多副本的條件下,對其中某一副本的更改也會造成數(shù)據(jù)不一致;而隨著越來越多應(yīng)用在分布式環(huán)境下的部署,各種應(yīng)用的跟蹤調(diào)試信息變得分散凌亂,特別是現(xiàn)在的一個應(yīng)用程序可能需要多臺后端服務(wù)器的配合,從而造成整個業(yè)務(wù)流程日志出現(xiàn)片段化,不利于排錯和維護(hù)。當(dāng)某一個節(jié)點(diǎn)出現(xiàn)問題后,如何能夠快速地定位、糾錯并恢復(fù)運(yùn)行,這就是數(shù)據(jù)審計的職能。
此外,數(shù)據(jù)的隱私保護(hù)(文件是否被非法訪問或更改)、部署在各個節(jié)點(diǎn)上的軟硬件環(huán)境日志信息、安裝的虛擬機(jī)部署狀態(tài)信息,也是為了審計而需要采集的重要數(shù)據(jù)。
引入云審計系統(tǒng)之后,各個服務(wù)器節(jié)點(diǎn)的審計信息可以統(tǒng)一地通過一臺或者多臺審計服務(wù)器集中存放(根據(jù)策略),方便信息歸總和查詢,從而可以做到任何時候、任何地點(diǎn)的信息跟蹤。
云審計系統(tǒng)針對海量級異構(gòu)平臺,構(gòu)建在分布式文件系統(tǒng)之上。文件系統(tǒng)提供分布式的存儲和讀取,并確保文件內(nèi)容的一致性和文件本身的安全性。另外分布式文件系統(tǒng)需提供一個高性能的網(wǎng)絡(luò)連接設(shè)備及網(wǎng)絡(luò)傳輸機(jī)制供各種應(yīng)用程序調(diào)用。
審計服務(wù)器收集審計客戶端的日志信息,提供一個高性能的框架,支持大并發(fā)量以及突發(fā)量的審計信息處理。支持多種網(wǎng)絡(luò)協(xié)議,例如TCP、UDP等。審計服務(wù)器本身要完成對于審計內(nèi)容的處理,例如時間戳的更新,內(nèi)容完整性的校驗(yàn)。另外審計服務(wù)器還需要對接收的審計內(nèi)容進(jìn)行過濾,以方便維護(hù)和調(diào)試。同時審計服務(wù)器能夠完成審計策略的更新,更新后會主動通知審計客戶端,策略的更新需要進(jìn)行可靠性保證,保證策略的一致性。
審計客戶端安裝在需要被審計的節(jié)點(diǎn)(服務(wù)器或虛擬機(jī)),需要支持多實(shí)例運(yùn)行(即可以在同一節(jié)點(diǎn)上分別審計不同類型的信息)。另外還需要支持多個級別的傳輸機(jī)制,根據(jù)審計內(nèi)容的優(yōu)先級程度自主切換。
客戶端提供日志消息內(nèi)容的緩沖,為服務(wù)器切換提供大容量緩存??蛻舳诵枰瓿韶?fù)載均衡任務(wù),能夠在有限的信息條件下完成最佳服務(wù)器的選擇??蛻舳诉€需要完成策略文件接收的可靠性檢查,保證與審計服務(wù)器的審計策略相一致。
審計服務(wù)器的系統(tǒng)結(jié)構(gòu)如圖1所示。服務(wù)器主要由3個組件構(gòu)成:審計服務(wù)框架、審計數(shù)據(jù)操作集、第三方應(yīng)用或統(tǒng)計分析模塊。
圖1 審計服務(wù)器設(shè)計圖
2.1.1 審計服務(wù)框架
審計服務(wù)框架的主要作用是正確接收各審計客戶端發(fā)來的信息,同時維護(hù)一個客戶端列表,若用戶制定了新的審計策略,它將快速地對各客戶端進(jìn)行策略更新。審計服務(wù)框架主要由協(xié)議模塊、策略模塊、限速模塊、審計報文隊(duì)列、客戶列表以及工作線程這幾大部分構(gòu)成。
目前協(xié)議模塊只支持UDP和TCP 2種協(xié)議,審計報文內(nèi)容可以基于任意一種協(xié)議之上,具體的選擇由客戶端決定。安全起見,策略更新只能通過TCP協(xié)議傳輸,以保證各審計客戶端能夠正確接收到最新的審計策略。
限速功能主要是審計服務(wù)器為了防止被攻擊而采取的措施,可以針對特定地址或者審計報文總量進(jìn)行速度限制,從而有效地維護(hù)服務(wù)器的高可用性。
下面開始描述一下審計信息接收的過程及各模塊間的交互。
審計服務(wù)框架在啟動后,會根據(jù)用戶要求,創(chuàng)建一個或者多個工作線程用來接收審計數(shù)據(jù),而公共隊(duì)列可以認(rèn)為是接收的緩沖區(qū)。線程的數(shù)目是和CPU數(shù)量密切相關(guān)的,盡量做到均勻負(fù)載??梢詫⒍嗯_審計服務(wù)器組成集群,不同服務(wù)器上的工作線程采用同樣的策略并行協(xié)同工作。
接收隊(duì)列分為2種,一類是私有隊(duì)列,每一個工作線程都有自己的私有隊(duì)列空間,從socket接收到報文后會進(jìn)行一些公共的處理,例如時間戳更新、完整性校驗(yàn)、公共策略檢查等等。處理完畢之后就會把報文放入本線程的私有隊(duì)列之中,緩存到一定數(shù)量再交由上層審計數(shù)據(jù)操作集批量處理。另一類隊(duì)列是公共隊(duì)列,它的容量要比私有隊(duì)列大得多。當(dāng)私有隊(duì)列的報文數(shù)量達(dá)到一定閾值后,工作線程會有超負(fù)荷的危險,這時對新到達(dá)的報文不做處理,直接丟入公共隊(duì)列中,當(dāng)負(fù)載高峰過后,私有隊(duì)列中的報文數(shù)量低于閾值時,再從公共隊(duì)列中取出進(jìn)行處理,可見,引入公共隊(duì)列主要是為了避免工作線程因超負(fù)荷而丟棄報文(見圖2)。
圖2 私有隊(duì)列與公共隊(duì)列
對于審計報文消息,審計服務(wù)器不對UDP傳輸?shù)膱笪奶峁┤魏涡问降谋WC,但是只要這個報文能夠被審計服務(wù)器接收,那么就會被認(rèn)為是正確處理。在極端情況下,可能存在網(wǎng)絡(luò)中斷或者本地兩級隊(duì)列全滿的情況,導(dǎo)致日審計報文丟失,對于這種情況,審計服務(wù)器不提供重傳機(jī)制。對TCP傳送的報文充分利用TCP本身的可靠性傳輸,但是這會帶來很多額外的開銷,除非極其重要報文(例如策略更新),否則不推薦采用TCP傳輸。
審計服務(wù)框架里面還有一個比較重要的策略模塊,策略是審計客戶端與相應(yīng)審計服務(wù)器能夠彼此連接的重要依據(jù),服務(wù)器上每個工作線程采用一個策略,并根據(jù)策略標(biāo)識來辨別需要接收各種審計信息??上攵?,只要它里面存在多個工作線程,一個服務(wù)器上可以制定任意多個策略。此外,服務(wù)框架可以對一個工作進(jìn)程使用的策略進(jìn)行動態(tài)更新,并同時將策略發(fā)送給對應(yīng)的審計客戶端,以支持動態(tài)批量審計。
策略的描述存在于策略文本文件中,工作線程通過該文件的地址與其中策略進(jìn)行綁定。管理員可以通過各種編輯器進(jìn)行編輯。策略的制定包含幾個步驟。
a)更新策略版本號,只有接收到更新的策略版本,審計客戶端才會進(jìn)行策略更新。
b)設(shè)置客戶端IP地址及掩碼,例如192.168.2.10/24,IP地址之間需用逗號隔開;同樣也可以用網(wǎng)段范圍的形式出現(xiàn),例如:192.168.2.5/24~192.168.2.15/24。
c)設(shè)置策略標(biāo)識,即需要審計客戶端發(fā)送什么樣的信息,包括客戶端軟硬件運(yùn)行狀態(tài)、數(shù)據(jù)完整性、一致性狀態(tài)、隱私數(shù)據(jù)訪問記錄、虛擬機(jī)運(yùn)行狀態(tài)等??蛻舳税l(fā)出的報文中也含有這個標(biāo)識,工作線程只接收包含相應(yīng)標(biāo)識的報文。
d)設(shè)置策略過期時間:設(shè)置一個時間窗口,當(dāng)策略使用時間超過該窗口后,審計信息的發(fā)送和接收工作都將自動停止。此時需要替換為新的策略。
e)報警條件:當(dāng)收到異常的審計信息,服務(wù)器端要給出報警提示,關(guān)于異常的定義要在策略中說明。
策略制定完畢以后,服務(wù)器按照策略和遠(yuǎn)程客戶端連接,將當(dāng)前在線的客戶端組成客戶列表并加以維護(hù)。成功以后開始發(fā)送策略版本號,考慮到會出現(xiàn)策略更新的情況,只有版本號比客戶端的版本新才繼續(xù)策略的傳輸,否則客戶端直接拒絕。在客戶端開始發(fā)送以后,通過確認(rèn)審計報文的序列號來保證數(shù)據(jù)的正確傳輸。
動態(tài)更新審計服務(wù)框架維持的客戶列表。一個新的客戶端上線,會向服務(wù)框架發(fā)送請求接入的報文,若該客戶端與策略中指定的IP地址相匹配,服務(wù)框架就把客戶端信息加入這個列表,運(yùn)行過程中不會刪除客戶信息,直到新的策略更新,服務(wù)框架會嘗試連接所有該策略下的客戶端,若嘗試一定次數(shù)失敗以后,就會把客戶信息從鏈表刪除。
2.1.2 審計信息操作集
審計信息操作集處于服務(wù)框架和第三方程序之間,起到了承上啟下的作用,它將接收到的審計信息存儲在服務(wù)器上,并根據(jù)上層的應(yīng)用對信息進(jìn)行格式上的轉(zhuǎn)換。
a)審計信息存儲:從工作線程的私有隊(duì)列上取出審計報文,并以用戶指定的格式保存在服務(wù)器本地的審計日志文本文件中,用戶可通過編輯工具對其進(jìn)行各種操作。
b)審計信息報警:當(dāng)接收到異常審計信息后發(fā)出報警。
c)審計信息格式轉(zhuǎn)換:根據(jù)上層應(yīng)用(數(shù)據(jù)庫應(yīng)用、數(shù)據(jù)挖掘等)的要求,進(jìn)行相應(yīng)的格式轉(zhuǎn)換。
2.1.3 第三方應(yīng)用或統(tǒng)計分析模塊
審計服務(wù)器本身不做審計文件的檢索、數(shù)據(jù)挖掘、壓縮等操作,這些工作都由第三方程序(Matlab、Shell、文本編輯器等)完成,但是審計服務(wù)器提供接口,允許第三方程序?qū)ξ募M(jìn)行壓縮等操作。
此外,審計服務(wù)器本身不考慮審計文件備份的問題,這方面的工作由云存儲分布式文件系統(tǒng)來實(shí)現(xiàn),服務(wù)器僅僅是共同打開同一份文件進(jìn)行讀寫,背后邏輯借助文件系統(tǒng)來保證原子性、一致性以及安全性。
審計客戶端安裝在需要被審計的節(jié)點(diǎn)上,并根據(jù)審計策略收集相關(guān)信息,并發(fā)送給審計服務(wù)器。這些信息包括隱私數(shù)據(jù)訪問記錄、數(shù)據(jù)完整性驗(yàn)證信息、虛擬機(jī)日志、軟硬件環(huán)境日志或其他用戶指定的信息。設(shè)計圖見圖3。
圖3 審計客戶端設(shè)計圖
2.2.1 通信協(xié)議
客戶端目前只支持TCP和UDP 2種通信方式,系統(tǒng)啟動時候默認(rèn)全部創(chuàng)建完畢。對于審計信息報文,2種協(xié)議都可以支撐,但推薦使用UDP協(xié)議,出于安全的考慮策略更新的消息只能通過TCP傳輸。
2.2.2 策略模塊
策略模塊主要完成策略文件的可靠性更新。該模塊被加載的時候,首先創(chuàng)建監(jiān)聽socket用于策略更新,并將策略版本號設(shè)為0,表示此時尚無策略。當(dāng)審計服務(wù)器的工作線程加載新的策略文件后,會主動觸發(fā)更新機(jī)制,這時客戶端會收到更新請求,里面包含新的策略版本號??蛻舳吮容^服務(wù)器版本號和本地策略文件版本號,如果版本號更大則啟動更新流程,否則拒絕服務(wù)器請求。
為了防止重復(fù)更新(一個客戶端可能注冊在多個服務(wù)器列表上面),確認(rèn)啟動更新之后,首先立即把本地文件版本號升級,這樣就避免了重復(fù)數(shù)據(jù)。一旦更新失敗,回退策略版本到本地策略文件,并發(fā)一個報文通知審計服務(wù)器請求重傳。新的策略更新完畢之后,刷新到本地策略文件。接著通知負(fù)載均衡模塊,重新計算審計服務(wù)器地址,并且更新通知給客戶端框架。
2.2.3 負(fù)載均衡
負(fù)載均衡模塊結(jié)構(gòu)如圖4所示。
圖4 負(fù)載均衡模塊結(jié)構(gòu)
由于客戶端可以注冊在多個審計服務(wù)器上的工作線程上,負(fù)載均衡就成為客戶端里面非常重要的一個功能組建,它要選擇出最合適的服務(wù)器作為接收方。負(fù)載均衡模塊輸入是策略模塊,輸出是合適的審計服務(wù)器地址。負(fù)載均衡模塊主要完成策略信息的分析以及服務(wù)器的傳輸性能測試。之后,該模塊也會以固定的時間間隔來計算傳輸時間,做到動態(tài)的負(fù)載均衡。
客戶端所使用的UDP/TCP socket也是由負(fù)載均衡模塊創(chuàng)建的,在傳輸?shù)牟呗园l(fā)生變化時(例如丟包情況嚴(yán)重),負(fù)載均衡程序透明地完成socket替換,客戶端框架只感知數(shù)據(jù)發(fā)送的成功與否,然后采取相應(yīng)措施,連接情況都是透明的。
2.2.4 工作線程
客戶端工作線程根據(jù)策略收集節(jié)點(diǎn)上的審計信息,包括數(shù)據(jù)完整性、隱私數(shù)據(jù)保護(hù)、各種日志等,除可靠性要得到保證外,還需要一定的靈活性。
在客戶端實(shí)例啟動成功,并正確接收到服務(wù)器發(fā)送的策略后,客戶端會創(chuàng)建出工作線程。此后,工作線程在策略指定的時間窗口內(nèi)不斷采集審計信息,并將它們作為報文放在發(fā)送隊(duì)列上等待發(fā)送。如果在運(yùn)行過程中客戶端和審計服務(wù)器間的連接出現(xiàn)問題(出現(xiàn)網(wǎng)絡(luò)擁塞,或者服務(wù)器端出現(xiàn)故障),此時將審計報文放入自己的私有隊(duì)列中,等到連接正常后再將它們放入發(fā)送隊(duì)列,如果長時間出現(xiàn)連接故障,則私有隊(duì)列內(nèi)的報文會超過某一閾值,此時客戶端就會認(rèn)為審計工作無法完成,自行銷毀并釋放相應(yīng)空間,不會給系統(tǒng)其他方面帶來風(fēng)險。
2.2.5 發(fā)送隊(duì)列
如上所述,在客戶端也存在公共、私有兩級隊(duì)列,但它和服務(wù)器端的兩級隊(duì)列功能略有不同。
考慮到一般來說服務(wù)器端負(fù)載較大,服務(wù)器端的工作線程使用自身私有隊(duì)列接收審計報文并進(jìn)行各種檢查,審計數(shù)據(jù)操作集也是從私有隊(duì)列里讀取檢查后的審計信息。如果隊(duì)列長度超過閾值后,工作線程會直接將新到達(dá)的報文暫存公共隊(duì)列中,以后擇機(jī)再對它們進(jìn)行處理。
而對于客戶端來說,單個所在節(jié)點(diǎn)發(fā)送的報文相對較少,有一個公共的發(fā)送隊(duì)列已經(jīng)夠用,各工作線程之所以還設(shè)置私有隊(duì)列是由于:當(dāng)審計服務(wù)器和客戶端間出現(xiàn)連接故障時(一般由負(fù)載均衡模塊告知),工作線程會將新的報文放入自己的私有隊(duì)列中,并不會發(fā)送出去,之后再根據(jù)情況來決定是將私有隊(duì)列中的報文移入公共隊(duì)列發(fā)送,還是工作線程自毀。
2.2.6 報文格式
審計報文的格式定義如下:
通過上述措施,在一定程度上保障了基于數(shù)據(jù)中心的云計算審計系統(tǒng)高可用性。云計算審計系統(tǒng)收集云服務(wù)方和用戶的審計數(shù)據(jù),保證審計數(shù)據(jù)的真實(shí)性和完整性。云計算審計系統(tǒng)需要根據(jù)不同環(huán)境、運(yùn)營經(jīng)驗(yàn)不斷完善。安全可靠的云計算審計系統(tǒng)有利于提高云計算服務(wù)的安全保障能力,促進(jìn)云計算產(chǎn)業(yè)的快速健康發(fā)展。3 結(jié)束語