Используем сервисные учетные записи AD (MSA и gMSA) для запуска сервисов и заданий Windows

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

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

Существует два типа сервисных учетных записей в AD:

  • Managed Service Accounts (MSA) – появились в Windows Server 2008 R2 (тип объекта msDS-ManagedServiceAccount ). Основное ограничение – такую учетную запись можно использовать только на одном сервере (т.е. их нельзя использовать с кластерными службами).
  • Group Managed Service Accounts (gMSA) – появились в Windows Server 2012 (тип объекта msDS-GroupManagedServiceAccount ). gMSA аккаунты можно одновременно использовать на нескольких серверах.

Создать корневой ключ Key Distribution Services

Перед началом использования сервисных учетных записей AD нужно выполнить разовую операцию по созданию корневого ключа KDS (KDS root key) на контроллере домена с включенной службой KdsSvc. Этот ключ будет использовать для генерации паролей gMSA.

Add-KdsRootKey –EffectiveImmediately

Ключ будет создан и доступен для использования через 10 часов, после окончания репликации между контролерами домена.

Совет. В тестовой среде для немедленного использования KDS ключа можно воспользоваться командой:

Add-KdsRootKey –EffectiveTime ((get-date).addhours(-10))

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

Get-KdsRootKey

Add-KdsRootKey создать корневой ключ KDS в active directory

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

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

Test-KdsRootKey

Создать управляемую учётную запись MSA в Active Directory

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

New-ADServiceAccount -Name msaMskSrv1Tasks –RestrictToSingleComputer

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

$Identity = Get-ADComputer -identity msk-srv01
Add-ADComputerServiceAccount -Identity $identity -ServiceAccount msaMskSrv1Tasks

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

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

контейнер Managed Service Accounts в active directory

По умолчанию этот контейнер скрыт, чтобы показать его выберите View -> Advanced Features в консоли ADUC.

Создать групповую сервисную учетную запись gMSA для нескольких серверов

Прежде чем создавать учетную запись gMSA, создайте доменную группу и добавьте в нее сервера, которым будет разрешено использовать пароль учетной записи gMSA. Проще всего создать и наполнить группу с помощью PowerShell:
New-ADGroup MskSQL1 -path 'OU=Groups,OU=MSK,OU=RU,dc=winitpro,DC=ru' -GroupScope Global -PassThru –Verbose

Add-AdGroupMember -Identity MskSQL1 -Members msk-sql01$, msk-sql02$, msk-sql03$

создать группу в active directory

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

New-ADServiceAccount -name gmsaMskSQL1 -DNSHostName gmsaMskSQL1.winitpro.ru -PrincipalsAllowedToRetrieveManagedPassword MskSQL1 –verbose

New-ADServiceAccount создать Group Managed Service Account (gMSA) с помощью powershell

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

klist.exe -lh 0 -li 0x3e7 purge

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

объект msDS-GroupManagedServiceAccount в acttive directory

Для корректной работы Kerberos аутентификации в некоторых сервисах нужна регистрация Service Principal Name (SPN). Сервисные учетные записи gMSA можно использовать при регистрации SPN:

setspn -s MSSQLSvc/sql01 winitpro\gmsaMskSQL1$
setspn -s MSSQLSvc/sql01.winitpro.loc winitpro\gmsaMskSQL1$

Установка учетных записей MSA и gMSA на хостах Windows

Для использования сервисных аккаунтов MSA/gMSA на целевых серверах или рабочих станциях сначала нужно установить модуль PowerShell для Active Directory и .NET Framework 3.5+:

Add-WindowsFeature RSAT-AD-PowerShell

Установите учетную запись MSA на сервере:

Install-ADServiceAccount -Identity gmsaMskSQL1

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

Get-ADServiceAccount gmsaMskSQL1 -Properties PrincipalsAllowedToRetrieveManagedPassword

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

Test-ADServiceAccount gmsaMskSQL1

Если команда вернет True – все настроено правильно.

установка Install-ADServiceAccount на сервере

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

this computer does not have permission to use the group MSA

WARNING: Test failed for Managed Service Account gmsaMskSQL1. 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.

Можно изменить периодичность смены пароля (по умолчанию 30 дней):

Set-ADServiceAccount gmsaMskSQL1 -ManagedPasswordIntervalInDays 60

Получить время последней смены пароля можно так:

Get-ADServiceAccount -Identity gmsaMskSQL1 -Properties passwordlastset

Get-ADServiceAccount passwordlastset

