Вы можете использовать Учетные записи управляемых служб (MSA) для безопасного запуска служб, приложений и задач планировщика на серверах и рабочих станциях в домене Active Directory. MSA — это особый тип учетной записи, для которой AD генерирует сложный пароль (240 символов) и автоматически меняет его каждые 30 дней. MSA нельзя использовать для интерактивного входа, пароль никому не известен и не хранится в локальной системе (нельзя извлечь пароль из системного процесса LSASS с помощью mimikatz или аналогичных инструментов). Таким образом, для запуска служб или автоматизированных заданий не нужно создавать отдельных пользователей служб в AD и управлять их паролями.
В этой статье показано, как создавать учетные записи MSA и gMSA и использовать их для безопасного запуска служб и запланированных заданий на компьютерах Windows в домене AD.
- Как создать управляемую учетную запись (MSA) в Active Directory
- Создание учетной записи групповой управляемой службы (gMSA) в Active Directory
- Установка учетной записи управляемых служб в Windows
- Как запустить службу Windows под учетной записью управляемой службы
- Запуск запланированной задачи Windows с помощью учетной записи управляемой службы (gMSA)
В AD существует два типа учетных записей служб:
- Управляемые учетные записи служб (MSA) — , представленные в Windows Server 2008 R2 (
msDS-ManagedServiceAccount
тип объекта). Основное ограничение заключается в том, что такая учетная запись может использоваться только на одном сервере (ее нельзя использовать для запуска кластерных служб); - Учетные записи служб, управляемых группами (gMSA) — , представленная в Windows Server 2012 (
msDS-GroupManagedServiceAccount
тип объекта). Учетные записи GMSA можно использовать на нескольких серверах Windows.
Как создать управляемую учетную запись (MSA) в Active Directory
Прежде чем приступить к созданию учетных записей служб, управляемых AD, необходимо выполнить одноразовую операцию по созданию корневого ключа KDS на контроллере домена с включенной службой KdsSvc. Этот ключ используется для генерации пароля GMSA.
Add-KdsRootKey –EffectiveImmediately
В этом случае ключ создается и становится доступным через 10 часов после завершения репликации AD.
Add-KdsRootKey –EffectiveTime ((get-date).addhours(-10))
Проверьте, что корневой ключ KDS успешно создан:
Get-KdsRootKey
Используйте команду для проверки ключа KDS:
Test-KdsRootKey -KeyId (Get-KdsRootKey).KeyId
Чтобы создать новую учетную запись управляемых служб (MSA) в AD, выполните команду:
New-ADServiceAccount -Name msaMunSrv1 –RestrictToSingleComputer
Свяжите учетную запись службы MSA с целевым компьютером (для привязки используйте команду msDS-HostServiceAccount атрибут используется в свойствах учетной записи компьютера):
$Identity = Get-ADComputer -identity mun-srv01
Add-ADComputerServiceAccount -Identity $identity -ServiceAccount msaMunSrv1
Откройте консоль ADUC (Active Directory Users and Computers) и убедитесь, что новая учетная запись типа msDS-ManagedServiceAccount появилась в CN=Managed Service Accounts контейнер.
Создание учетной записи Group Managed Service Account (gMSA) в Active Directory
Перед созданием учетной записи gMSA создайте группу безопасности домена и добавьте в нее серверы, которым будет разрешено использовать эту учетную запись службы. Создать и заполнить группу можно с помощью PowerShell:
New-ADGroup grMunSQL1 -path 'OU=Groups,OU=Munich,OU=DE,dc=woshub,DC=com' -GroupScope Global -PassThru –Verbose
Add-AdGroupMember -Identity grMunSQL1 -Members mun-sql01$, mun-sql02$, mun-sql03$
Создайте учетную запись Group Managed Service Account (gMSA) и привяжите ее к группе безопасности grMunSQL1:
New-ADServiceAccount -name gmsaMunSQL1 -DNSHostName gmsaMunSQL1.woshub.com -PrincipalsAllowedToRetrieveManagedPassword grMunSQL1 –verbose
klist.exe -lh 0 -li 0x3e7 purge
Учетная запись gMSA также создается по умолчанию в OU Managed Service Accounts.[msDS-GroupMSAMembership Атрибут в свойствах учетной записи gMSA связывает учетную запись с хостом Windows или группой AD.
Некоторые службы требуют регистрации Service Principal Name (SPN) для корректной работы аутентификации Kerberos. Для регистрации SPN можно использовать учетные записи управляемых служб:
setspn -s MSSQLSvc/munsql01 woshub\gmsaMunSQL1$
setspn -s MSSQLSvc/munsql01.woshub.loc woshub\gmsaMunSQL1$
Установка учетной записи управляемых служб в Windows
Чтобы использовать учетные записи служб MSA/gMSA на серверах домена или рабочих станциях, необходимо сначала установить модуль PowerShell для Active Directory и .NET Framework 3.5+:
Add-WindowsFeature RSAT-AD-PowerShell
Установите учетную запись службы MSA на сервере:
Install-ADServiceAccount -Identity gmsaMunSQL1
Get-ADServiceAccount gmsaMskSQL1 -Properties PrincipalsAllowedToRetrieveManagedPassword
Проверьте, правильно ли установлена учетная запись службы:
Test-ADServiceAccount gmsaMunSQL1
Если команда возвращает True, эта учетная запись службы может использоваться на этом узле Windows.
False
, то, скорее всего, учетная запись MSA не установлена в Windows или у текущей учетной записи компьютера нет разрешения на ее использование:
WARNING: Test failed for Managed Service Account gmsaMunSQL1. If standalone Managed Service Account, the account is linked to another computer object in the Active Directory. If group Managed Service Account, either this computer does not have permission to use the group MSA or this computer does not support all the Kerberos encryption types required for the gMSA.
Вы не можете использовать стандартные RunAs для проверки того, что ваши службы и скрипты могут запускаться под учетной записью службы MSA. Вместо этого используйте инструмент PsExec (ранее мы показывали, как использовать psexec для запуска командной строки от имени NT Authority\System).
- Откройте командную строку от имени администратора;
- Выполните команду:
PsExec64.exe -i -u woshub\gmsaMunSQL1$ -p ~ cmd.exe
[~ символ заменяет пароль. Это означает, что компьютер должен получить пароль учетной записи из AD. - В новом приглашении cmd выполните команду
whoami
чтобы убедиться, что консоль запущена под учетной записью gMSA; - Убедитесь, что все сценарии, службы или приложения, которые вам нужны, могут корректно работать под учетной записью управляемых служб.
Следующим шагом будет настройка необходимых служб Windows, заданий планировщика, пулов IIS и т. д. для запуска от имени пользователя MSA или gMSA.
Как запустить службу Windows под учетной записью управляемой службы
Давайте рассмотрим настройку определенной службы Windows для запуска под учетной записью службы, управляемой AD.
- Откройте консоль управления службами (
services.msc
); - Откройте свойства нужной вам службы и перейдите к пункту «Войти» вкладка;
- Выберите Эта учетная запись и введите имя учетной записи MSA. Добавьте параметр $ символ в конце имени учетной записи (пароль не требуется);
- Учетная запись службы MSA будет автоматически предоставлена Вход в систему как служба разрешения;
- Сохраните изменения и перезапустите службу.
Чтобы запустить пул приложений IIS от имени учетной записи управляемой службы, откройте apppool Дополнительные параметры и измените Идентичность поле из ApplicationPoolIdentity к пользовательскому аккаунту -> woshub\gmsaMunSQL1$
(оставьте поле для ввода пароля пустым):
Или вы можете использовать PowerShell, чтобы указать учетную запись MSA для пула приложений IIS:
Import-Module WebAdministration
$pool = Get-Item IIS:\AppPools\wpad
$pool.processModel.identityType = 3
$pool.processModel.userName = "woshub\gmsaMunSQL1$"
$pool.processModel.password = ''
$pool | Set-Item
Запуск запланированной задачи Windows с помощью учетной записи управляемой службы (gMSA)
Вы можете настроить планировщик задач Windows на запуск заданий под учетной записью службы MSA. Это удобно, поскольку пароли для учетных записей MSA не хранятся в явном виде в сценариях, и вам не нужно их шифровать или защищать. Если контроллер домена меняет пароль учетной записи службы, нет необходимости заново настраивать задачу.
Единственный способ настроить запланированную задачу на запуск в качестве gMSA — это использование PowerShell. Например, следующий сценарий создает новое запланированное задание, которое запускает сценарий PowerShell для резервного копирования базы данных каждый день в 11:00 вечера:
$action = New-ScheduledTaskAction -Execute powershell.exe -Argument "-file C:\PS\Scripts\DBBackup.ps1 -executionpolicy bypass -NoProfile"
$trigger = New-ScheduledTaskTrigger -At 23:00 -Daily
$principal = New-ScheduledTaskPrincipal -UserID woshub\gmsaMunSQL1$ LogonType Password -RunLevel Highest
Register-ScheduledTask DBBackup –Action $action –Trigger $trigger –Principal $principal
Вы также можете создать запланированную задачу с необходимыми настройками, используя taskschd.msc
GUI. Затем перенастройте его на запуск под учетной записью управляемой службы с помощью консольной команды schtasks.exe:
schtasks /Change /TN BackupDB /RU "woshub\gmsaMunSQL1$" /RP ""
Предоставьте учетной записи MSA/gMSA необходимые разрешения службы и NTFS разрешения на файловую систему. Например, я добавил gMSA в локальную группу Backup Operators сервера:
Add-LocalGroupMember -Group "Backup Operators" -Member woshub\gmsaMunSQL1$
Чтобы запускать задачи планировщика, необходимо предоставить учетной записи gMSA права Вход в систему в качестве пакетного задания разрешение. Это можно сделать с помощью локального редактора GPO на отдельном компьютере: gpedit.msc
-> Windows Settings -> Security Settings -> Local Policies -> User Rights Assignment. Добавьте учетную запись в политику: woshub\gmsaMunSQL1$