Authorization Manager (AzMan) ile Hyper-V ve Sanal Makine Güvenliği
Sanallaştırma teknolojisi kolaylık ve daha rahat yönetim imkânlarını bize sunmaktadır. Ancak bu kolaylık ve rahatlık eğer dikkatli planlanmaz ise sonuçları çok sıkıntı verici durumlar ortaya çıkarabilir. Sanallaştırma teknolojisi ile birlikte artık sanal sunucular dosyalardan ibaret olmaya başladılar. Sanal makineleri oluşturan dosyalar sanal makineyi oluşturan ilgili klasörün içerisinde bulunurlar. Bu dosyalar ile ilgili detaylı bilgiyi http://www.cozumpark.com/blogs/virtualization/archive/2010/05/15/sanal-makineler-ve-onlar-olu-turan-dosyalar-ve-g-revleri.aspx adresinde ki “Sanal makineler, onları oluşturan dosyalar ve görevleri” başlıklı makaleden edinebilirsiniz. Sanal makinelerimiz dosyalardan oluştuğundan kötü niyetli kişilere çok daha açık ve savunmasız bir duruma gelmiş oldular. Kısaca sanallaştırma sunucumuzu ya da sanal makinelerin dosyalarını ele geçiren kötü niyetli bir kişi tüm sanal makinelerimizi silebilir ya da kopyalayabilir. Bu makalemde sizlere AzMan konsolu sayesinde Hyper-V ve sanal makineler için detaylı kullanıcı yetkilendirmes sayesinde görev dağılımı yapılırken güvenliğin nasıl sağlanabileceğini anlatmaya çalışacağım.
Hyper-V sunucumuzun ve üzerinde çalışan sanal makinelerin güvenliğini arttırmak için Microsoft’ un önerilerinin bir kısmını aşağıda ki şekilde sıralayabiliriz;
- Hyper-V sunucunuzu Windows Server Core üzerinde yapılandırılmalıdır.
- Hyper-V sunucunuz üzerinde başka bir rol çalıştırmamalıdır.
- Windows Server sunucumuzun güvenlik güncelleştirmelerinin düzenli olarak uygulanmalıdır.
- Hyper-V sunucusu üzerinde en az iki fiziksel network kartı bulundurulmalı ve birisi Hyper-V sunucusunun yönetimi için atanırken diğer network kartı ya da kartları sanal makinelerin kullanımına ayrılmalıdır.
- Hyper-V sunucusu ilk yapılandırıldığında sanal makinelere ait ayar dosyalarını %programdata%\Microsoft\Windows\Hyper-V klasörü altında tutar. Sanal makineler ait *.vhd disk dosyalarını ise %users%\Public\Documents\Hyper-V\Virtual Hard Disks klasörünün altında tutar. Kurulumun ardından varsayılan klasörler hem Hyper-V sunucusunun performansını arttırmak hem de dosyaların güvenliğini sağlamak için sistem diski dışında ki başka bir disk alanına aktarılmalıdır. Bu disk alanında seçilen klasör üzerinde ki yetkilendirme aşağıda ki ekran görüntüsünde olduğu gibi yapılandırılmalıdır.
- Hyper-V sunucusunun sanal makineleri barındırdığı disk alanına BitLocker teknolojisi uygulanarak sanal makinelerin güvenliği arttırılmalıdır. Ancak BitLocker teknolojisi sanal makineler üzerinde ki işletim sistemlerinde desteklenmemektedir ve uygulanmamalıdır. Benzer şekilde sanal makinelerin dosyalarına EFS (Encrypting File System) teknolojisi uygulanmamalıdır. BitLocker sayesinde diskler sökülerek başka sistemlere takıldığında içeriğine ulaşılamayacaktır.
- Hyper-V sunucusu üzerinde anti-virüs programı çalıştırılacaksa sanal makinelerin bulunduğu klasör ve System32 klasörü altında bulunan vmms.exe ile vmwp.exe uygulamaları için ayrıcalık tanınmalı ve taranmamaları sağlanmalıdır.
- Hyper-V sunucusu üzerinde yapılandırılan sanal makinelerin kullanacakları işlemci oranı varsayılan ayarlar da sınırlanmaz. Eğer sanal makinelerin en fazla ne kadar işlemci kullanabileceği belirlenip sınırlanırsa bir sanal makinede oluşacak olan yüksek işlemci kullanım sorunu belirlenen limitlere takılacağından diğer sanal makinelerin ve Hyper-V sunucusunun çalışmasını etkilemeyecektir.
- Hyper-V sunucusu üzerinde ki audit log larının düzgün yapılandırılması ve dikkatli takip edilmesi sunucuya yetkisiz erişim denemelerinin tespitinde fayda sağlayacaktır.
- Sanal makineler üzerinde güncel anti-virüs uygulaması çalıştırılmalıdır. Ancak antivirüs uygulamasının %systemdrive%\Program Files\Hyper-V klasörü ve sanal makinelerimizin tutulduğu klasörlere bakmaması sağlanmalıdır.
Hyper-V sunucumuz üzerinde ki sanal makinelerin yönetimini ya da izlenmesini başka kullanıcılara devretmek isteyebiliriz. Bunun için o kullanıcıya yerel olarak ya da etki alanında bir hesap açıp ilgili hesabı Hyper-V sunucusunun local administrators grubuna üye yapmamız gerekecektir. Bu da o kullanıcılara Hyper-V sunucusu üzerinde verilebilecek en üst yetki olacaktır. Ancak bu berberinde yetkilendirilen kullanıcıların kötü niyetli olması durumunda ya da bilgi yetersizliği sebebiyle ortaya çıkabilecek durumlarda riskleri de berberinde getirecektir. Bunun önlemek için kullanılabilecek yöntemlerden birisi Authorization Manager (AzMan) konsolunu kullanarak Hyper-V sunucusu üzerinde kullanıcılara local admin yetkisi vermeden rol bazlı kullanıcı yetkilendirmesinin yapılması ya da System Center Virtual Machine Manager 2008 R2 uygulaması ile web tabanlı sanal makine yönetiminin sağlanması olarak gösterebiliriz. Aralarında ki fark ise AzMan konsolunda kullanıcılar Hyper-V sunucusu üzerinde oturum açarak ya da kullandıkları Windows7 Client üzerinde etkinleştirdikleri Hyper-V Manager konsolunu kullanmak zorunda iken System Center Virtual Machine Manager da kullanılan web servisi sayesinde kullanıcılar yetkileri çerçevesinde sanal makineleri Hyper-V sunucusu üzerinde oturum açmadan yönetebilmektedirler.
AzMan konsolunu açmak için Start–> Search programs and files bölümünde azman.msc yazıp Enter a basalım. Karşımıza boş AzMan konsolu çıkacaktır.
Konsolu ilk çalıştırdığımızda herhangi bir Authorization Store seçilmediği için “No Authorization Stores Selected” uyarısını almaktayız. Burada ki store ise AzMan ile rol bazlı kullanıcılar, yetkiler ve erişim hakları üzerinde kısıtlama yapabilmemiz için kullanacağımız ve ilgili policy leri içeren xml dosyasından oluşan basit bir veritabanı olarak düşünebiliriz.
Hyper-V sunucumuz için ilgili policy leri içeren InitialStore.xml dosyası varsayılan olarak C:\ProgramData\Microsoft\Windows\Hyper-V\InitialStore.xml yolunda bulunmaktadır. ProgramData klasörü normalde gizlidir. Bu nedenle yukarıda ki yolu direk olarak konsolda Action–> Open Authorazition Store linkine tıkladıktan sonra karşımıza gelen pencereye yazıp OK e tıklamamız Hyper-V ile ilgili datastore u yüklemek için yeterli olacaktır. Hyper-V Datastore u yüklediğimizde AzMan konsolumuzun ekran görüntüsü aşağıda ki gibi olacaktır.
NOT: Eğer Hyper-V sunucumuz System Center Virtual Machine Manager tarafından yönetiliyorsa AzMan konsolu kullanılamaz. Bunun sebebi Virtual Machine Manager uygulamasının AzMan ın kullandığı InitialStore.xml dosyasının kontrolünü üzerine alıyor olmasıdır.
NOT: InitialStore.xml dosyasının AzMan konsolu vasıtasıyla düzenlenme işlemine başlamadan önce yedeklenmesi önerilir.
AzMan kullanılarak yapılacak yetkilendirme işlemlerini anlatmadan önce konsol açıldığında karşımıza gelen bölümlerden bahsetmek isterim;
- Hyper-V Services: Bu bölüme Scope adı verilir ve Hyper-V sunucusu üzerinde tanımlanmak istenen herbir rolü tanımlamada ve sınırlarını belirlemede kullanılır. InitialStore.xml ilk eklendiğinde varsayılan olarak oluşturulur ancak dilenirse sağ tıklanıp New Scope seçeneği kullanılarak yeni scope lar oluşturularak buna bağlı roller tanımlanıp yetkilendirme detaylandırılabilir. Her yeni scope ile birlikte Groups, Definitions ve Role Assignments oluşturulur. Scope ları Hyper-V sunucumuz üzerinde farklı departmanlara ait sanal makinler var ise ve biz bunların yönetimini departman bazında yaptırmak istiyorsak scope kullanabiliriz. Scope ları Active Directory de ki Organizational Units gibi de düşünebiliriz.
- Groups:Bu bölümde kullanabileceğimiz üç tip uygulama grubu bulunur. Bunlar;
- Basic Application Group: Bu grup ile Active Directory kullanıcı ve gruplarını ekleyebiliriz.
- LDAP Query Application Group: Bu grup ile istersek belirli bir kullanıcı, organizational unit ya da belirlediğimiz bir kullanıcı dışında ki kullanıcıları ekleyebiliriz. Ancak bunun için ilgili Application Group u oluşturduktan sonra LDAP sorgusu yazılmalıdır.
- Business Rule Application Group: Bu grup LDAP Query Application Group un biraz daha gelişmişidir ve VBScript ya da Jscript kullanarak daha detaylı LDAP sorguları yapılabilmektedir. Ancak bu seçenek AzMan v1.0 için devre dışıdır. Eğer InitialStore.xml seçili iken Actionà Properties yolunu takip ederek karşımıza çıkan ekran da ki General sekmesinde bulunan Upgrade Schema Version butonuna tıklayarak şema versiyonunu yükseltildiğinde bu seçenek de aktif hale gelecektir.
- Definitions:Bu bölümde rol ve görevler tanımlanabilir.
- Role Definitions: Bu bölümde Role Assignments bölümünde oluşturulan rollere üye olan kullanıcı ya da grupların sanal makineler üzerinde Operation olarak tanımlanan seçeneklerden hangilerini kullanma izni olacağını belirleyebiliriz.
- Task Definitions: Operations kısmında tanımlanmış olan işlemleri gruplamak için kullanıyoruz. Örneğin Sanal Makine Başlatma ya da View Virtual Machines gibi task lar oluşturup bunlara ilgili operations ları ekleyebiliriz. Böylece her seferinde her bir operations ı tek tek eklemek yerine ilgili olan operations ları içeren task i eklemek çok daha kolay olacaktır.
- Role Assignments: Varsayılan olarak etki alanında ki Administrators grubu Administrator rolünün üyesidir ve sanal makineler üzerinde Operation olarak tanımlanan tüm işlemleri yapabilecek şekilde yetkilendirilmiştir. Administrator rolü kopyalanarak yeni roller ve bu rollere üye olan kullanıcı ya da grupların, sanal makineler üzerinde hangi işlemleri yapabileceklerini belirlenebilir.
NOT: Operations, Hyper-V sunucusu üzerinde ki sanal makineleri yönetmek için önceden tanımlanmış kurallar olarak düşünülebilir. Bu kuralların sayısı Windows Server 2008 with Hyper-V de 33 olup Windows Server 2008 R2 ile birlikte eklenen Allow Virtual Machine Snapshot kuralı ile birlikte bu sayı 34 e çıkmıştır. Bu operasyonların düzenlenmeleri ya da bunlara yenilerinin eklenmesi mümkün değildir.
Yukarıda bahsettiğimiz operasyonların ve görevlerinin neler olduğuna aşağıda ki tabloların yardımıyla detaylı olarak bakabiliriz;
NOT: Yukarıda ki ayarların AzMan konsolu üzerinden ilgili Task içerisine eklenmesi bazen anında etkisini göstersede bazı düzenlemeler kullanıcının Hyper-V Manager konsolunu kapatıp tekrar açmasını gerektirebilir.
Öncelikle yetkilendirmenin hangi roller oluşturularak yapılacağı belirlenmelidir. Örneğin bazı kullanıcıların bulunduğu grup sadece sanal makineleri monitor edebilirken başka bir grupta sanal network u yonetebilir. Ya da belli sanal makinelerin belli gruplar tarafından görüntülenmesini ve yönetilebilmesi için Active Directory üzerinde oluşturulacak olan gruplar kullanılabilir. Böylece yetkilendirmek istenen kullanıcının ilgili gruba dahil edilmesi yeterli olacaktır.
Ayrıca farklı sanal makinelerin farklı gruba üye olan kullanıcılar tarafından görüntülenmesi de sağlanabilir. Bu durumda örneğin sadece yazılım geliştirme grubunda ki kullanıcılar Hyper-V Manager konsolunda kendi sanal makinelerini görüp yönetebilecektir.
Active Directory üzerinde SG_VMMonitor, SG_ServiceAccess ve SG_Developers olan gruplar oluşturalım ve bu gruplara belirlenen görevleri yerine getirecek olan kullanıcıları ekleyelim. Ardından ilgili grupların yapacakları işe göre yeni rolleri oluşturulmalıdır. Bu işlemler herbir grup için ayrı olarak ele alınmalıdır. Varsayılan olarak Administrator rolü hazır gelmektedir.
NOT: Eğer yetkilendirilecek kullanıcı Hyper-V Manager konsolunu kendi Windows 7 makinesi üzerinden kullanacak ise (ki uygun olanı budur) HVRemote ile gerekli yetkilendirmenin yapılması gerekmektedir. HVRemote sunucu üzerinde çalıştırıldığında kullanıcıyı ilgili yerlere ekleyerek yetkilendirmektedir. Ancak kullanıcı AzMAN içerisinde ki Role Assignments bölümünde direk olarak Administrator bölümüne dahil edilmektedir. Aşağıda ki işlemlere devam edilmeden önce kullanıcı bu gruptan silinmelidir. HVRemote ile Hyper-V sunucusunu uzaktan yönetime açabilmek için https://www.mhakancan.com/hvremote-kullanarak-hyper-v-sunucusunu-uzaktan-yonetime-acilmasi/ adresinde ki makaleyi okuyabilirsiniz.
NOT: HVRemote uygulamasını kullanırken komut aşağıda ki şekilde çalıştırıldığında
cscript hvremote.wsf /mode:server /add:Domain\Kullaniciadı /noazman
AzMan konsoluna kullanıcı için herhangi bir ekleme yapılmayacaktır.
VMMonitor Grubu
Sanal makineleri sadece izleyebilecek bir rol oluşturmak için AzMan konsolunda Role Definations bölümüne sağ tıkladıktan sonra açılan menüde New Role Definition linkine tıklayalım. Karşımıza çıkan pencerede Name bölümüne “VMMonitor” yazalım. Description bölümüne rolümüzün kapsamını anlatan açıklamamızı yazmayı ihmal etmeyelim. Ekran görüntüsü aşağıda ki gibi olacaktır.
Ekran görüntüsünde “The tasks and lower-level roles that define this role” bölümü boş durumdadır. Burada Add butonuna tıklayarak izin verilen operasyonları içeren görev ekleyebileceğimiz gibi belirlediğimiz operasyonları tek tek seçerek de lower-level role leri ekleyebiliriz. Ekran görüntüsü aşağıda ki gibi olacaktır.
Bu rol için listeden aşağıda ki özellikleri seçmeliyiz. Ancak operasyonları tek tek eklemektense bunları tasks (görevler) altında topladıktan sonra burada seçmek çok daha kullanışlı olacaktır. Eğer bu rolde ki kullanıcıların Virtual Network ayarlarını görmeleri istenmiyorsa ilgili seçenekler dışarıda bırakılabilir.
- Allow Output from Virtual Machine
- View Virtual Machine Configuration
- Read Service Configuration
- View Switches
- View Switch Ports
- View External Ethernet Ports
- View Internal Ethernet Ports
- View LAN Endpoints
- View VLAN Settings
- View Virtual Switch Management Service
Bu nedenle OK diyerek her iki pencereyi de Role Definition işlemini tamamlamış oluyoruz. Şimdi Task Definitions bölümüne sağ tıkladıktan sonra açılan menüde New Task Definition linkini tıklayalım. Karşımıza gelen pencerede Name bölümüne “VMMonitor_Task” yazalım. Description bölümüne rolümüzün kapsamını anlatan açıklama yazabiliriz. Ekran görüntüsü aşağıda ki gibidir.
Eğer “The tasks and lower-level roles that define this task” bölümünde Add diyerek bu göreve ilgili operasyonları eklemek istersek bize aşağıda ki ekran görüntüsü ile uyarı verecektir. Bunun sebebi henüz ilgili Task i kayıt etmememiş olmamızdan kaynaklanmaktadır.
Ok diyerek bu uyarıyı geçtikten sonra karşımıza gelen ekranda Operations sekmesine geçelim. Burada yukarda ki listede bulunan operasyon isimlerini seçelim ve Ok diyerek pencereyi kapatalım. Ekran görüntüsü aşağıda ki gibi olacaktır.
Bu ekranda da Ok diyerek kapatarak “VMMonitor_Task” isimli görevimizi oluşturmayı tamamlamış oluyoruz.
“VMMonitor” isimli görevi oluşturduğumuza göre artık bu görevi “Sanal Makine İzle” rolüne atamalıyız. Bunun için Role Definitions altında ki Sanal Makine İzle rolünü çift tıklayarak açalım ve Definition sekmesine geçerek Add… butonuna tıklayalım. Karşımıza gelen Add Definition penceresinde Tasks sekmesine geçip az önce oluşturmuş olduğumuz “VMMonitor” isimli görevi seçelim ve OK diyerek pencereyi kapatalım.
Rolümüzün görevini de hazırladığımıza göre artık bu rolü hangi kullanıcı ya da grupların kullanacağını belirlemeliyiz. Bunun için Role Assignments bölümüne gelip sağ tıklayalım ve açılan menüde “New Role Assignment…” linkine tıklayalım. Karşımıza gelen Add Role penceresinde “VMMonitor” isimli görevi seçelim ve OK diyerek pencereyi kapatalım.
Burada “VMMonitor” seçeneğini seçelim ve OK e tıklayalım. Böylece ilgili rolü Role Assignments a eklemiş olduk. Şimdi bu rolü kullanacak olan kullanıcı veya grupları bu bölüme eklememiz gerekiyor.
Role Assignments bölümünde bulunan “VMMonitor” isimli rolümüze sağ tıklayalım ve açılan menüden “Assign Users and Groups” bölümüne gelelim. Yana açılan menüden “From Windows and Active Directory…” seçeneğine tıklayalım. Karşımıza kullanıcı ekleyebileceğimiz “Select Users, Computers or Groups” ekranı gelecektir. Burada etki alanında bu rolü kullanması için oluşturmuş olduğumuz SG_VMMonitor isimli gurubumuzun adını yazıp OK diyerek ekranı kapatalım. İşlemimiz tamamlandığında ekran görüntüsü aşağıda ki gibi olacaktır.
Yukarıda ki işlemleri tamamladıktan sonra SG_SVMMonitor grubuna üye olan kullanıcılar Hyper-V sunucusu üzerinde oturum açıp yetkileri çerçevesinde Hyper-V Manager konsolu üzerinde işlemler gerçekleştirebilirler. Yetkileri dışında bir işlem yapmak istediklerinde ise (Örneğin sanal makineyi kapatmak) ilgili işlem için yetkilerinin bulunmadığına dair hata ekranı ile karşılaşacaklardır. Ekran görüntüsü aşağıda ki gibidir.
SG_VMMonitor grubuna üye olan bir kullanıcı ister Hyper-V sunucusu üzerinde oturum açsın ister kendi bilgisayarından Hyper-V Manager konsolunu kullanarak bağlansın yetkisi dışında bir işlem yapmak istediğinde (Örneğin Win7Temp isimli sanal makineyi kapatmak istediğinde) yetkisi olmadığını belirten aşağıda ki hata ekranı ile karşılaşacaktır.
NOT: VMMonitor rolü gibi farklı roller oluşturlarak yönetim farklı kullanıcılar ya da gruplar arasında paylaştırılabilir. Örneğin VirtualNetworkManager ya da VMAdmins gibi.
Scope Kavramı
Peki belli kullanıcıların sadece belli sanal makineleri görüp yönetebilmesini isteseydik ne yapabilirdik? Bu seçenek sayesinde ilgili kullanıcı ya da gruplar sadece yetkilerinin olduğu ve görmeleri gereken sanal makineleri görebileceklerdir. Örneğin yazılım geliştirme bölümünde çalışan kullanıcıların Hyper-V Manager konsolunda sadece kendi sanal makinelerini görüp yönebilmeleri için gerekli olan yapıyı New Scope özelliğini kullanarak gerçekleştirebili
Hyper-V Admini Developers1 isimli bir sanal makine oluşturmuş olsun. Normal şartlarda Hyper-V Manager görüntüleme yetkisi olan yazılım grubu Hyper-V Manager konsolunda aşağıda ki görüntü ile karşılaşacaklardır.
Bunun önüne geçmek ve developer grubunun sadece kendi sanal makinelerini yönetebilmesini sağlamak için Authorization Manager üzerinde bulunan New Scope özelliğinden faydalanacağız. AzMan konsolunda Hyper-V Services bölümüne sağ tıklayarak New Scope seçeneğini seçelim. Karşımıza yeni oluşturulacak scope için isim belirleyeceğimiz ekran gelecektir. Bu bölümde mantıklı bir isimlendirme yaparak (Örneğin Developers_Scope) yeni Scope u oluşturalım.
Yeni oluşturulan scope altında Role Assignments bölümü boş gelecektir. Bu bölüme Root Scope da ki Role Assignments bölümünde bulunan Administrator rolünü ekleyelim. Ardından bu Administrator rol atamasına Active Directory üzerinde oluşturduğumuz SG_Developers grubunu ekleyelim. Bu rolün eklenmesiyle SG_Developers grubunda olan kullanıcılar sadece Developers_Scope dahilinde olan sanal makineler üzerinde kapatıp açma, snapshot alabilme gibi yetkilere sahip olacaklardır. İlgili eklemeyi yapmamızın ardından konsol aşağıda ki gibi gözükecektir.
Bu Scope a dahil olan kullanıcıların sadece kendi sanal makinelerini görebilmeleri için Root Scope üzerinde “ServiceAccess” isimli bir Role Definition oluşturalım ve kullanıcıların VMMS (Virtual Machine Management Service) servisini kullanabilmesi için “Read Service Configuration” ile “Reconfigure Service” operasyonlarını ekleyelim.
Ardından oluşturduğumuz bu role Active Directory üzerinde hazırladığımız SG_ServiceAccess grubunu ekleyelim. Yetkilendirmenin tamamlanmasının ardından Developers1 isimli sanal makineyi Developers_Scope içerisine taşıma işlemine geçmeliyiz. Bu işlemi grafik arabirimden yapamıyoruz. Bu nedenle http://blogs.technet.com/cfs-file.ashx/__key/communityserver-components-postattachments/00-03-08-23-57/BackupVMsAndScopeScripts.zip adresinden işlem için gerekli olan SetScope.vbs isimli script i indirelim. Dosyayı uygun bir yere açıp komut satırı ile bu klasörün içerisine geldikten sonra aşağıda ki komutu çalıştıralım.
Komutun çalıştırılmasının ardından gerekli işlemler yapılarak ve karmaşık ekran çıktılarının ardından aynı komut satırında aşağıda komutu çalıştırdığımızda çıkan sonuç bize işlemin başarılı bir şekilde tamamlandığını gösterecektir.
İşlemlerin tamamlanmasının ardından Developers grubunun bir üyesi kendi makinesi üzerinde çalıştırdığı Hyper-V Manager konsolunda aşağıda ki ekran görüntüsü ile karşılaşacaktır.
Bu makalemde sizlere AzMan konsolu sayesinde Hyper-V ve sanal makineler için detaylı kullanıcı yetkilendirmesi sayesinde görev dağılımı yapılırken güvenliğin nasıl sağlanabileceğini anlatmaya çalıştım.
Faydalı olması dileğimle…
M. Hakan CAN