Windows Server 2012 R2 ile Group Managed Service Accounts (gMSA) – Bölüm 2
İki bölümden oluşan makale serimizin ikinci bölümüne devam ediyoruz. İlk bölümde Windows Server 2012 R2 bakış açısı ile Active Directory Domain Servislerinde “Grup Seviyesinde Yönetilen Servis Hesapları (Group Managed Service Accounts (gMSA) ) konusunu mimarisi, uygulama alanları, altyapı gereksinimleri gibi detaylarını inceledik.Makale serimizin bu bölümünde de Windows Server 2012 R2 ile Group Managed Service Account (gMSA) oluşturma aşamalarını detaylarıyla, uygulamalı olarak inceliyoruz.
Makalemin ilk bölümüne aşağıdaki link üzerinden ulaşabilirsiniz
Group Managed Service Accounts – gMSA Oluşturma Adımları:
gMSA Yönetilen Servis Hesaplarının uygulama aşamalarını makalemizin birinci bölümünde şu şekilde tanımlamıştık:
Active Directory domain içerisinde KDS Root Key oluşturulması
o Bu işlem her domain için sadece bir defa yapılır.
gMSA hesabı Oluşturulması ve Yapılandırılması
gMSA hesabının Kullanıcılak Sunucular Üzerinde Yapılandırılması
Şimdi bu adımları detaylı olarak sırayla uygulayalım.
1. Active Directory Domain İçerisinde KDS Root Key Oluşturulması
Windows Server 2012 R2 işletim sisteminde çalışan domain controller sunucumuzda PowerShell komut satırı aracını çalıştırdıktan sonra Add-KDSRootKey –EffectiveImmediately komutunu aşağıdaki şekilde uyguluyoruz.

Komut çalıştırılmasından sonra oluşan root key’in domain içerisindeki diğer domain controller sunuculara replikasyon yapılması için 10 saate kadar beklemeniz gerekecektir. 10 saatlik süre özellikle çoklu site yapılarında çalışan active directory topolojilerinde replikasyonun tamamlanmasını garantileyen bir süre tanımıdır. Bu süreci hızlandırmak ve 10 saatlik beklemeyi ortadan kaldırmak için özellikle test ortamları için Add-KDSRootKey komutunu aşağıdaki şekilde bir ince ayarla kullanabiliriz.
Add-KdsRootKey –EffectiveTime ((get-date).addhours(-10))
2. Active Directory İçerisinde Security Group Oluşturulması
Bu adım bir best-practice önerisidir. gMSA hesabınının kullanılacağı sistemleri ya da bilgisayarları bu gruba üye yaparak dinamik bir yönetim mekanizması oluşturulabilir. Bu adım zorunlu olmamakla beraber özellikle öneriyorum. Bu adım gerçekleştirilmezse servis hesabı oluşturma aşamasında servis hesabının kullanılacağı sistemlerin tanımlanması gerekecektir.
Not : Servis hesabının kullanıldığı sunucular üzerinde grup üyeliğinin etkinleşmesi için sunucuların yeniden başlatılması gerekecektir. Gruptan çıkarıldıklarında da yine etkinleştirme için sunucuların yeniden başlatılması gerekecektir.

Biz uygulamamızda servis hesapları için yukarıdaki şekilde görüldüğü gibi ServisHesaplari adında Global-Security grup oluşturup ilgili sunucuları da bu gruba üye yapıyoruz.

3. gMSA Hesabın Oluşturulması
gMSA hesabınının oluşturulması için Windows Server 2012 R2 domain controller sunucu üzerinde PowerShell komut satırına geçiyoruz. Ve aşağıda görüldüğü gibi New-ADServiceAccount komutunu ilgili parametreleri ile çalıştırıyoruz.
Öncelikle active directory powershell modülünü yüklüyoruz:
Import-Module ActiveDirectory

