Управляемые учетные записи (Managed Service Accounts – MSA) это специальный тип учетных записей Active Directory, которые можно использовать для безопасного запуска служб, приложений и заданий планировщика. Основная их идея в том, что паролем таких учетных записей полностью управляет Active Directory. Для них автоматически генерируется сложный пароль длиной 240 символов, который меняется автоматически (по умолчанию каждые 30 дней). Для аутентификации используется только Kerberos (нет проблем с безопасностью NTLM), интерактивный вход не возможен, пароль не известен никому и не хранится в локальной системе (нельзя извлечь пароль из системного процесса LSASS с помощью mimikatz или аналогичных утилит). Таким образом для запуска службы или автоматических заданий, вам не нужно создавать отдельных сервисных пользователей в AD и управлять их паролями.
Managed Service Accounts появились в Windows Server 2008 R2 (тип объекта msDS-ManagedServiceAccount). Основное их ограничение – такую учетную запись можно использовать только на одном сервере (т.е. их нельзя использовать с кластерными и NLB службами). Поэтому в Windows Server появились групповые учетные записи служб, gMSA — Group Managed Service Accounts (тип msDS-GroupManagedServiceAccount). gMSA аккаунты могут одновременно использоваться на нескольких серверах.
Рассмотрим особенности использования MSA и gMSA для запуска служб и заданий на серверах в Active Directory.
- Требования для использования сервисных аккаунтов MSA/gMSA
- Создаем корневой ключа KDS службы распространения ключей
- Создаем управляемую учётную запись MSA в Active Directory
- Создаем групповую учетную запись gMSA
- Настройка учетных записей MSA/gMSA на серверах
- Запуск служб Windows от имени Managed Service Account
- Запуск задания планировщика от имени сервисной учетной записи /gMSA
Требования для использования сервисных аккаунтов MSA/gMSA
Managed Service Account | Group Managed Service Accoun | |
Уровень домена и леса AD | Не ниже Windows Server 2008 R2 | Не ниже Windows Server 2012 |
KDC | Контроллер домена с включенной службой распространения ключей Microsoft Key Distribution Service (KdsSvc) | |
PowerShell | Для создания и управления сервисными аккаунтами нужно установить модуль Active Directory module for Windows PowerShell | |
.Net Framework | На сервере нужно установить .NET Framework 3.5 или выше | |
Поддерживаемые клиенты | Windows 7/Windows Server 2008 R2 и выше | Windows Server 2012/Windows 8 и выше |
Создаем корневой ключа KDS службы распространения ключей
Прежде, чем приступить к созданию учетной записи MSA/gMSA, нужно выполнить разовую операцию по созданию корневого ключа KDS (KDS root key). Для этого на контроллере домена с правами администратора выполните команду (служба Microsoft Key Distribution Services должна быть установлена и включена):
Add-KdsRootKey –EffectiveImmediately
В этом случае ключ будет создан и доступен для использования через 10 часов, после окончания репликации между контролерами домена.
Add-KdsRootKey –EffectiveTime ((get-date).addhours(-10))
Проверим, что корневой ключ KDS создался успешно:
Get-KdsRootKey
Для проверки ключа используется команда:
Test-KdsRootKey -KeyId (Get-KdsRootKey).KeyId
Создаем управляемую учётную запись MSA в Active Directory
Чтобы создать новую управляемую учетную запись MSA в AD воспользуйтесь командой:
New-ADServiceAccount -Name msaMskSrv1Tasks –RestrictToSingleComputer
По умолчанию MSA и gMSA создаются в корневом контейнере CN=Managed Service Accounts, но вы можете изменить OU с помощью параметра Path.
Привяжите сервисную учетную запись MSA к нужному компьютеру:
$Identity = Get-ADComputer -identity msk-srv01
Add-ADComputerServiceAccount -Identity $identity -ServiceAccount msaMskSrv1Tasks
Откройте консоль
dsa.msc
(ADUC, Active Directory Users and Computers) и проверьте, что в контейнере (OU) Managed Service Accounts появилась новая учетная запись типа msDS-ManagedServiceAccount.
Информацию об MSA аккаунте можно получить с помощью команды:
Get-ADServiceAccount msaMskSrv1Tasks
Создаем групповую учетную запись 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$
Чтобы создать групповую учетную запись Group Managed Service Account (gMSA), используйте команду:
New-ADServiceAccount -name gmsaMskSQL1 -DNSHostName gmsaMskSQL1.winitpro.ru -PrincipalsAllowedToRetrieveManagedPassword MskSQL1 –verbose
Учётная запись gMSA также по умолчанию создается в OU Managed Service Accounts.
Настройка учетных записей MSA/gMSA на серверах
Для использования сервисных аккаунтов MSA/gMSA на целевых серверах или рабочих станциях сначала нужно установить модуль PowerShell для Active Directory:
Add-WindowsFeature RSAT-AD-PowerShell
Установите учетную запись MSA/gMSA на сервере:
Install-ADServiceAccount -Identity gmsaMskSQL1
Проверьте, сервисная учетная запись установлена корректно:
Test-ADServiceAccount gmsaMskSQL1
Если команда вернет True – все настроено правильно.
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
Для проверки работы служб и скриптов от имени сервисной учетной записи MAS не получится использовать стандартный RunAs. Вместо этого воспользуйтесь утилитой PsExec (ранее мы показывали, как использовать psexec для запуска командной строки от имени System).
- Откройте командную строку с правами администратора;
- Выполните команду:
PsExec64.exe -i -u winitpro\gmsaMskSQL1$ -p ~ cmd.exe
Вместо пароля указа знак~
, это значит что пароль нужно получить из AD. - В открывшемся окне cmd выполните команду
whoami
, чтобы убедиться, что консоль запущена от имени аккаунта gMSA. - Проверьте запуск скриптов, программ или служб от имени учетной записи Managed Service Account.
Теперь осталось настроить запуск из-под MSA/gMSA нужных вам служб Windows, заданий Task Scheduler, пулов IIS и т.д.
Запуск служб Windows от имени Managed Service Account
Теперь можно настроить запуск нужной службы Windows из-под сервисной записи MSA/gMSA.
- Откройте консоль
services.msc
; - Откройте свойства нужной службы и перейдите на вкладку Log on;
- Выберите опцию This account и укажите имя MSA аккаунта. В конце имени обязательно указывается символ $ (пароль указывать не нужно);
- Сервисной учетной записи MSA будут автоматически предоставлены права Log On As a Service;
- После сохранения изменений службу нужно перезапустить.
Запуск задания планировщика от имени сервисной учетной записи /gMSA
Вы можете настроить запуск заданий планировщика Windows Task Scheduler от имени сервисной учетной записи gMSA. Это удобно, так как пароли учетной записи gMSA не хранятся в скриптах в явном виде, вам не нужно их шифровать или защищать. При изменении пароля не нужно перенастраивать задание.
Настроить задание для запуска от имени MSA/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
Register-ScheduledTask BackupDB –Action $action –Trigger $trigger –Principal $principal
Аргумент “
-LogonType Password
” означает, что пароль для этой gMSA учетной записи будет получен с контроллера домена.
Также вы можете создать задание планировщика с нужными настройками из графической консоли. Затем с помощью утилиты schtasks.exe можно настроить, чтобы оно запускалось от имени Managed Service Account:
schtasks /Change /TN BackupDB /RU "winitpro\gmsaMskSQL1$" /RP ""
gmsa1Group – это обычная глобальная группа безопасности, в которую включены необходимые сервера, на которые потом будет проинсталирована gmsa1
Собственно это был вопрос, а не констатация факта.
Может быть кто-нибудь пояснит, как связать группу ПК с уч. записью gMSA ?
В нашем примере связь идет через группу gmsa1Group. Т.е. эта группа в AD, в которую включены ПК которые нужно будет связать с групповой учеткой.
Все я разобрался после того как сервера будут добавлены в группу, которая в свою очередь будет «привязана» к gMSA, их необходимо перегрузить для того что бы отобразить их членство в группе.
Т.к. без этого происталировать gMSA на этом сервере не удастся из-за отказа в доступе.
Таким образом не нужно привязывать к gMSA необходимые сервера, а можно привязать группу из серверов, но с одним но:
2. Create and configure the gMSA
http://blogs.technet.com/b/askpfeplat/archive/2012/12/17/windows-server-2012-group-managed-service-accounts.aspx
У меня после запуска службы от имени MSA аккаунта, вкладка Log On (Вход в систему) стала не активной.
Как это можно исправить?
У меня было то же самое на Windows Server 2012 R2, на 2012 — вкладка остается активной. Видимо какая-то недокументированная фича/бага.
Чтобы переключить запуск сервиса на SYSTEM или другой аккаунт придется воспользоваться sc.exe
Подскажите как создать задание в планировщике заданий, на еженедельную перезагрузку ПК от имени MSA?
Я так понял это можно сделать только через PS?
Напрямую из планировщика задание, которо запускается от имени gMSA аккаунта создать нельзя. Но есть небольшой трюк — создаете и настраиваете новое задание через графический интерфейс Task Scheduler от имени просто пользователя, а потом меняете акканунт на gMSA командой
schtasks /change /TN \TaskName /RU DOMAIN\gMSA_account$ /RP
На запрос пароля отсавляете его пустым.
itpro! Пожалуйста добавьте в абзац ««Тонкая» настройка gMSA» мой PS-скрипт для удобного пересоздания текущих существующих задач в планировщике на учётную запись gMSA. Долго искал такой скрипт и не нашел вообще. Очень удобно использовать, т.к. не надо мучится с powershell, а работать через привычный GUI.
#ЕгоркинА.Н. 10:27 28.04.2021
#Gtht*****************
$domain=»corp»
$ObjectClass=»msDS-GroupManagedServiceAccount»
#***************************
clear
Write-host «*********************************************************************»
Write-host «Скрипт перевода задач на служебную учётную запись»
Write-host «Скрипт запускаем на конкретном сервере с правами администратора и, желательно, с доступом к AD для поиска gMSA»
Write-host «Выбираем задачу и затем новую учётную запись gMSA — создастся новая задача и старая перейдёт в disable»
Write-host
Write-host «*********************************************************************»
pause
clear
#Показываем все доступные задачи
Write-host «————————————————————————————————»
Write-host Список всех задач из корня \
Write-host
Get-ScheduledTask -TaskPath «\» -TaskName «*»
[string]$schedule_name = $(read-host «Введите (часть или полное) название задачи, в которой хотите поменять пользователя»)
#Выбираем задачу
$schedule_name_search = $schedule_name+»*»
$tasks_name_sel = Get-ScheduledTask -TaskPath «\» -TaskName $schedule_name_search
Write-host
Write-host Выбрана задача $tasks_name_sel.TaskName
Write-host
#Выбираем gMSA учётную запись
Write-host «————————————————————————————————»
Write-host Список всех gMSA учётных записей в домене Corp
Get-ADObject -LDAPFilter «(&(ObjectClass=$ObjectClass)(name=*))» -Server ‘Corp’ | select Name, ObjectGUId | format-table
[string]$gmsa_name = $(read-host «Введите название сервисной учётной записи (двойной клик на имя левой и двойной клик правой кнопкой)»)
#Проверка что gMSA примаплена к текущему серверу
$gmsa_name_search=$domain+»\»+$gmsa_name+»$»
$gmt = Test-ADServiceAccount -Identity $gmsa_name
if ($gmt -eq $True) {
Write-host
Write-host «Успешно — учетная запись $gmsa_name найдена и привязана к этому компьютеру»
Write-host «————————————————————————————————»
}
else {
Write-host
Write-host «Иными словами, учетная запись $gmsa_name не привязана к этому компьютеру:»
Write-host «или вы ошиблись в выборе учётной записи, или кто-то забыл про команду»
Write-host «Install-ADServiceAccount -Identity $gmsa_name»
Write-host
Write-host «при этом, учетная запись gMSA создается следующей командой от имени доменного администратора:»
Write-host «New-ADServiceAccount -Name имя_gMSA_учётной_записи -DNSHostName hq-dc01 -PrincipalsAllowedToRetrieveManagedPassword имя_целевого_сервера$»
Write-host «————————————————————————————————»
pause
exit
}
pause
Write-host «————————————————————————————————»
#Экспортируем выбранную задачу в формате xml в переменную schedule
$schedule = Export-ScheduledTask -TaskName $schedule_name
#Заменяем старую учётную запись на новую gMSA
$schedule_user_bad = $schedule | findstr «UserId»
$schedule_user_bad = $schedule_user_bad.Replace(» «,»»)
$schedule_user_good = »+$gmsa_name_search+»
$schedule_good = $schedule.Replace($schedule_user_bad,$schedule_user_good)
#Заменяем тип запуска задачи на корректный
$schedule_user_bad = $schedule | findstr «LogonType»
$schedule_user_bad = $schedule_user_bad.Replace(» «,»»)
$schedule_user_good = ‘Password’
$schedule_good = $schedule_good.Replace($schedule_user_bad,$schedule_user_good)
#Удаляем тип запуска «с наивысшими привилегиями»
$schedule_Run_level = ‘ HighestAvailable’
$schedule_good = $schedule_good.Replace($schedule_Run_level,»»)
#Переводим старую задачу в Disable
Disable-ScheduledTask -TaskName $schedule_name
#Регистрируем новую задачу с припиской gMSA в названии
Register-ScheduledTask -Xml ($schedule_good) -TaskName $schedule_name»_gMSA»
Write-host «Работа скрипта завершена успешно. Но, это не означает корректность работы самой задачи в части наличия прав на отработку полезной нагрузки»
Write-host
#ЕгоркинА.Н. 10:27 28.04.2021
#peremennye*****************
$domain="corp"
$ObjectClass="msDS-GroupManagedServiceAccount"
#***************************
clear
Write-host "*********************************************************************"
Write-host "Скрипт перевода задач на служебную учётню запись"
Write-host "Скрипт запускаем на конкретном сервере с правами администратора и, желательно, с доступом к AD для поиска gMSA"
Write-host "Выбираем задачу и затем новую учётную запись gMSA - создастся новая задача и старая перейдёт в disable"
Write-host
Write-host "*********************************************************************"
pause
clear
#Показываем все доступные задачи
Write-host "------------------------------------------------------------------------------------------------"
Write-host Список всех задач из корня \
Write-host
Get-ScheduledTask -TaskPath "\" -TaskName "*"
[string]$schedule_name = $(read-host "Введите (часть или полное) название задачи, в которой хотите поменять пользователя")
#Выбираем задачу
$schedule_name_search = $schedule_name+"*"
$tasks_name_sel = Get-ScheduledTask -TaskPath "\" -TaskName $schedule_name_search
Write-host
Write-host Выбрана задача $tasks_name_sel.TaskName
Write-host
#Выбираем gMSA учётную запись
Write-host "------------------------------------------------------------------------------------------------"
Write-host Список всех gMSA учётных записей в домене Corp
Get-ADObject -LDAPFilter "(&(ObjectClass=$ObjectClass)(name=*))" -Server 'Corp' | select Name, ObjectGUId | format-table
[string]$gmsa_name = $(read-host "Введите название сервисной учётной записи (двойной клик на имя левой и двойной клик правой кнопкой)")
#Проверка что gMSA примаплена к текущему серверу
$gmsa_name_search=$domain+"\"+$gmsa_name+"$"
$gmt = Test-ADServiceAccount -Identity $gmsa_name
if ($gmt -eq $True) {
Write-host
Write-host "Успешно - учетная запись $gmsa_name найдена и привязана к этому компьютеру"
Write-host "------------------------------------------------------------------------------------------------"
}
else {
Write-host
Write-host "Иными словами, учетная запись $gmsa_name не привязана к этому компьютеру:"
Write-host "или вы ошиблись в выборе учётной записи, или кто-то забыл про команду"
Write-host "Install-ADServiceAccount -Identity $gmsa_name"
Write-host
Write-host "при этом, учетная запись gMSA создается следующей командой от имени доменного администратора:"
Write-host "New-ADServiceAccount -Name имя_gMSA_учётной_записи -DNSHostName hq-dc01 -PrincipalsAllowedToRetrieveManagedPassword имя_целевого_сервера$"
Write-host "------------------------------------------------------------------------------------------------"
pause
exit
}
pause
Write-host "------------------------------------------------------------------------------------------------"
#Экспортируем выбранную задачу в формате xml в переменную schedule
$schedule = Export-ScheduledTask -TaskName $schedule_name
#Заменяем старую учётную запись на новую gMSA
$schedule_user_bad = $schedule | findstr "UserId"
$schedule_user_bad = $schedule_user_bad.Replace(" ","")
$schedule_user_good = ''+$gmsa_name_search+''
$schedule_good = $schedule.Replace($schedule_user_bad,$schedule_user_good)
#Заменяем тип запуска задачи на корректный
$schedule_user_bad = $schedule | findstr "LogonType"
$schedule_user_bad = $schedule_user_bad.Replace(" ","")
$schedule_user_good = 'Password'
$schedule_good = $schedule_good.Replace($schedule_user_bad,$schedule_user_good)
#Удаляем тип запуска "с наивысшими привилегиями"
$schedule_Run_level = ' HighestAvailable'
$schedule_good = $schedule_good.Replace($schedule_Run_level,"")
#Переводим старую задачу в Disable
Disable-ScheduledTask -TaskName $schedule_name
#Регистрируем новую задачу с припиской gMSA в названии
Register-ScheduledTask -Xml ($schedule_good) -TaskName $schedule_name"_gMSA"
Write-host "Работа скрипта завершена успешно. Но, это не означает корректность работы самой задачи в части наличия прав на отработку полезной нагрузки"
Write-host
Спасибо за инфу, идея хорошая!
Обязательно попробую твой скрипт в деле и отпишусь о результатах.
Обновил статью, добавил упоминание про ваш скрипт. Действительно, удобно.
Спасибо!
выдает вот такую ошибку
egister-ScheduledTask : XML-код задачи содержит значение в неправильном формате или за пределами допустимого диапазона.
(9,29):Principal:medibor\msaSrv2Tasks$
Password
D:\Admin\sheduled_2.ps1:80 знак:1
+ Register-ScheduledTask -Xml ($schedule_good) -TaskName $schedule_name ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (PS_ScheduledTask:Root/Microsoft/...S_ScheduledTask) [Register-ScheduledTask], CimExcept
ion
+ FullyQualifiedErrorId : HRESULT 0x80041318,Register-ScheduledTask
это потому что в конечном xml:
medibor\msaSrv2Tasks$
-Password
я так понимаю, там должно быть и
Здравствуйте. «Теперь» (на момент написания ответа) можно. Правда немного через ж0*у
Или лучше так: Set-ScheduledTask -TaskName $TaskFullPath -Principal $Principal. $Principal как в статье выше.
Есть ли срок действия у корневого ключа KDS, и если да — то как его обновить без угрозы простоя сервисов?
-DNSHostName dc1.winitpro.ru , где dc1.winitpro.ru – имя DNS сервера
из документации
-DNSHostName
Specifies the DNS host name of Service Account.
Не освещена проблема «двойного прыжка» (double-hop) при установке учётной записи на сервер через «PSRemouting», ходить для этого на сервер через RDP как минимум странно да и просто не удобно если сервер не один.
schtasks /Change /TN BackupDB /RU «winitpro\gmsaMskSQL1$» /RP «»
Не работает в случае Windows Server 2008R2. Выдаёт ошибку:
ERROR: Logon failure: unknown user name or bad password.
Как это можно победить?
Создать через PowerShell тоже не удаётся — командлеты ScheduledTaskAction в Windows Server 2008R2, судя по всему, не поддерживаются.
gmsa появились в windows server 2012
в 2008 r2 по идее должны работать обычны MSA аккаунты. Но на 2008 не пробовал, да и не осталось уже таких хостов.
Добрый день, не подскажете в чем может быть проблема при выполнении TaskScheduler из под gMSA, не происходи отправка почтового сообщения прописанного в скрипте, при выполнении этого же скрипта из под обычной учетной записи все работает прекрасно.
Отлаживайте скрипт, внимательно продумайте его логику, что и под кем он делает.
Может быть проблема с аутентификацией (от чьего имени отправляется файл) или просто у пользователя gMSA нет доступа к службе/файлу.
Например, exchange может запрешать отправку от пользователей без ящика или еще тчо-то подобное.
Здравствуйте. Команда проверки gMSA возвращает true даже без Install-ADServiceAccount на целевом сервере. Возникает вопрос, так действительно ли нужно выполнять команду установки для УЗ gMSA или это просто какой-то пережиток УЗ MSA?
Довольно странно, ведь не логично автоматически кэшировать все аккаунты gmsa на сервере.
Не могла эта учетка быть установлена кем-то до вас ранее? И какая версия Windows Server?
А вы проверьте это сами и убедитесь в этом.
Test-ADServiceAccount без Install-ADServiceAccount у меня на чистом компьютере возвращает False.
а чистый компьютер связан с gmsa? никогда не делал Install-ADServiceAccount
Поправлю сам себя. Логика sMSA и gMSA разная. Все операции на клиенте типа Install-ADServiceAccount и им подобные работают только с sMSA, с gMSA они никак не связаны и использоваться не должны.
Сегодня тоже заметил такое же поведение на чистом Windows Server 2022.
На новом хосте сразу установились ВСЕ gMSA аккаунты из AD.
Они видны в профилях пользователей и команда возвражает True для любого аккаунта:
Test-ADServiceAccount gmsamsksql1
Я пока не понял это баг или фича такая 🙂
Прошу удалить комент 🙂 это не так.
Я не на том хосте смотрел )
У меня после запуска службы от имени MSA аккаунта, вкладка Log On (Вход в систему) стала не активной. Как это можно исправить?
Подскажите команду как можно исправить
В какой службе? так и должно быть. Если очень надо, то
в cmd (от администратора) sc managedaccount false. Включить обратно через true.
или другой способ, через реестр
Key: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\
Value: ServiceAccountManaged
Datatype: REG_BINARY
01 00 00 00 (включено)
00 00 00 00 (выключено)
порезалось…
sc managedaccount [servise_name] false
Key: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\[servise_name]
Я понимаю, что тема sMSA/gMSA сложная, но статья требует кардинальной переработки, так как в ней много ошибок и нарушена логика управления MSA.
Проделав массу тестов и погрузившись с головой могу сказать, что правильно так.
Логика sMSA:
1. Создание sMSA в AD: New-ADServiceAccount —RestrictToSingleComputer
2. Привязка Computer к sMSA: Add-ADComputerServiceAccount. Привязка идёт за счёт атрибута msDS-HostServiceAccount в УЗ Computer.
3. Установка sMSA на Computer: Install-ADServiceAccount
Логика gMSA:
1. Создание gMSA в AD: New-ADServiceAccount —PrincipalsAllowedToRetrieveManagedPassword
. Точка, больше ничего. Привязка идёт через атрибут msDS-GroupMSAMembership в УЗ gMSA.
Вот тут важный момент. RestrictToSingleComputer и PrincipalsAllowedToRetrieveManagedPassword взаимоисключаемые, либо одно, либо другое.
В sMSA механизм такой: sMSA установленная на Computer лезет в УЗ своего компьютера в атрибут msDS-HostServiceAccount, получает с него DN AD объекта sMSA и уже обращается к нему.
В gMSA механизм другой: в УЗ gMSA а атрибуте msDS-GroupMSAMembership перечисляется список Computer имеющих права Allow/Deny на извлечение пароля от gMSA.
Рекомендация. В PrincipalsAllowedToRetrieveManagedPassword лучше указывать не Computer List, а Security Group, и управлять уже составом группы. И удобно и надежно.
В этом месте серьёзная ошибка: «Аргумент “ -LogonType Password ” означает, что пароль для этой gMSA учетной записи будет получен с контроллера домена.» LogonType Password означает, что пароль должен быть получен и представлен на момент регистрации TaskScheduler. Этот тип имеют все задания с указанным именем пользователя. Проверяем по первоисточнику: «TASK_LOGON_PASSWORD — Use a password for logging on the user. The password must be supplied at registration time.» А то, что пароль будет браться из вне указывает знак $ на конце УЗ. То, что искать его нужно не локально, а в AD указывает NetBiosDomainName в имени УЗ.
Добрый день а подскажите как добавить gmsa в доменные администраторы или локальные админы на сервере? Пытаешься добавить эту УЗ но в поиске не находит её
У меня находит прекрасно и добавляется как через GUI, так и PS. Если через GUI, то проверьте, чтобы поиск был в формате domain\gmsa$ (доллар на конце обязательно), а в Object Types был выбран Service Accounts.
Как правильно — создавать одну gMSA для всех служб всех серверов или несколько делать?
По Best Practice правильно использовать ролевую модель. Например: 1) gMSA01 включена для серверов Exchange, имеет права для доступа к файлам и чистит на них логи; 2) gMSA02 включена для на File Servers и осуществляет на них обслуживание файлами (чистка, репорты, перекладчик, синхронизатор и т.п.); 3) сложные роли: скрипт получает данные с AD, по ним что-то правит в Exchange, результат кладёт на FileServer.
Мне кажется тут ошибка:
«Можно изменить периодичность смены пароля (по умолчанию 30 дней):
Set-ADServiceAccount gmsaMskSQL1 -ManagedPasswordIntervalInDays 60»
Нет такого параметра. Он есть только у New-ADServiceAccount. Таким образом период смены пароля не изменить у созданной gMSA.
Да, тут ошибка, тут вообще очень много ошибок. Статья представляет больше компиляцию из других источников нежели личный опыт. Параметр ManagedPasswordIntervalInDays в PS 12/16/19/22 присутствует только в командлете New-ADServiceAccount и задаётся только на стадии создания. Я не знаю зачем нужно менять стандартный период, практической ценности в этом нет. Из офф документации:
«Specifies the number of days for the password change interval. If set to 0 then the default is used. This can only be set on object creation. After that the setting is read only. This value returns the msDS-ManagedPasswordInterval of the group managed service account object.»
Подскажите, какая версия домена (леса) всё таки нужна для sMSA/gMSA ? У меня сейчас и домен и лес 2003 (контроллеры 2003-2012r2), но присутствует и CN Managed Service Accounts и атрибут msDS-HostServiceAccount у учёток компов. Также Test-KdsRootKey -KeyId (Get-KdsRootKey).KeyId выдаёт True.
Будет ли работать эта фича или не пытаться даже?
Вообще, насколько я понял, для sMSA уровень леса/домена не играет роли. Но должно быть выполнено пару требований:
1. Обрабатывать sMSA будут DC только с Windows 2008R2 и выше.
2. Лес/Домен должны быть подготовлены через «adprep /forestprep» и «adprep /domainprep» c ОС максимальной версии, в твоём случае это Win2012R2.
3. Минимальная ревизия домена должна быть не меньше 11.
Проверь текущую ревизию так:
$DomainDN = (Get-ADDomain).DistinguishedName
$AdUpdDN = «CN=ActiveDirectoryUpdate,CN=ForestUpdates,CN=Configuration,$DomainDN»
Get-ADObject -Identity $AdUpdDN -Properties Revision | select Name, Revision
Если всё так, то стоит пытаться. Я бы попытался хотя бы ради опыта.
Добрый день. каким способом можно предоставить Сервисной УЗ MSA\gMSA предоставить доступ к общему п\я для отправки от имени?
Насколько я помню, для gMSA учетки нельзя создать ящик, соотвественно не поучится дать доступ на sendas.
Всё верно. У gMSA не существует AD атрибутов mail и mailNickname, как и любых других типа msExch, поэтому Exchange их в качестве Recipient рассматривать не может..