Как создать служебную учетную запись в Windows Server 2012 R2
И снова здрасьте, работа — а что есть лучше нового места работы — это новое место работы. Здесь я узнал (до этого никогда не использовал), что для нужд сервисов, т.е. от имени кого его(их) запускать введена компанией Microsoft
технология управляемых служебных записей (аббревиатура MSA - Managed Service Accounts
). Что самое интересное данная технология появилась еще на Windows Server 2008 R2
, но я нигде ее не видел применения. А здесь она используется во всю. Раз так я тоже хочу ее применять, ведь это безопасность компрометации системных учетных записей.
Достоинства:
У учетной записи MSA пароль сгенерирован системой и длина его 240 символов.
Пароль меняется автоматические (по дефолту каждые 30 дней)
Никак не сохраняется в системе
Требования к использованию:
Уровень схемы AD = Windows Server 2012
Права Domain Admins
На контроллере домена должна присутствовать служба Microsoft Key Distribution Service (Служба распространения ключей)
PowerShell-модуль для управления Active Directory
Служба задействующая gMSA (gMSA — Group Managed Service Accounts) поддерживается SQL Server 2008 R2 SP1, 2012;IIS; AD LDS; Exchange 2010/2013
На заметку: MSA pre-Windows Server 2012, Windows Server 2012 released gMSA (group Managed Service Accounts). gMSA should support SQL Serve.
MSA – Managed Service Accounts (MSA)
gMSA – Group Managed Service Account (gMSA)
В наличии домен контроллер
srv-dc.polygon.local (OC: Windows Server 2012 R2 Std)
Login: ekzorchik (Group: Domain Admins)
Шаг №1: Для создания учетной записи gMSA
создаю корневой ключ KDS (KDS root key)
на домен контроллере.
Win + R -> Command Prompt (Admin) - powershell
1234567891011 | C:\Windows\system32\powershell PS C:\Windows\system32> Add-KdsRootKey -EffectiveImmediately Guid —- f88a882-11ad-d305-6c00f1708ea3 PS C:\Windows\system32> |
Но как бы есть, но ключ заработает только через 10
часов, после окончания репликации. Так не пойдет, ускорим данный процесс:
1234567 | PS C:\Windows\system32> Add-KdsRootKey -EffectiveTime ((get-date).addhours(-10)) Guid —- ffa75621-c6b0-1ebe-4f42-b12aeb2c73b4 |
Шаг №2: Проверяю, что корневой ключ KDS
создался:
1 | PS C:\Windows\system32> Get-KdsRootKey |
Шаг №3: Чтобы создать учетную запись MSA
. (ограничена одним каким-либо сервером)
Win + X -> Command Prompt (Admin)
123 | C:\Windows\system32> powershell PS C:\Windows\system32> get-host |
1 | PS C:\Windows\system32> New-ADServiceAccount -Name msasql -RestrictToSingleComputer |
-Name -> имя создаваемой сервисной учетной записи
-RestrictToSingleComputer -> Создание учетной записи действие которой ограничено одним каким-либо сервером
После чего проверяю, что в домене в сервисном OU=Managed Service Accounts
появилась созданная учетная запись
Win + X – Control Panel – Administrative Tools – Active Directory Users and Computers
Задействуем снова консоль powershell
и получим информацию о созданной учетной записи msasql:
123 | PS C:\Windows\system32> Get-ADServiceAccount msasql (краткая информация) PS C:\Windows\system32> Get-ADServiceAccount msasql -properties * (расширенная информация) |
Шаг №4: Чтобы создать учетную запись gMSA. (Group Managed Service Account).
Групповая учетная запись, ограниченная применением группой, в которую включены несколько компьютеров:
1 | PS C:\Windows\system32> New-ADServiceAccount -Name “gmsasql” -DNSHostName “srv-dc.polygon.local” -PrincipalsAllowedToRetrieveManagedPassword srv-sql$ |
-Name "gmsasql" -> имя создаваемой учетной записи gMSA
-DNSHostName -> имя которое для учетной записи будет в формате <name><domain suffix>
Т.к. по умолчанию период действия пароля ограничен 30
днями, можно его увеличить, к примеру до 90
дней перед автоматической сменой в примере выше указав ключ “-ManagedPasswordInvervalInDays
” 90
. (Кавычки не указываем)
Задействуем снова консоль powershell
и получим информацию о созданной учетной записи gmsasql:
123 | PS C:\Windows\system32> Get-ADServiceAccount gmsasql (краткая информация) PS C:\Windows\system32> Get-ADServiceAccount gmsasql -properties * (расширенная информация) |
Также увидеть воочию созданную системную учетную запись нужно запустить оснастку Active Directory Users and Computer
, нажать View - Advanced Features.
На заметку: Как учит Microsoft и Best Practice – один сервис = одна учетная запись, а не использовать одну везде и для всех случаев. Да удобно, но правильно так, к тому же обязательно составлять заметку как настроен сервис и какие учетные записи применяются.
Шаг №5: Помимо явного указания сервера к которому привязывается групповая системная учетная запись (gMSA
) можно привязать к доменной группе которая включает в себя FQDN
—имена систем:
1 | PS C:\Windows\system32> dsadd group “CN=sqlserver,OU=IT,DC=polygon,DC=local” |
после добавляем в эту группу систему srv-sql
12345 | PS C:\Windows\system32> Uninstall-ADServiceAccount -Identity ‘gmsasql’ PS C:\Windows\system32> Set-ADServiceAccount -Identity gmsasql ` -PrincipalsAllowedToRetrieveManagedPassword sqlserver |
Проверять к каким компьютерам или группе компьютеров привязана системная учетная запись gMSA:
1 | PS C:\Windows\system32> Get-ADServiceAccount -Identity gmsasql -Properties PrincipalsAllowedToRetrieveManagedPassword |
Шаг №6: Перед тем как прописать системную учетную запись (MSA
) нужно установить командлеты PowerShell
для работы Active Directory:
Т.к. одиночная и групповая системная учетная запись созданы выше теперь нужно прописать её(их) на конкретном сервере(рах):
Система: srv-sql.polygon.local (Windows Server 2012 R2 Std English)
Авторизуюсь на ней под учетной записью Login: ekzorchik Group:"Domain Admins"
Win + X -> Command Prompt (Admin) -> powershell
1 | PS C:\Windows\system32> Install-WindowsFeature -Name “RSAT-AD-PowerShell” |
На заметку: если добавить ключ «fl
«, то вывод будет не в табличном режиме, а в строковом.
1 | PS C:\Windows\system32> Install-ADServiceAccount -Identity “msasqm” |
После обязательно проверяем работу учетной записи:
1 | PS C:\Windows\system32> Test-ADServiceAccount -Identity “msasqm” |
True – статус означает, что учётная запись установлена на сервере.
False – статус означает, что учётная запись не привязана в AD к системе на которой выполняем проверку
У меня статус True.
1 | PS C:\Windows\system32> |
Если открыть свойства системы srv-sql
и перейти во вкладку Attribute Editor
в атрибуте msDS-HostServiceAccount
будет привязка к системной учетной записи CN=msasql,CN=Managed Service Accounts,DC=polygon,DC=local
Далее нужно на системе srv-sql
через gpedit.msc
указать что системную учетную запись msasql
можно задействовать в роли указания, как запуск службы от ее имени.
Win + R -> gpedit.msc & Win + X – Run -> gpedit.msc – Local Computer Policy – Computer Configuration – Windows Settings – Security Settings – Local Policies – User Rights Assignment
Log on as a batch job: прописываем системную учетную запись
Log on as a service: прописываем системную учетную запись
Все можно настраивать сервисы и указывать что запуск их будет происходить от имени msasql$
, а пароль не указываем.
Шаг №7: Как прописать групповую системную учетную запись (gMSA
) нужно установить командлеты PowerShell
для работы Active Directory
на сервер srv-sql
и отредактировать локальную групповую политику.
Win + X – Command Prompt (Admin) – PowerShell
123 | PS C:\Windows\system32> New-ADServiceAccount -Name “gmsasql” -DNSHostName “srv-dc.polygon.local” -PrincipalsAllowedToRetrieveManagedPassword sqlserver PS C:\Windows\system32> Install-WindowsFeature -Name “RSAT-AD-PowerShell” |
Шаг №8: Чтобы найти все учетные записи MSA & gMSA
в домене, поиск ведем под учетной записью вхожей в группу Domain Admins
на домен контроллере:
Win + X – Command Prompt (Admin) – PowerShell
1 | PS C:\Windows\system32> Get-ADServiceAccount -Filter * |
Шаг №9: Как сбросить пароль на системную учетную запись (Выполняем под учетной записью вхожей в группу Domain Admins на той системе на которой используется системная учетная запись):
Win + X – Command Prompt (Admin) – PowerShell
123 | PS C:\Windows\system32> Get-ADServiceAccount -Identity msasql -Properties passwordlastset | select Name,ObjectClass,PasswordLastSet | ft PS C:\Windows\system32> Reset-ADServiceAccountPassword -Identity msasql |
Если запустить эту команду на другой системе с которой нет привязки, то получите ошибку вида «Referenced service account is not installed on this computer.
”
Шаг №10: Чтобы удалить системную учетную запись или групповую.
Удаляем учетную запись MSA
с серверов (к примеру на srv-sql
), где она была проинсталлирована командой Install-ADServiceAccount:
1234567891011 | PS C:\Windows\system32> hostname srv-sql PS C:\Windows\system32> Test-ADServiceAccount -Identity “msasql” True PS C:\Windows\system32> Test-ADServiceAccount -Identity “gmsasql” True |
1234567 | PS C:\Windows\system32> Uninstall-ADServiceAccount msasql PS C:\Windows\system32> Test-ADServiceAccount -Identity “msasql” False WARNING: The Managed Service Account msasql is not linked with any computer object in the directory |
После проверяем что в свойствах компьютера srv-sql
, вкладка Attribute Editor
(На домен контроллере) атрибут msDS-HostServiceAccount
принял дефолтное значение <not set>
, т.е. не назначено.
(on srv-dc.polygon.local
)
123456789 | PS C:\Windows\system32> Remove-ADServiceAccount -Identity msasql Are you sure you want to perform this action? Performing the operation “Remove” on target “CN=msasql,CN=Managed Service Accounts,DC=polygon,DC=local”. Нажимаю на клавиатуре клавишу “A” и нажимаю <ENTER> PS C:\Windows\system32> |
Удаляем (из под доменной учетной записи с правами Domain Admins
) учетную запись gMSA
с серверов (к примеру на srv-sql
) указанных явно или назначенную на доменную группу с вхожими в нее системами:
1234567 | PS C:\Windows\system32> Test-ADServiceAccount -Identity “gmsasql” True PS C:\Windows\system32> Uninstall-ADServiceAccount gmsasql PS C:\Windows\system32> Remove-ADServiceAccount -Identity ‘gmsasql’ |
Работу заметки на Windows Server 2016 & Server 2019
не проверял, просто пока нет надобности.
Заметка будет дополняться если возникнет такая необходимость.
Пока на этом, собственно, все, с уважением автор блога Олло Александр aka ekzorchik.