Not: PowerShell 3.0 ve üzeri versiyonlarda Active Directory modülünü Import-Module ile yüklemeye gerek kalmadan doğrudan New-ADServiceAccount komutu kullanılabilir. Bu işlemle active directory modülü otomatik olarak memory’ye yüklenecektir.
Daha sonra New-ADServiceAccount komutu ve parametrelerini tanımlıyoruz:
New-ADServiceAccount –name <ServiceAccountName> –DNSHostName <fqdn> –PrincipalsAllowedToRetrieveManagedPassword <group> –ServicePrincipalNames <SPN1,SPN2,…>
Name : gMSA servis hesap adı, bir başka ifade ile samAccountName tanımı.
DNSHostName : gMSA servis hesabının tam DNS host tanımı.
PrincipalsAllowedToRetrieveManagedPassword : gMSA servis hesabını kullanacak bilgisayar hesaplarının üye yapıldığı active directory grup tanımı.
ServicePrincipalNames : gMSA servis hesabının SPN tanımı/tanımları.
Biz buradaki uygulamada Windows Task Schedular uygulamasında zamanlanmış görevlerde kullanmak amaçlı TaskRunMSA adında bir adet servis hesabı oluşturacağız:
TaskRunMSA
New-ADServiceAccount -Name TaskRunMSA -DNSHostName MSTDC01.mesutaladag.local -PrincipalsAllowedToRetrieveManagedPassword “ServisHesaplari”

NOT : Bu aşamada “Key Does Not Exist” hatası alırsanız bunun nedeni birinci adımın atlanması yani Root Key oluşturulmamasındandır.
Bu adımdan sonrasında active directory içerisinde Managed Service Accounts kabı içerisinde ilgili servis hesaplarına ait nesneler oluşmuş olacaktır:

4. gMSA Hesabının Sunucular Üzerinde Yapılandırılması:
Öncelikle MSTDC01 isimli sunucu üzerine active directory içerisinde oluşturmuş olduğum Gmsa servis hesabının yüklenmesi ve testini aşağıdaki adımlarla gerçekleştireceğiz.
Install-ADServiceAccount komutunu kullanabilmek için sunucular üzerinde Active Directory PowerShell modülünün yüklü olması gerekir. Benim domain controller sunucumda bu modül yüklü olduğu için herhangi bir işlem yapmıyorum. Fakat domain içerisindeki üye olan sunucular üzerinde böyle bir modül yüklü olmadığı durumlar için öncelikle aşağıdaki şekilde görüldüğü gibi Install-WindowsFeaturekomutu ile bunun yüklenmesini gerçekleştirmeniz gerekiyor. Bu yüklemeyi Server Manager konsolundan Add Roles and Features sihirbazı ile grafiksel arayüzden de gerçekleştirebilirsiniz:

Şimdi de Install-ADServiceAccount TestRunMSA komutu ile kullanacağımız servis hesabını ilgisi sunucu üzerine yüklüyoruz.

Not: Install-ADServiceAccount komutu ile yüklemede başarısız olursanız ilgili sunucunun yeniden başlatılarak gruba üye özelliğinin etkin hale gelmesi noktasını burada tekrar hatırlatmış olalım.
Yukarıdaki şekilde görüldüğü gibi artık servis hesabını da yüklemiş olduk. Yükleme işlemi sonrasında Test-ADServiceAccount komutu ile de servis hesabının yüklenmesini doğrulayabilirsiniz.

Bu komut sonrası çıktıda True sonucu ile servis hesabının başarıyla yüklendiğini doğrulamış olduk. Sıra geldi servis hesabını ilgili servis ya da görev üzerinde kullanmaya.
Bu işlem için de öncelikle Windows Services konsolunu açıyoruz. Örnek olarak Windows Internal Database servisinin Properties’ine giriyoruz ve Logon tabına geçiyoruz. Browse butonuna tıklayarak oluşturmuş olduğumuz TaskRunMSA servis hesabını gösteriyoruz.

Password ve Confirm Password kutularını boş bırakarak, Apply ile onaylıyoruz. Böylece servis hesabına ilgili servis üzerinde gerekli yetkiler tanımlanmış oluyor.

