Управляемые служебные учетные записи (Managed Service Accounts, MSA)

 

Автор - Нед Пайл (https://blogs.technet.com/b/askds/archive/2009/09/10/managed-service-accounts-understanding-implementing-best-practices-and-troubleshooting.aspx)

 

Сегодня я хочу представить вашему вниманию одну из новых фишек Windows Server 2008 R2/Windows 7  - управляемые служебные учетные записи.

Что это такое и для чего они вообще нужны, эти управляемые записи?

 MSA - это специальные учетные записи, призванные упростить администрирование и повысить безопасность систем. Основным отличием MSA от существующих служебных записей является управление паролями и SPN этих записей при помощи Windows. То есть, когда придет время менять пароль учетной записи, управляющей некоей службой, не придется тормозить службу, вручную лезть в свойства учетной записи и менять пароль, после чего снова запускать службу. Все будет делаться автоматически, без перебоев. Соответственно, мы получаем более надежную и безопасную систему.

Несколько подробнее об общем принципе работы MSA

В схеме Windows Server 2008 R2 введен новый класс объекта: msDS - ManagedServiceAccount. MSA обладает интересной структурой наследования в атрибуте objectClass:

Computer
msDS - ManagedServiceAccount
organizationalPerson
Top
User

Объект является одновременно компьютером и пользователем, почти как учетная запись компьютера. Однако в отличие от нее, класс объекта personздесь отсутствует – вместо него установлен класс msDS - ManagedServiceAccount. MSA наследует от родительского объекта класс “Computer”, но также является и пользователем. Никаких новых атрибутов от обновления схемы до уровня Win2008 R2  MSA не получают.

Обновление пароля у MSA, являющегося псевдокомпьютерным объектом, происходит аналогично смене пароля компьютеров. Пароль меняется синхронно со сменой пароля компьютера (по умолчанию – раз в 30 дней). Управлять сменой пароля можно при помощи следующих параметров реестра (тип DWORD):

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NetLogon\Parameters

DisablePasswordChange= [0 либо 1, если параметр отсутствует, принимается равным 0]
MaximumPasswordAge= [1-1,000,000 в днях, если параметр отсутствует, принимается равным 30]

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

Все MSA по умолчанию создаются в контейнере CN = ManagedServiceAccounts , DC =< domain >, DC =< com > . Просмотреть его можно, настроив отображение дополнительных возможностей в консоли ADUC:

 Однако, это всего лишь необязательное дополнение – основное управление MSA осуществляется при помощи PowerShell.

MSA автоматически поддерживают свои имена участника-службы (SPN) Kerberos, могут быть привязаны только к одному компьютеру и поддерживают делегирование. На нижеприведенном кадре сетевого обмена показан правильно настроенный MSA относительно Kerberos:

 

Разворачиваем MSA

Требования к ОС и лесу

Обязательные требования для MSA таковы:

  • Наличие Active Directory
  • Уровень схемы – Windows Server 2008 R2
  • Службы, которые будут выполняться от имени MSA, должны размещаться на компьютерах под управлением Windows Server 2008 R2 либо Windows 7 – использование MSA с более ранними версиями ОС невозможно.
  • Наличие на компьютерах, работающих с MSA PowerShell, AD PowerShell (входит в состав RSAT), и .Net 3.5x Framework

Что до уровня леса, то особенных ограничений на него нет.

С уровнем домена, однако, все не так гладко –  если он отличен от Server 2008 R2, часть функционала MSA теряется, то есть:

  • Уровень Server 2008 R2 –  полностью работоспособны автоматическое управление паролями и SPN.
  • Уровень Server 2008 и ниже – автоматическое управление SPN перестает работать и обслуживание возлагается на администраторов. Управление паролями работает как ни в чем не бывало.

Развертывание

MSA разворачивается в 4 этапа:

1. Создаем MSA в AD.

2. Привязываем MSA к компьютеру в AD.

3. Устанавливаем MSA на компьютер из шага 3.

4. Настраиваем службы на использование MSA

Чтобы создать MSA, запускаем PowerShell – на сервере или на Windows 7 с установленным RSAT. Команды, естественно, выполняем с повышенными привилегиями.

1. Запускаем PowerShell.

2. Импортируем модуль AD module:

Import-Module ActiveDirectory

3. Создаем MSA:

New-ADServiceAccount -Name < уникальное имя учетной записи MSA> -Enabled $true

 
 

Замечание:  на текущий момент имя MSA не может быть длиннее 15 символов. В противном случае вам будет выдана ошибка:

Install-ADServiceAccount : Cannot install service account. Error Message: 'Unknown error (0xc0000017)'.At line:1 char:25+ install-adserviceaccount <<<< -identity SVC_SQL01_LongName + CategoryInfo : WriteError: (SVC_SQL01_LongName:String) [Install- ADServiceAccount], ADException + FullyQualifiedErrorId : InstallADServiceAccount:PerformOperation:Install ServiceAcccountFailure,Microsoft.ActiveDirectory.Management.Commands.InstallADServiceAccount

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

4.   Привязываем созданный MSA к целевому компьютеру в AD:

Add - ADComputerServiceAccount - Identity <компьютер, к которому привязываем MSA > - ServiceAccount <Учетная запись MSA , созданная на шаге 3>

 5. Заходим на компьютер, к которому привязали MSA. Проверяем наличие следующих компонентов (скриншоты даны для Server 2008 R2)::

  • Active Directory Module for Windows PowerShell
  • .NET Framework 3.5.1

 

6. Запускаем PowerShell.

7. Импортируем модуль AD:

Import-Module ActiveDirectory

8. Устанавливаем MSA:

Install-ADServiceAccount -Identity < учетная запись MSA , созданная на шаге 3>


  

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

9. Ассоциируем MSA со службами:.

Через графический интерфейс:

a. Запускаем services . msc.

b. Редактируем свойства службы.

c. На вкладке LogOn  в поле “ThisAccount” вписываем имя нашего MSA в формате domain \ name $ (значок $ после имени критичен!). Например, если имя MSA “AskDS”  в домене “contoso.com”, запись будет выглядеть вот так:

contoso \ askds $

d. Из полей PasswordиConfirmpassword удаляем все данные – это важно!

 

e. Нажимаем Apply и Ok; появится сообщение “Logon as a Service Right granted”:

 

f. Запускаем службу. Все должно пройти гладко.

 

 

При помощи PowerShell :

a. Запускаем PowerShell.

b. Вставляем образец скрипта в текстовый файл:

# Sample script for setting the MSA password through PowerShell # Provided "AS IS" with no warranties, and confers no rights. # See https://www.microsoft.com/info/cpyright.mspx

# Edit this section:

$MSA="contoso\askds$ " $ServiceName="'testsvc'"

# Don't edit this section:

$Password=$null $Service=Get-Wmiobject win32_service -filter "name=$ServiceName" $InParams = $Service.psbase.getMethodParameters("Change") $InParams["StartName"] = $MSA $InParams["StartPassword"] = $Password $Service.invokeMethod("Change",$InParams,$null)

c. Заменяем значения, выделенные красным, на корректные имена MSA (не забываем про значок $) и службы.

d. Сохраняем файл под именем MSA . ps1.

e. В консоли PowerShell вызываем политику выполнения скриптов:

Get-ExecutionPolicy

  

f. Устанавливаем политику в режим дистанционного подписывания:

Set-ExecutionPolicy remotesigned

g. Запускаем скрипт:


 

h. Возвращаем политику выполнения в исходное состояние (у меня было restricted):

 

Удаление

Удаление MSA происходит в два этапа:

1. При помощи  командлета удаляем MSA с локального компьютера:

Remove-ADServiceAccount –identity < имя MSA>


  

2. При желании удаляем MSA из AD. Если нужно только изменить привязку MSA, этот шаг пропускаем:

Remove - ADComputerServiceAccount Identity <компьютер, к которому MSA был привязан> - ServiceAccount <имя MSA >

 

 

Членство в группах

Командлеты Set - ADServiceAccount и New - ADServiceAccountдля включения MSA в группы не годятся. Для этой цели придется использовать консоль ADUC либо командлет Add - ADGroupMember.

AD Users and Computers:

1. Запускаем DSA.MSC.

2. Выбираем группу ( не MSA).

3. Добавляем MSA через вкладку Members:


 

PowerShell :

1. Запускаем PowerShell.

2. Выполняем:

Add - ADGroupMember "<группа>" "< DNMSA > "

Например:


 

Замечание :  используйте  различающееся имя (DN) MSA; в противном случае Add - ADGroupMember вернет ошибку cannotfindobjectwithidentity . Не пытайтесь использовать команду NETGROUP – она не умет определять MSA.

Ограничения

Управляемые служебные учетные записи весьма полезны в большинстве служебных сценариев. Однако, как и везде, здесь есть свои ограничения, которые крайне желательно знать, чтобы в дальнейшем сэкономить время.

  • MSA не могут работать с несколькими компьютерами – MSA привязывается к одному компьютеру и не может быть установлен более чем на один компьютер. На практике это означает, что MSA нельзя применять для:
    • Узлов кластера
    • Балансировки  нагрузки с проверкой подлинности посредством Kerberos для группы веб-серверов.

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

Ключевой момент: На один компьютер можно привязать сколь угодно много MSA. Так что, если у вас есть приложение, использующее, скажем, пять служб, можно как назначить один MSA для всех пяти, так и по одному MSA для каждой службы.

  • Поддержка MSA определяется компонентом, а не операционной системой. – То, что ваша ОС поддерживает MSA, еще не значит, что MSA поддерживается службой, для которой вы хотите его использовать. Так что если у вас не получится привязать MSA к SQL, и поддержка скажет вам «Мы не поддерживаем MSA в версии номер такой-то» - это так и есть, и остается лишь дожидаться выхода версии, в которой будет поддержка MSA.

Решение проблем

В большинстве случаев ошибки MSA легко читаемы и понимаемы, однако есть несколько ошибок, с которыми люди сталкиваются весьма часто:

Ошибка : Error 1069: The service did not start due to a logon failure.

Причина: Как правило, появляется если MSA отключен. Включите его при помощи командлета  Set - ADServiceAccount.

Ошибка : Duplicate Backlink. The service account 'AskDS2' has backlinks to computer 'CN=2008R2-F-05,CN=Computers,DC=contoso,DC=com'. This add operation will potentially disable service accounts installed on the other computer. Cannot install service account. Error Message: 'Unknown error (0xc000005a)

Причина: Попытка привязать уже привязанный MSA к другому компьютеру Ошибка указывает на сервер (в данном примере 2008r2-f-05), который в данный момент использует MSA. Удалите MSA с этого компьютера и отвяжите его прежде, чем привязывать к другому компьютеру.

Ошибка : Add-ADComputerServiceAccount : The object could not be found on the server.

Причина: указан некорректный идентификатор MSA, и PowerShell не может его найти. MSA мог быть удален, или указано неверное имя.

Ошибка: Please enter a valid password.

Причина: При редактировании свойств службы на вкладке LogOnне был очищены поля пароля. См. ранее приведенные указания по настройке.

Ошибка : The account name is invalid or does not exist, or the password is invalid for the account name specified.

Причина: Как правило, происходит из-за того, что после имени на вкладке LogOn в свойствах службы не был написан знак $. Также эта ошибка может появиться  из-за банальной опечатки в имени учетной записи или указания неверного имени домена.

Дополнительная информация

Получить дополнительную информацию о MSA можно на следующих ресурсах:

Дерзайте – вы талантливы :-)