Вы можете использовать Учетные записи управляемых служб (MSA) для безопасного запуска служб, приложений и задач планировщика на серверах и рабочих станциях в домене Active Directory. MSA — это особый тип учетной записи, для которой AD генерирует сложный пароль (240 символов) и автоматически меняет его каждые 30 дней. MSA нельзя использовать для интерактивного входа, пароль никому не известен и не хранится в локальной системе (нельзя извлечь пароль из системного процесса LSASS с помощью mimikatz или аналогичных инструментов). Таким образом, для запуска служб или автоматизированных заданий не нужно создавать отдельных пользователей служб в AD и управлять их паролями.

В этой статье показано, как создавать учетные записи MSA и gMSA и использовать их для безопасного запуска служб и запланированных заданий на компьютерах Windows в домене AD.

В 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.

Совет. Для немедленного использования ключа KDS в тестовой среде можно выполнить следующую команду:
Add-KdsRootKey –EffectiveTime ((get-date).addhours(-10))

Проверьте, что корневой ключ KDS успешно создан:
Get-KdsRootKey
Add-KdsRootKey - создание корневого ключа KDS службы распределения ключей с помощью PowerShell

Используйте команду для проверки ключа KDS:

Test-KdsRootKey -KeyId (Get-KdsRootKey).KeyId

Test-KdsRootKey

Чтобы создать новую учетную запись управляемых служб (MSA) в AD, выполните команду:

New-ADServiceAccount -Name msaMunSrv1 –RestrictToSingleComputer

Свяжите учетную запись службы MSA с целевым компьютером (для привязки используйте команду msDS-HostServiceAccount атрибут используется в свойствах учетной записи компьютера):

$Identity = Get-ADComputer -identity mun-srv01
Add-ADComputerServiceAccount -Identity $identity -ServiceAccount msaMunSrv1

Помните, что вы можете использовать только одну учетную запись MSA на одном сервере домена.

Откройте консоль ADUC (Active Directory Users and Computers) и убедитесь, что новая учетная запись типа msDS-ManagedServiceAccount появилась в CN=Managed Service Accounts контейнер.

Учетные записи управляемых служб в Active Directory

Этот контейнер AD по умолчанию скрыт. Чтобы отобразить его, включите опцию Дополнительные возможности опция в Посмотреть меню оснастки ADUC.

Создание учетной записи 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$

создание группы безопасности для учетной записи gMSA в AD

Создайте учетную запись Group Managed Service Account (gMSA) и привяжите ее к группе безопасности grMunSQL1:

New-ADServiceAccount -name gmsaMunSQL1 -DNSHostName gmsaMunSQL1.woshub.com -PrincipalsAllowedToRetrieveManagedPassword grMunSQL1 –verbose

New-ADServiceAccount - create gmsa PrincipalsAllowedToRetrieveManagedPassword

Перезагрузите серверы, которые были добавлены в группу, или можно обновить членство сервера в группе AD без перезагрузки:

klist.exe -lh 0 -li 0x3e7 purge

Учетная запись gMSA также создается по умолчанию в OU Managed Service Accounts.[msDS-GroupMSAMembership Атрибут в свойствах учетной записи gMSA связывает учетную запись с хостом Windows или группой AD.

msDS-GroupManagedServiceAccount

Некоторые службы требуют регистрации 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

Таким образом необходимо установить только учетные записи MSA. Для gMSA этот шаг можно пропустить. Достаточно, чтобы этот сервер был добавлен в PrincipalsAllowedToRetrieveManagedPassword атрибут учетной записи gMSA в AD:

Get-ADServiceAccount gmsaMskSQL1 -Properties PrincipalsAllowedToRetrieveManagedPassword

Проверьте, правильно ли установлена учетная запись службы:

Test-ADServiceAccount gmsaMunSQL1

Если команда возвращает True, эта учетная запись службы может использоваться на этом узле Windows.

Install-ADServiceAccount - установка учетной записи gmsa на Windows Server 2016

Если команда возвращает False, то, скорее всего, учетная запись MSA не установлена в Windows или у текущей учетной записи компьютера нет разрешения на ее использование:

Test-ADServiceAccount

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).

  1. Откройте командную строку от имени администратора;
  2. Выполните команду: PsExec64.exe -i -u woshub\gmsaMunSQL1$ -p ~ cmd.exe
    [~ символ заменяет пароль. Это означает, что компьютер должен получить пароль учетной записи из AD.
  3. В новом приглашении cmd выполните команду whoami чтобы убедиться, что консоль запущена под учетной записью gMSA; запустить cmd от имени gmsa (Group Managed Service Account)
  4. Убедитесь, что все сценарии, службы или приложения, которые вам нужны, могут корректно работать под учетной записью управляемых служб.

Следующим шагом будет настройка необходимых служб Windows, заданий планировщика, пулов IIS и т. д. для запуска от имени пользователя MSA или gMSA.

Как запустить службу Windows под учетной записью управляемой службы

Давайте рассмотрим настройку определенной службы Windows для запуска под учетной записью службы, управляемой AD.

  1. Откройте консоль управления службами (services.msc);
  2. Откройте свойства нужной вам службы и перейдите к пункту «Войти» вкладка;
  3. Выберите Эта учетная запись и введите имя учетной записи MSA. Добавьте параметр $ символ в конце имени учетной записи (пароль не требуется);
  4. Учетная запись службы MSA будет автоматически предоставлена Вход в систему как служба разрешения; настройка службы windows для запуска из учетной записи службы gMSA
  5. Сохраните изменения и перезапустите службу.

Чтобы запустить пул приложений IIS от имени учетной записи управляемой службы, откройте apppool Дополнительные параметры и измените Идентичность поле из ApplicationPoolIdentity к пользовательскому аккаунту -> woshub\gmsaMunSQL1$ (оставьте поле для ввода пароля пустым):

Использование групповых управляемых учетных записей служб в IIS

Или вы можете использовать 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, проверьте в документации, поддерживаются ли они. В настоящее время gMSA поддерживается в SQL Server, IIS, AD LDS и Exchange Server.

Запуск запланированной задачи 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

Узнайте больше об управлении запланированными задачами с помощью PowerShell.

использование gMSA для задач по расписанию (способ powershell)

Вы также можете создать запланированную задачу с необходимыми настройками, используя 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$

предоставить разрешение на вход в систему в качестве пакетного задания для учетной записи gmsa