Для проверки работы служб и скриптов от имени сервисной учетной записи MSA не получится использовать стандартный RunAs. Вместо этого воспользуйтесь утилитой PsExec (ранее мы показывали, как использовать psexec для запуска командной строки от имени System).

  1. Откройте командную строку с правами администратора;
  2. Выполните команду: PsExec64.exe -i -u winitpro\gmsaMskSQL1$ -p ~ cmd.exe
    Вместо пароля указан знак ~ , это значит что пароль нужно получить из AD.
  3. В открывшемся окне cmd выполните команду whoami , чтобы убедиться, что консоль запущена от имени аккаунта gMSA. PsExec64 запуск командной строки от имени gmsa аккаунта в windows server
  4. Проверьте запуск скриптов, программ или служб от имени учетной записи Managed Service Account.

Теперь осталось настроить запуск нужных вам служб Windows, заданий Task Scheduler, пулов IIS (и т.д) от имени сервисных аккаунтов MSA/gMSA.

Запуск службы Windows от имени Managed Service Account

Рассмотрим, как настроить запуск произвольной службы Windows из-под сервисной записи MSA иди gMSA.

  1. Откройте консоль services.msc ;
  2. Откройте свойства нужной службы и перейдите на вкладку Log on;
  3. Выберите опцию This account и укажите имя MSA аккаунта. В конце имени обязательно указывается символ $ (пароль указывать не нужно);
  4. Сервисной учетной записи MSA будут автоматически предоставлены права Log On As a Service; запуск службы windows от имени gMSA учетной записи
  5. После сохранения изменений службу нужно перезапустить.

Для запуска пула IIS от имени gMSA, откройте расширенные настройки ApplicationPool (Advanced Settings) и в поле Identity измените ApplicationPoolIdentity на Custom Account -> winitpro\gmsaMskSQL01$ (пароль оставьте пустым):

запуск пула iis под сервисной учетой записью gmsa

Или вы можете указать учетную запись MSA для пула с помощью PowerShell:

Import-Module WebAdministration
$pool = Get-Item IIS:\AppPools\wpad
$pool.processModel.identityType = 3
$pool.processModel.userName = "winitpro\gmsaMskSQL01$"
$pool.processModel.password = ''
$pool | Set-Item

Для запуска сложных сервисов с помощью gMSA, проверьте в документации, что это поддерживается. На данный момент gMSA поддерживаются в SQL Server, IIS, AD LDS, Exchange Server.

Запуск задания планировщика от имени сервисной учетной записи gMSA

От имени сервисной учетной записи gMSA удобно запускать задания планировщика Windows Task Scheduler. Это удобно, так как пароли учетной записи gMSA не хранятся в скриптах в явном виде, вам не нужно их шифровать или защищать. При изменении пароля не нужно перенастраивать задание.

Настроить задание для запуска от имени gMSA можно только с помощью PowerShell. Например, следующий скрипт создаст новое задание планировщика, которое ежедневно в 21:00 запускает PowerShell скрипт для резервного копирования базы данных:

$action = New-ScheduledTaskAction -Execute powershell.exe  -Argument "-file C:\PS\DB\BackupDB.ps1 -executionpolicy bypass -NoProfile"
$trigger = New-ScheduledTaskTrigger -At 21:00 -Daily
$principal = New-ScheduledTaskPrincipal -UserID winitpro\gmsaMskSQL1$ -LogonType Password -RunLevel Highest
Register-ScheduledTask BackupDB –Action $action –Trigger $trigger –Principal $principal

powershell создать задание планировщика для запуска от аккаунта Group Managed Service Accounts (gMSA)

Также вы можете создать задание планировщика с нужными настройками из графической консоли. Затем с помощью утилиты schtasks.exe из cmdможно настроить, чтобы оно запускалось от имени Managed Service Account:

schtasks /Change /TN BackupDB /RU "winitpro\gmsaMskSQL1$" /RP ""

Предоставьте учетной записи MSA/gMSA необходимые права доступа к сервису и NTFS разрешения на файловой системе. Например, я добавил учетную запись gMSA в локальную группу Backup Operators на сервере:

Add-LocalGroupMember -Group "Backup Operators" -Member winitpro\gmsaMskSQL1$

добавить gmsa аккаунт в локальную группу на сервере

Для запуска заданий планировщика нужно предоставить учетной записи gMSA права Log on as a batch job. На отдельном компьютере это можно сделать через редактор локальной GPO: gpedit.msc -> Windows Settings -> Security Settings -> Local Policies -> User Rights Assignment. Добавьте в политику учетную запись: winitrpo\gmsaMskSQL1$

Параметр локальной GPO: Log on as a batch job Вход в качестве пакетного задания


Предыдущая статья Следующая статья


Комментариев: 46 Оставить комментарий

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Я не робот( Обязательно отметьте)