Ana içeriğe atla

gMSA (group managed service account) and SQL Server

MSA (managed user account) teknolojisinin sorunlarından bir tanesi aynı MSA'i birden fazla computer objesinde kullanamamaktı.

Bu nedenle de gMSA (group managed service account) duyuruldu. gMSA ile;
  • Passwordler Active Directory tarafından yönetileceği için complex olurlar ve sık sık otomatik olarak değiştirilir (default 30 days). Passwordler 240 bytes uzunluğunda randomly şifrelenmiş olarak üretilir. Ek olarak interactive logon amaçlı kullanılamazlar, yanlış şifre girilmesi sonucunda meydana gelen lock-out olma durumuna yakalnmazlar.
  • Şifre değişikliği sonrasında SQL Server Servisinin restart edilmesine gerek bulunmaz.
Aşağıda belirtilen adımlar pre-reqlerin tamamlanmış olduğu varsayılarak step by step aktarılmıştır. Prerequisetlerle ilgili detaylı bilgilendirmeye https://technet.microsoft.com/en-us/library/jj128431.aspx#BKMK_gMSA_Req linkinden erişilebilir.

1- Active Directory Users and Computers Altında Global Security Group Oluşturma

  • gMSA 'i kullanacağımız sunucuları kapsayacak,mantıklı bir isimlendirme ile gMSA 'i oluşturduğumuz domain altında scope'u Globak olacak şekilde bir security group oluşturmalıyız.
  • Bu grup içerisine gMSA'i kullanacağımız computer accountları eklemeliyiz. Eğer süreç yönetimi sıkı takip edilen bir firmadaysanız, Orchestrator ile kısa bir otomasyon oluşturarak yeni sunucuları hızlıca ve kayıt altına alınacak şekilde gruba ekleyebilirsiniz. AD grup mantığında policynin kabul görmesi için gruba eklenen sunucunun restart edilmesi gerekmektedir.
  • Oluşturulan bu grup ile üye computer accountlara özel haklar verilerek, gMSA passwordunun alınması için gerekli yetkiler sağlanacaktır.
NewObjectGroup 2      UsersAndComputers 2

2- gMSA Oluşturmak

Bu adımda sadece gMSA oluşturulmamaktadır, bir önceki adımda oluşturulan SQLServers isimli security gruba yeni create edilen gMSAsqlservice gMSA kullanıcısının şifresini alabilme yetkisi de verilmektedir. 
New-ADServiceAccount -name gMSAsqlservice -DNSHostName gMSAsqlservice.contoso.com -PrincipalsAllowedToRetrieveManagedPassword SQLServers
3- gMSA 'i Üye Sunucularda Konfigürasyonu ve Validasyon Testi 
Normal şartlarda restart edildikten sonra yapılması gereken bir adım bulunmuyor ancak yine de bu adım validasyon işlemlerini içerdiği için yapılmasında büyük fayda var. AD Powershell module gerektiren komutlardır.
Install-ADServiceAccount gMSAsqlservice
Test-ADServiceAccount gMSAsqlservice
Test komut sonucu True dönmelidir.

4- SQL Server'in gMSA kullanması için Konfigüre Edilmesi
  • SQL Server Configuration Manager açılır.
  • Log On tabında bulunan "This Account" seçilerek, oluşturduğumuz gMSA eklenir. Önemli olan account tiplerinde arama için gerekli tiplerin yer almasıdır.
    • gMSA 'den sonra $ eklenmelidir.
    • Password girişi yapılmamalıdır.
  • SQL Server servisi restart edilmelidir.



Oluşturduğunuz gMSA 'i bir SQL Server'a erişim amacıyla kullanmak için yazımdan faydalanabilirsiniz:
https://hogretmen.blogspot.com.tr/2017/05/configure-gmsa-as-login-on-sql-server.html

Oluşturduğunuz gMSA 'i IIS Application Pool Identity User olarak kullanmak için yazımdan faydalanabilirsiniz:
https://hogretmen.blogspot.com.tr/2017/05/configure-iis-application-pool-to-use.html



Yorumlar

Bu blogdaki popüler yayınlar

Check Computer Object is Alive On Domain

Powershell'in gücü system admin rolündeki kişiler için tartışılmaz. Zaman zaman üzerinde aging tanımı olmayan ortamlarda, düzgün yönetilemeyen domain ve dns ortamlarında aslında kapalı olan ve kapalı olmamasına rağmen domainden düşmüş computer objelerinin tespit edilebilmesi için aşağıdaki gibi bir script geliştirmiştim. Umarım faydası olur, her türlü ek geliştirme için hakkiogretmen@gmail.com adresine mail atabilirsiniz. Import-Module ActiveDirectory $myServers = @("servers") If (Test-Path "D:\Temp\PasswordLastSetResult.txt"){ Remove-Item "D:\Temp\PasswordLastSetResult.txt" } $Servers_OU =  "OU=ServersOU,OU=ABCServersOU,DC=mydomain,DC=dmn,DC=com" foreach ($myserver in $myServers)         {         $mycomp = Get-ADComputer –SearchBase $Servers_OU –SearchScope SubTree -Filter { OperatingSystem -like "Windows Server*"} -Properties PasswordLastSet,IPv4Address | Select * | Where-Object {$_.Name -eq $myserver} trap [Syste...

Powershell Kullanarak Windows Features Yönetimi (Import And Export)

Bu yazı Windows Server 2008, Windows Server 2008 R2, Windows Server 2012, Windows Server 2012 R2 ve Windows Server 2016 işletim sistemleri üzerinde kullanılabilecek bilgiler içerir. Yazıyı okumaya başlamadan önce yazı içerisinde kullanılacak Get-WindowsFeature ve Add-WindowsFeature cmdletleriyle ilgili detaylı bilgileri inceleyebilirsiniz. Kendi ortamınızda test yapmadan önce ServerManager modülünü import etmelisiniz, Import-Module cmdlet için de yine MSDN üzerindeki bilgilerden faydalanabilirsiniz. Umarım faydalı bir yazı olmuştur. Birden fazla sunucuya benzer kurulumları yapmak istediğimizde karşımıza operasyonel zorluklar çıkabiliyor. Bu işlemleri hızlandırmanın & standart bir hale getirmenin bir çok yolu var ancak bu yazıda bir sunucu üzerinde kurulu Windows Feature'ların powershell ile toplanarak, diğer bir sunucuda kurulması için en basit olduğunu düşündüğüm yöntemi paylaşacağım. İlk olarak servermanager modülünün Powershell sessionımıza import edilmesi gerekmekted...

Windows Feature Batch Deployment

Aşağıdaki function ile bir sunucu üzerinde oluışturduğumuz configuration file dosyası ile uzak lokasyondaki birden çok sunucuya yükleme yapabiliriz. Umarım faydalı olur, her türlü ek geliştirme için hakki.ogretmen@gmail.com adresine mail atabilirsiniz. function Invoke-WindowsFeatureBatchDeployment { param ( [parameter(mandatory)] [string[]] $ComputerNames, [parameter(mandatory)] [string] $ConfigurationFilePath ) # Deploy the features on multiple computers simultaneously. $jobs = @() foreach($ComputerName in $ComputerNames) { $jobs += Start-Job -Command { Install-WindowsFeature -ConfigurationFilePath $using:ConfigurationFilePath -ComputerName $using:ComputerName -Restart } } Receive-Job -Job $jobs -Wait | Select-Object Success, RestartNeeded, ExitCode, FeatureResult }