基於VPC內的雲主機安全隔離技術

1引言

    隨着業務的持續發展,各行業開始逐漸將業務系統通過雲計算平臺進行整合,採用部分雲化的架構也成爲業內主流,雲計算已經經歷了十多年的發展歷程,廣電、政府、醫療、教育各行各業也開始將傳統的自建IT模式轉爲使用公有云方式。甚至出於可控性和私密性的考慮,更多的大型企業、運營商、政府也已經投入自建私有云平臺。不管是公有云還是私有云,不同企業或者部門都會以租戶形式存在於雲上,出於安全考慮,他們都可以使用VPC技術進行網絡上安全隔離,VPC即Virtual Private Cloud,VPC技術可以讓租戶在雲內擁有一個與其他租戶之間邏輯隔離的區域,並在這個區域內使用各種雲資源,租戶可以完全自由掌控雲上虛擬網絡,但這種隔離只是爲租戶提供一個私有空間。

    凡事沒有絕對安全,基於VPC內雲主機之間安全隔離也值得重視,其中需要考慮的問題很多。首先VPC內相同業務的雲主機是否會落在同一臺宿主機上,如果落在同一臺宿主機上會帶來什麼樣的風險。當同一臺宿主機上的雲主機較多的時候,雲主機之間CPU、內存、磁盤IO高負載使用是否會互相影響,VPC內部的網絡安全如何保障,如何避免單臺雲主機被攻擊帶來的全網淪陷。這些都是本文將探討的問題。

    KVM是目前各大雲平臺使用最廣泛的虛擬化技術,Openstack作爲開源雲計算管理平臺架構的典範,本文將以KVM虛擬化技術和Openstack雲解決方案爲例,分析基於VPC內的雲主機安全隔離技術。

2雲主機安全隔離技術分析

2.1處理器及內存性能隔離

    當一個租戶上雲的時候,雲主機會被調度到哪個計算節點由雲平臺的調度機制來決定,當VPC內雲主機數量遠遠大於雲平臺計算節點數量,必然會導致部分雲主機處於同一臺計算節點。如果該租戶雲主機數量較少,調度策略不嚴謹也有可能導致部分雲主機處於同一臺計算節點。最好的處理方式是儘可能讓相同業務的雲主機或者說掛在同一個負載均衡器下的雲主機落在不同的計算節點,如果條件允許最好是落在不同的機櫃,不同的機房,規避單個計算節點故障帶來相同業務多臺雲主機同時遷移的風險。以OpenStack爲例,nova模塊專門負責管理雲主機,nova又由多個子服務組成,負責雲主機調度的是nova-scheduler,nova-scheduler幫助選擇在最合適的計算節點上啓用雲主機實例。調度過程分爲兩步如圖1所示。第一步是通過過濾器篩選可用的計算節點,第二步是通過weight計算在權重最高的計算節點上創建實例。就過濾器而言,OpenStack有自己默認的過濾機制,我們可以根據自己的需求進行修改。默認情況下,過濾器會按照默認機制選出合適的計算節點,選舉順序如下:過濾曾創建失敗的報錯主機,儘可能分配不同可用區,過濾內存、磁盤、CPU不夠用節點,過濾nova-compute服務異常節點,儘可能分散實例在不同節點上。最後再根據內存、CPU等計算節點容量評估權重得分,根據權重將雲主機調度至合適的計算節點。如果需要忽略其他因素的影響直接強制分散雲主機到不同計算節點可以直接使用默認的ServerGroupAntiAffinityFilter過濾器,如果想避免2種業務相同的雲主機落在一臺計算節點上還可以使用DifferentHostFilter過濾器指定不在某些實例所在的節點上創建實例,當然還可以藉助自定義過濾器進行更高級的過濾,例如機櫃感知等。當然也可以在雲主機發放以後,使用熱遷移的方式進行調度。

