Windows Server 2012的AD虛擬化安全
各位讀者朋友,有多少人嘗試過(guò)對(duì)Active Directory(簡(jiǎn)稱AD)進(jìn)行虛擬化?如果答案是肯定的,你又是否了解或閱讀過(guò)微軟公司針對(duì)AD虛擬化所提供的指南、清楚哪些事情該做而哪些不該做?這就是我們本文要討論的內(nèi)容。根據(jù)微軟的客戶服務(wù)及支持說(shuō)明,AD是整個(gè)Windows Server中引發(fā)求助請(qǐng)求最多的項(xiàng)目,而AD虛擬化又是AD當(dāng)中最令人頭痛的話題(至少是之一)。
看看,大家的懶惰引發(fā)多少麻煩。好消息是Windows Server 2012已經(jīng)對(duì)AD進(jìn)行了改進(jìn),這就讓使我們?cè)谕祽械耐瑫r(shí)保證公司的業(yè)務(wù)體系更加安全。
除非大家把時(shí)間都花在喝茶扯淡上了,否則作為一位IT人,我們都應(yīng)該會(huì)注意到虛擬化技術(shù)逐步覆蓋數(shù)據(jù)中心的逼人氣勢(shì)。歷史最悠久——因此也最發(fā)達(dá)——的虛擬化領(lǐng)域正在于服務(wù)器層面。另外,由于虛擬化是云計(jì)算的基本構(gòu)成要素之一,它的普及自然也受到云崛起的積極影響。
如果大家本身就是AD管理員,那么這一趨勢(shì)就意味著虛擬化團(tuán)隊(duì)正嘗試把我們手中的AD域控制器(簡(jiǎn)稱DC)也拉進(jìn)虛擬領(lǐng)域。AD管理員從本質(zhì)上說(shuō)屬于對(duì)風(fēng)險(xiǎn)非常敏感且時(shí)刻準(zhǔn)備回避的人群(如果我們能面對(duì)面交流,我會(huì)詳細(xì)講解自己——當(dāng)然不光是我一個(gè)人——如何在防御層的眼皮底下管理三萬(wàn)個(gè)英特爾用戶賬戶的更新工作),所以我們對(duì)虛擬化介入的***反應(yīng)很可能是拒絕的——你不能讓我用我就用。然而搞虛擬化的家伙卻非常頑固,他們不接受簡(jiǎn)單的拒絕,而是希望了解哪些因素阻礙了將整個(gè)AD體系納入虛擬機(jī)的步伐。在英特爾的工作經(jīng)歷中,我成功捍衛(wèi)了自己的觀點(diǎn)。那時(shí)候我興趣出了兩個(gè)至關(guān)重要的理由,其中一個(gè)直到今天仍然適用,而另一個(gè)則已經(jīng)被時(shí)間所化解。
對(duì)AD虛擬化持謹(jǐn)慎態(tài)度的原因
安全性是首要原因。當(dāng)我回絕虛擬化團(tuán)隊(duì)的建議時(shí),提出了兩點(diǎn)安全性方面的關(guān)注重點(diǎn):客戶虛擬機(jī)隔離與主機(jī)管理。我們之所以關(guān)注客戶機(jī)之間的安全問(wèn)題,是因?yàn)槲覀儾⒉煌耆嘈盘摂M機(jī)之間無(wú)法互相訪問(wèn)及滲透的說(shuō)法。不過(guò)隨著服務(wù)器虛擬化技術(shù)的日益成熟,這個(gè)問(wèn)題如今已經(jīng)不再是問(wèn)題。但第二點(diǎn)理由——關(guān)注與主機(jī)管理相關(guān)的操作安全——目前仍然存在,而且將在可以預(yù)見(jiàn)的未來(lái)始終扮演不容忽視的重要角色。
主機(jī)管理的操作安全如今用更平實(shí)些的話來(lái)解釋,是指我們的虛擬化主機(jī)服務(wù)器管理員不一定了解與虛擬化AD域控制器有關(guān)的注意事項(xiàng)與維護(hù)方法。在所有現(xiàn)存的Windows Server版本當(dāng)中,服務(wù)器主機(jī)或虛擬化管理員都可以輕松搞砸我們所安裝的AD——具體方式包括使用基于鏡像的恢復(fù)、快照回滾或者虛擬域控制器副本等虛擬產(chǎn)品基礎(chǔ)功能。
Windows Server 2008 R2及更早版本分布式特性使其無(wú)法理解并接納虛擬化產(chǎn)品給虛擬域控制器帶來(lái)的狀態(tài)變更,因?yàn)檫@些在物理域控制器當(dāng)中是不可能存在的。正是由于缺乏理解,其設(shè)計(jì)思路也就沒(méi)有把這些變更作為考慮事項(xiàng)。分布式系統(tǒng)的邏輯架構(gòu)可能喪失完整性(尤其是在USN回滾方面),而且一般說(shuō)來(lái)AD數(shù)據(jù)完整性問(wèn)題既難于檢測(cè)、也不易恢復(fù)。微軟公司曾經(jīng)發(fā)布過(guò)一篇題為《在Hyper-V中運(yùn)行域控制器》的綜合性文章,詳細(xì)討論了虛擬化域控制器的管理話題——其中還對(duì)USN回滾以專門(mén)章節(jié)加以闡述。
Server 2012如何保障AD虛擬化安全
讓AD在虛擬環(huán)境中獲得可靠的安全性是AD團(tuán)隊(duì)追求的首要目標(biāo),而他們?cè)赟erver 2012中也用實(shí)際表現(xiàn)回應(yīng)了我們的呼聲。他們提高的不僅僅是安全全,而且讓AD有能力享受由虛擬化功能帶來(lái)的一切優(yōu)勢(shì)。從概念上講,整個(gè)實(shí)現(xiàn)方式其實(shí)并不復(fù)雜。首先,我們需要明確回滾操作的發(fā)生時(shí)間;其次,域控制器必須既保持完整性又能夠正常實(shí)現(xiàn)功能。
為了實(shí)現(xiàn)***項(xiàng)要求,執(zhí)行變更的層(也就是管理程序)需要標(biāo)記回滾的發(fā)生時(shí)間,并通過(guò)虛擬化堆棧將其作為通信內(nèi)容。應(yīng)用程序隨之進(jìn)行接收。這個(gè)過(guò)程顯然需要開(kāi)發(fā)人員對(duì)管理程序、OS以及AD應(yīng)用程序的設(shè)計(jì)做出改變。這種標(biāo)記機(jī)制被稱為VM-GenerationID。
這套VM-GenerationID(或簡(jiǎn)稱為VM Gen ID)是一個(gè)128位的值,其中包含著當(dāng)前虛擬機(jī)的狀態(tài),由管理程序保有。當(dāng)虛擬機(jī)隨時(shí)間推移而不斷發(fā)生變化,VM Gen ID卻始終保持初始狀態(tài)。一旦虛擬機(jī)發(fā)生回滾——無(wú)論是基于鏡像還是快照——該ID才會(huì)有所變動(dòng)。這個(gè)ID映射虛擬機(jī)內(nèi)存中的某個(gè)地址,因此隨時(shí)可被虛擬中運(yùn)行著的應(yīng)用程序所調(diào)用。那么域控制器怎么會(huì)知道自己的VM Gen ID有沒(méi)有發(fā)生改變呢?當(dāng)Server 2012域控制器進(jìn)行初始化(或更新)時(shí),它會(huì)在安裝時(shí)把VM Gen ID標(biāo)記的值保存在AD副本中域控制器計(jì)算目標(biāo)的msDS-GenerationID屬性當(dāng)中。這樣當(dāng)域控制器重新啟動(dòng)或處理事務(wù)(例如屬性更新)時(shí),它就會(huì)將內(nèi)存中的現(xiàn)有VM Gen ID值與保存在AD中的值進(jìn)行比較。倘若二者不同,則意味著虛擬機(jī)已經(jīng)進(jìn)行過(guò)回滾,而域控制器必須采取相應(yīng)步驟以保持其完整性。VM Gen ID獨(dú)立于管理程序之外,而且已經(jīng)有一些管理程序供應(yīng)商(例如VMware)開(kāi)始將這項(xiàng)功能集成到自家產(chǎn)品當(dāng)中。
一旦檢測(cè)到虛擬機(jī)回滾現(xiàn)象,域控制器會(huì)執(zhí)行兩項(xiàng)操作以防止USN回滾:首先,重置AD數(shù)據(jù)庫(kù)的invocationID并清空其本地相關(guān)標(biāo)記(簡(jiǎn)稱RID)池。如果標(biāo)準(zhǔn)恢復(fù)流程與域控制器有所沖突,那么同時(shí)觸發(fā)invocationID(即本地?cái)?shù)據(jù)庫(kù)的版本號(hào))重置以排除其它機(jī)制,這就確保了域控制器始終擁有與其它域控制器一致的更新內(nèi)容(包括它自己創(chuàng)建的新內(nèi)容),最終免受回滾操作所影響。RID池是指利用RID主控機(jī)制整理的與域控制器相關(guān)的數(shù)百個(gè)RID(域惟一SID的一部分),旨在針對(duì)域控制器所創(chuàng)建的新安全原則生成SID。清空RID池與重新整理RID主控對(duì)象確保了域中不存在重復(fù)的SID。請(qǐng)注意,上述流程并不會(huì)危及我們的定期備份機(jī)制。
從技術(shù)角度講AD是能夠?qū)崿F(xiàn)全面虛擬化的,但截至本文發(fā)稿時(shí),微軟的AD團(tuán)隊(duì)還沒(méi)有最終決定以官方形式公布這一結(jié)論。但大家是否愿意對(duì)AD進(jìn)行全面虛擬化?在做出決策之前,大家***從宏觀角度審視這一問(wèn)題?,F(xiàn)代化數(shù)據(jù)中心已經(jīng)(或者必然將要)在AD服務(wù)與不可靠的硬件之間搭建起一個(gè)又一個(gè)抽象層。大家一定還記得“把雞蛋放進(jìn)一個(gè)籃子”原則:審視服務(wù)之下的每個(gè)層,解決各個(gè)層在模擬故障時(shí)帶來(lái)的技術(shù)問(wèn)題、弄清楚意外情況對(duì)服務(wù)造成的影響,并以此為依據(jù)制定服務(wù)配置方案。
舉例來(lái)說(shuō),大家應(yīng)該考慮在基礎(chǔ)設(shè)施中的某些關(guān)鍵部位采用多套虛擬化方案,這樣一旦某套方案發(fā)生故障(例如VMware ESXi內(nèi)核驅(qū)動(dòng)程序損壞或者Hyper-V主分區(qū)崩潰等),對(duì)于整體服務(wù)而言都不屬于單點(diǎn)失效。在虛擬機(jī)方面也是如此,盡量使用多臺(tái)不同的主機(jī)及不同類型的虛擬化產(chǎn)品,并把它們保存在同一套SAN當(dāng)中。如果解決某種問(wèn)題的惟一途徑是采用一些物理域控制器,那也不必猶豫,放手大干吧。即使虛擬化團(tuán)隊(duì)表示反對(duì),聲稱(可能屬于他們的次級(jí)管理范疇)物理設(shè)備的存在有可能提高基礎(chǔ)設(shè)施的運(yùn)營(yíng)成本,但相對(duì)于突然某一天公司上上下下無(wú)法登錄賬戶的巨大風(fēng)險(xiǎn),這點(diǎn)支出還是非常值得的。
Server 2012的Active Directory域服務(wù)(簡(jiǎn)稱AD DS)讓我們少了些焦慮心、多了份安全感。但是對(duì)于任何一種新功能,我們都需要結(jié)合基礎(chǔ)設(shè)施實(shí)際情況加以權(quán)衡,最終決定如何使其發(fā)揮***效果、實(shí)現(xiàn)***價(jià)值。