General tabına geçerek servisi Start ya da Restart ile yeni servis hesabı üzerinden çalışmasını tetikliyoruz. Bu aşamada bu bilgisayar Windows 2012 R2 ya da Windows 2012 domain controller ile iletişime geçerek servis hesabına ait şifreyi temin ediyor ve servis üzerinde bunu set ederek çalıştırıyor. Artık Windows Internal Database servisi oluşturmuş olduğumuz Gmsa servis hesabı ile çalışmaya başladı. Bundan böyle bu servis hesabının şifre yönetimini Windows işletim sistemi üzerinde ilgili bilgisayarın hesabı ile domain controller sunucu bilgisayarının hesabı karşılıklı haberleşerek gerçekleştirmiş olacaklar.

Windows Task Schedule İle Yönetilen Servis Hesaplarının Kullanımı:
Yukarıda bir Windows servisi üzerinde yönetilen servis hesabının yapılandırmasını adım adım nasıl yapıldığını inceledik. Şimdi de bir zamanlanmış görev üzerinde “Run As Account” olarak yönetilen servis hesabının kullanımını görelim.
Öncelikle yukarıdaki adımların benzerini gerçekleştirerek “RunAsAccount” isimli bir servis hesabı oluşturuyoruz:

Bu hesabı ilgili sunucu üzerine Install ediyoruz.

Şimdi de bu hesabın bir task üzerinde kullanımını görelim. Zamanlanmış görevlerde yönetilen servis hesaplarının yapılandırması grafiksel Task Scheduler uygulama arayüzünden desteklenmemektedir. PowerShell komut satırı aracı ile hazırlanan zamanlanmış görevlerde yönetilen servis hesabı yapılandırılabilir. Örneğin C: sürücüsü içerisinde düzenli çalışan “RunScript.cmd” isimli bir çalıştırılabilir komut dosyasını yönetilen servis hesabına ilişkilendirerek nasıl programladığımızı adım adım gerçekleştirelim:

Yukarıdaki $kullanici değişkenine atanan kullanıcı hesabı oluşturmuş olduğumuz RunAsAccount isimli yönetilen servis hesabıdır. Burada LogonType parametresinden sonraki Password ifadesi gerçek şifre değildir, servis hesabına ait şifrenin domain controller sunucusundan talep edileceğini belirtmektedir.
Şimdi bu parametreleri kullanarak bir zamanlanmış görev tanımlayalım. Bu işlem için de Register-ScheduledTask isimli powershell komutunu kullanıyoruz.

Bu işlem sonrasında Task Scheduler konsolu içerisine oluşturduğumuz zamanlanmış görevin geldiğini göreceksiniz:

Bundan böyle bu zamanlanmış görev yönetilen servis hesabı ile çalışacak ve bu hesabın şifre yönetimi de sunucuya ait bilgisayar hesabı ile domain controller arasındaki iletişimle otomatik olarak yönetilmiş olacaktır. Task scheduler konsolunda listelenen bu zamanlanmış görevle ilgili değişikliklerin yine PowerShell komut satırı ile gerçekleştirilmesi gerekir.
ÖNEMLİ : Zamanlanmış toplu işlem komutları ya da script dosyalarını yukarıdaki olduğu gibi yönetilen servis hesabı ile çalıştırılması senaryolarında, yönetilen servis hesabının ilgili sunucu ya da sunucular üzerinde “Logon as a batch” yetkisine sahip olması gerekir.

Logon as a batch yetkisini sunucunun Local Security Policy ayarlarından ya da active directory içerisinde sunucuya uygulanan Group Policy ayarları içerisinde Computer Configuration altında User Rights Assignment altından verebilirsiniz. Varsayılan olarak Administrators ve Backup Operators grupları bu yetkiye sahiptir. Yönetilen servis hesabını bu gruplara üye yaparak da yetki tanımını gerçekleştirebilirsiniz.
Üçüncü Parti GUI gMSA Yönetim Aracı
Şu ana kadar gMSA yönetimini hep PowerShell komut satırı uygulamaları ile gerçekleştirmiştik. Şimdi de free olarak yazılmış olan ve http://www.cjwdev.co.uk/Software/MSAGUI/Info.html adresinden indirebileceğiniz grafiksel yönetim aracını da kullanabilirsiniz:

Bu aracı indirdikten sonra Windows Server 2012 R2 sunucumuza yüklüyoruz.


Uygulama kurulduktan sonra çalıştırdığınızda aşağıdaki şekilde ekran karşımıza gelecektir.

Bu ekranda hali hazırda mesutaladag.local domaininde oluşturulan yönetilen servis hesaplarının listelendiğini göreceksiniz. Şimdi adım adım bu aracı kullanarak Group-Managed yönetilen servis hesabının yönetimini nasıl yaptığımız inceleyelim:
Öncelikle New butonuna tıklıyoruz.
Karşımıza gelen New Managed Service Account ekranında aşağıdaki şekilde bir ClustergMSA01 isimli servis hesabı tanımını giriyoruz. Hesabin oluşturulacağı kap olarak Managed Service Account varsayılan konumu yerine farklı bir organizational unit de gösterebilirsiniz. Hesap tipi olarak da Group MSA seçiyoruz.

Additional Options butonu genişletilerek hesap için son kullanma tarihi ve SPN tanımlarını da yine burdan girebilirsiniz.

OK ile onaylayarak servis hesabı oluşturma işlemini tamamlamış olacaksınız. Karşımıza gelen Associate With Computer ekranında oluşturulan servis hesabını active directory domain içerisinde bir bilgisayara atama yapıp yapmayacağımızı soracaktır.

Yes ile onaylıyoruz. Karşımıza gelen Edit Group MSA Hosts ekranında Add butonu kullanarak servis hesabının atanacağı bilgisayar hesabı gösterilir. Ben cluster yapıda çalışan SQL01 ve SQL02 hesaplarını sırayla ADD butonunu kullanarak ekliyorum.

OK ile tüm pencereler onaylanır. Ve başarıyla atamanın gerçekleştiği bilgisi gelecektir.

OK ile bu ekranı kapattıktan sonra listeye oluşturduğumuz gMSA hesabı gelmiş olacaktır.

Bu aşamadan sonra kalan tek adım ilgili sunucuya gidip bu servis hesabını ilgili uygulamaya tanımlamak olacaktır. SQL Cluster yapısının kurulu olduğu sunucularımdan ilkine bağlanıyorum. Windows Services konsolunu kullanarak aşağıdaki şekilde görüldüğü gibi oluşturduğumuz ClusterMSA01$ hesabını gösteriyorum.

Password ve Confirm Password kutucuklarını boşaltıyoruz. Şifre atamasını arka planda active directory domain controller sunucu ile iletişime geçerek sunucu kendisi yapacaktır. OK ile onayladıktan sonra yapmanız gereken servisi yeniden başlatmaktır. Servisi yeniden başlattığınız herhangi bir hata almadan sorunsuz başlattı ise cluster’ın ilk node’u üzerindeki işimiz bitti. İkinci node’a bağlanarak aynı işlemleri sırayla onun üzerinde de gerçekleştiriyoruz.
Eğer servisi yeniden başlattığınızda aşağıdaki gibi bir hata mesajı alırsanız bunun çözümü için sunucunun Local Security Policy konsolunda User Rights Management altından “Logon as a Service” yetkisini vermeniz gerekir.

Managed Service Accounts GUI aracı ile aşağıdaki araç çubuğu kısayolları kullanılarak farklı görevleri de yerine getirebilirsiniz:
Edit Hosts : Yönetilen servis hesabının ilişkili olduğu sunucu listesine eklemeye ya da listeden çıkarma yapılabilir.

View/Edit : Yönetilen servis hesabının özelliklerini görüntüleme ve düzenleme işlemleri.

Delete : Yönetilen servis hesabının active directory içerisinden tamamen silinmesi.

SONUÇ
Toplamda iki bölümden oluşacak makale serimizin ikinci bölümünün de sonuna geldik. Bu bölümde sizlerle Windows Server 2012 R2 ile Group Manager Service Accounts(gMSA) oluşturma, yapılandırma ve test adımlarını uygulamalı olarak paylaştık. Bir başka Windows Server 2012 R2 makalesinde görüşmek dileğiyle esenkalın.
Bu konudaki diğer kaynaklar;