圖1 nova-scheduler的調度機制

    當VPC內雲主機數量足夠多,甚至很多私有云平臺實際上總共就只配置了一個VPC的時候,同一臺計算節點某一雲主機CPU和內存高負載使用是否會對該計算節點其他雲主機性能帶來影響,實際上這個問題也不侷限於VPC內。CPU和內存的超售複用必然會對雲主機性能帶來一定的影響,尤其是當一臺雲主機CPU和內存高負載使用的時候將嚴重影響同一宿主機其他雲主機的性能。那麼在不配置超售複用的情況下,CPU和內存的隔離優化需要怎麼實現,來保證業務穩定運行。默認情況下雲主機只能使用同一顆物理CPU內部的邏輯核。目前主流的Xeon處理器能提供14個甚至更多的Core,並藉助超線程技術可以提供28個邏輯核,主流雲廠商和公有云服務提供商都是以一個vCPU即一個超線程的形式提供計算服務。超線程技術可以提升物理機的處理性能,還能爲雲計算提供更多的vCPU數量,但是當超線程互相競爭時,物理核整體計算能力會嚴重下降。當租戶在申請一臺雲主機的時候,vCPU可能會落在不同的Core上,如圖2所示。此時由於一個Core有2個超線程,另一個超線程將被其他雲主機使用,也就是說2個雲主機可能同時使用同一個Core。那麼此時該租戶雲主機將會受到該計算節點其他雲主機負載水平影響,可以是VPC內其他雲主機也可以是其他租戶的雲主機。

圖2 雲主機的vCPU超線程分佈

    要解決這個問題,讓計算性能更穩定,可以使用vCPU綁定技術,讓同一臺雲主機的vCPU分配到同一個Core上,如圖3所示。利用綁定技術不但可以平均分配同一臺宿主機不同CPU的利用率,還可以爲重要業務的雲主機分配獨立的Core來隔離其他雲主機帶來的干擾。


圖3 vCPU綁定

    接下去就是內存的隔離性及優化,雲主機通過內存虛擬化來實現不同虛擬機之間的內存隔離。內存虛擬化技術在客戶機已有地址映射(虛擬地址和機器地址)的基礎上,引入一層新的地址——“物理地址”。在虛擬化場景下,客戶機OS將“虛擬地址”映射爲“物理地址”,Hypervisor負責將客戶機的“物理地址”映射成“機器地址”,再交由物理處理器來執行。很多雲服務商爲了節省內存成本,會使用一些內存複用技術,比如內存合併、內存氣泡等。內存複用在業務壓力大的時候會加重雲主機CPU消耗降低雲主機性能,所以內存複用需要根據不同的應用場景去使用,比如桌面雲場景下可以使用內存合併複用技術如圖4所示,因爲大量桌面雲主機的操作系統和軟件可能都是一樣的。業務峯谷值較大且變化時間比較固定的場景可以使用內存氣泡技術,動態回收雲主機暫時不用的物理內存,分配給需要複用內存的虛擬機。


圖4 Kerel SamePage Merging內存合併

綜上所述,在生產環境中遇到CPU壓力比較高的情況,CPU的綁定是一個有效的技術解決手段,但是內存複用技術建議慎用。且服務器內存相對比較便宜,建議增加宿主機的內存配置保證雲主機穩定運行。

2.3磁盤IO性能隔離

    雲主機後端存儲技術實現方式分爲兩種,一種是集中式存儲,一種是分佈式存儲。現在基於分佈式存儲架構的雲計算平臺已經成爲主流。磁盤IO作爲雲計算集羣瓶頸之一,雲主機磁盤IO高負載對其他雲主機的影響也不侷限於VPC內部。雲計算集羣的硬盤IO被集羣中所有云主機共享,而且這種共享在沒有被限制隔離的情況下,所有云主機都會爭搶這個資源,當集羣中一臺雲主機因爲計算機病毒或者業務因素磁盤IO飆高的時候,會造成其他雲主機IOWAIT跟着飆高,出現這種情況,對於IO比較敏感的業務是災難性的。對於這種情況,首先需要考慮配置SSD硬盤或高性能硬盤來創建高性能的存儲資源池供這些雲主機使用。除此以外,需要通過限制雲主機的磁盤IO速率來隔離和優化。

    Cinder是Openstack中必不可少的組建之一,作用於雲主機和存儲設備之間,管理後端存儲併爲用戶提供統一的存儲接口。Cinder可以添加磁盤IO讀寫的QoS,支持front-end端口和back-end端設置QoS, 其中 front-end 表示 hypervisor 端,也就是在宿主機上設置虛擬機的 QoS。back-end 端指在存儲設備上設置 QoS,該功能需要存儲設備的支持。創建好QoS策略以後就可以和數據捲進行綁定,實現磁盤IO限制的效果。如圖5所示:


圖5 Cinder磁盤IO QoS創建

    在業務上對於IO密集的雲主機,我們通常需要採用高性能的存儲集羣來滿足業務的需求,對於個別雲主機因爲非關鍵業務或者安全問題存在高磁盤IO的情況,可以使用磁盤IO限制的方式來處理。

2.4虛擬私有云內部網絡安全

     雲主機VPC之間本身就具備網絡隔離性,那麼當一個租戶上雲以後如何保證VPC內雲主機之間的網絡安全呢?很多用戶會在一個VPC內部署上百個雲主機,有數據庫、WEB等等各種類型的主機,還會包含各種不同的業務系統。當對外開放的雲主機因爲安全漏洞等因素被入侵以後便會對整個VPC帶來安全威脅。比如前不久永恆之藍勒索病毒就對很多雲租戶帶來嚴重的災難,甚至有的用戶感染主機數量多達上百臺。在傳統網絡內部ARP欺騙中間人攻擊、DHCP服務端欺騙等也是巨大的攻擊方式,在雲環境下也同樣值得探討。


圖6 VPC內安全組

    當一個租戶在VPC內部署了不同業務的雲主機,想在內部建立完善的訪問控制隔離機制目前最簡單高效的方式就是利用安全組的方式。可以利用安全組和安全策略模擬傳統網絡體系中的各個層次,建立多層訪問控制體系,按需對業務的雙向訪問及端口限制進行訪問控制,達到VPC內網絡整體安全,如圖6
所示。

    安全組可以有效的隔離內部雲主機實現業務單雙向訪問控制,但是不能做更高級的安全措施,例如:東西向入侵檢測、內部安全防禦等。業內有些雲計算廠商還推出了東西向安全服務模型,可以利用SDN控制器通過Openflow對接雲管平臺和網絡設備,實現雲主機之間流量轉發的引流,讓安全設備參與其中,提升東西向流量的安全性。

    不同的雲平臺有不一樣的架構,以Openstack爲例,存在着一個VPC內很多雲主機同一個廣播域的情況,當然根據不同的部門或者業務添加相應的子網進行廣播域隔離是非常好的習慣,但是如果在一個二層網絡中創建了大量雲主機實例,二層網絡中就需要考慮比較多的安全問題了,如DHCP Server Spoofing和ARP Spoofing等,在Openstack中默認情況下基於橋接接口iptables會對雲主機發出的DHCP報文進行DROP過濾,避免DHCP Server Spoofing發生。對於ARP欺騙,如果攻擊者控制了其中一臺雲主機,可以通過僞造IP地址或MAC地址發起一系列嗅探攻擊。Openstack在二層的安全隔離可以使用ebtables來實現, ebtables可以實現數據鏈路層數據包的過濾,數據截獲點比iptables更靠前。在Openstack中如果使用LinuxBridge環境,通過libvirt的nwfilter來設置一些ebtables的規則,給虛擬機增加了一道屏障。以確認通過的數據包中arp-ip-src、arp-mac-src、ip-src等與實際主機一致纔可以被允許,並且丟棄不匹配的數據包,來實現VPC內的二層安全,對於OVS環境則需要OVS版本支持匹配ARP數據包頭。實際上Openstack中的“prevent_arp_spoofing”配置項默認爲開啓狀態,本身就具備mac和arp防欺騙功能。

    對外發布的互聯網業務,需要做好漏洞修復和滲透防範等工作,VPC內的網絡安全風險也不容小覷,建立完善的內部審計系統,依靠安全組做好業務區域分離,做好後端數據保護是目前最簡單也最有效的網絡安全保護措施。

3結束語

    雲計算在各行各業得到了大規模的運用,得到了世界各國的廣泛重視,當前是一個信息化的時代。新的環境擁有新的挑戰,在企業上雲過程中,企業需重視信息安全,做好基於雲計算的網絡安全、系統安全和數據安全。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章