===== Создание Key Distribution Services (KDS) Root Key =====
{{:microsoft-windows:windows-server-2012-r2:adds:how-to-use-managed-service-accounts-msa-and-group-managed-service-account-gmsa:pasted:20181031-143652.png }} Для возможности использования учётных записей **Group Managed Service Account** (**gMSA**) в инфраструктуре Active Directory должен быть сгенерирован ключ **Key Distribution Services** (**KDS**) **Root Key**. Некоторые подробности о KDS Root Key можно получить в документе [[https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-r2-and-2012/jj128430(v%3dws.11)|Create the Key Distribution Services KDS Root Key]].
\\
==== Необходимый уровень привилегий ====
Создание Root Key требует полномочия уровня **Domain Administrator** (в корневом домене верхнего уровня) или **Enterprise Administrator**. Если требуется создание ключа для администратора в дочернем домене, то на время учётную запись с правами **Domain Administrator** из дочернего домена придётся добавить в группу **Enterprise Admins** в корневом домене (после изменения уровня прав не забываем перелогиниться на контроллере домена). Определиться с необходимыми полномочиями важно на самом раннем этапе, так как в случае нехватки полномочий при попытке создания Root Key мы можем получить трудную для понимания ошибку типа ''Add-KdsRootKey : The request is not supported. (Exception from HRESULT: 0x80070032)''
{{ :microsoft-windows:windows-server-2012-r2:adds:how-to-use-managed-service-accounts-msa-and-group-managed-service-account-gmsa:pasted:20181031-152030.png }}
\\
==== Создание KDS Root Key ====
Создадим Root Key, разрешив его использование через час после создания, чтобы дать время для репликации ключа между всеми контроллерами Active Directory.
Для начала проверим в AD информацию о всех имеющихся ключах с помощью командлета **Get-KdsRootKey**.
Если ключа нет, создадим его с помощью командлета **Add-KdsRootKey**.
Специфика работы ключа KDS Root Key заключается в том, что, [[https://docs.microsoft.com/en-us/windows-server/security/group-managed-service-accounts/create-the-key-distribution-services-kds-root-key|согласно документа]] созданный ключ можно будет использовать на всех контроллерах домена не ранее, чем __через 10 часов__ после даты, хранимой в атрибуте **msKds-UseStartTime**. Поэтому, чтобы ускорить возможность использования ключа, мы можем сдвинуть дату в прошлое, например, на 9 часов, чтобы ожидание начала действия ключа длилось только 1 час, вместо 10. Таким образом, за счёт этого периода ожидания мы дадим возможность разреплицировать созданный ключ на все контроллеры домена.
Add-KdsRootKey -EffectiveTime ((Get-Date).AddHours(-9))
{{ :microsoft-windows:windows-server-2012-r2:adds:how-to-use-managed-service-accounts-msa-and-group-managed-service-account-gmsa:pasted:20181031-152557.png }}
\\
==== Проверка KDS Root Key ====
Если ключ уже был создан ранее в домене, то мы можем проверить валидность его формата командой
Test-KdsRootKey -KeyId (Get-KdsRootKey).KeyId
В случае, если ключ был создан только что, обратим внимание на дату и время, что отображаются в **EffectiveTime**. Это время должно быть на 9 часов меньше от времени, когда генерировался ключ, то есть так как мы и указали в параметре **EffectiveTime** командлета **Add-KdsRootKey**
{{ :microsoft-windows:windows-server-2012-r2:adds:how-to-use-managed-service-accounts-msa-and-group-managed-service-account-gmsa:pasted:20181031-152715.png }}
В оснастке **Active Directory Sites and Services** включим режим отображения узла служб: "**Show Services Node**"
{{ :microsoft-windows:windows-server-2012-r2:adds:how-to-use-managed-service-accounts-msa-and-group-managed-service-account-gmsa:pasted:20181031-152758.png }}
В служебном контейнере **Services** > **Group Key Distribution Service** > **Master Root Keys** найдём объект типа **msKds-ProvRootKey** с идентификатором, который показал нам вывод PS-командлета создания ключа.
{{ :microsoft-windows:windows-server-2012-r2:adds:how-to-use-managed-service-accounts-msa-and-group-managed-service-account-gmsa:pasted:20181031-152921.png }}
В значениях атрибутов **msKds-CreateTime** и **msKds-UseStartTime** увидим время создания объекта и время начала возможности его использования. Атрибут **msKds-DomainID** содержит имя сервера, на котором был создан ключ. Чтобы преобразовать значения даты/времени из атрибутов типа **Large Integer**, как например в **msKds-UseStartTime**, можем воспользоваться PS-конструкцией типа:
$StartTime = "131824874973370737"
[DateTime]::FromFiletime([Int64]::Parse($StartTime))
{{ :microsoft-windows:windows-server-2012-r2:adds:how-to-use-managed-service-accounts-msa-and-group-managed-service-account-gmsa:pasted:20181031-153022.png }}
В данном примере, преобразовывая значение атрибута **msKds-UseStartTime**, мы получим то самое значение **EffectiveTime**, которое выводится командлетом **Get-KdsRootKey**.
\\
==== Несколько KDS Root Key ====
Процедура создания Root Key делается один раз для леса Active Directory. Если командлет **Add-KdsRootKey** выполнялся несколько раз, то может получиться так, что будет создано несколько ключей. Прямого запрета использования такой конфигурации я найти не смог, но и упоминание того, что ключ желательно иметь только мне попадалось на форумах TechNet (ссылку к сожалению не сохранил).
----
Проверено на следующих конфигурациях:
^ Версия ОС ^
| Windows Server 2012 R2 Standard EN (6.3.9600) |
----
{{:user:blogroot.png?50&nolink |}} Автор первичной редакции:\\ [[user:blogroot|Алексей Максимов]] \\ Время публикации: 30.10.2018 17:17
{{tag>Microsoft "Windows Server" "Windows Server 2012 R2" ADDS "Active Directory" gMSA "Group Managed Service Account" PowerShell "Key Distribution Services" KDS "Root Key" "Master Root Key" "Group Key Distribution Service"}}
~~DISCUSSION~~