Создание Service Principal Name (SPN) и keytab-файла для сервисной учетной записи в домене под управлением Microsoft Active Directory
Service Principal Name (SPN) и keytab-файл используются для аутентификации по протоколу Kerberos.
Service Principal Name (SPN) или имя принципала — это уникальное имя сервиса, которое привязывается к учетной записи сервиса в домене Microsoft Active Directory. SPN используется для идентификации сервиса, к которому пользователи хотят получить доступ.
Keytab-файл содержит пары ключей и имен принципалов, которые используются для аутентификации в системе Kerberos. Этот файл обычно хранится на сервере сервиса. Когда сервис запускается, он использует информацию из keytab-файла для аутентификации в системе Kerberos без необходимости ввода пароля.
Перед началом работы задайте в произвольной форме следующие значения:
-
имена хостов отдельно для каждого из модулей; например:
-
«Кабинет администратора» —
admin-console.osmaks.mycompany.com; -
«Магазин приложений» —
application-shop.osmaks.mycompany.com;
-
-
имя домена; например:
DEMO.OSMAKS.INNO.TECH; -
имя сервисной учетной записи; например:
osmax_backend_svc.
По умолчанию Microsoft Active directory позволяет поместить в keytab-файл только один SPN, однако этого достаточно для работы единого бэкенд-сервиса с разными вложенными сервисами на различных URL. Поэтому для успешной интеграции в keytab-файл достаточно поместить SPN от модуля «Кабинет администратора», на котором будет успешно функционировать также модуль «Магазин приложений» из состава бэкенд-сервиса Осмакс.
Отключение устаревших типов шифрования в оснастке контроле домена Active Directory
-
Перейдите в Control Panel > Administrative tools > Local Security Policy.
-
В открывшемся окне перейдите в раздел Local Policies > Security Options и измените значение параметра
Network security: Configure encryption types allowed for Kerberos. -
В отображаемом списке протоколов шифрования отключите устаревший
RC4_HMAC_MD5и включите остальные.
Создание технической учетной записи пользователя, входящей в группу Domain Users
-
Перейдите в Control Panel > Administrative tools > Active Directory Users and Computers.
-
В требуемой директории домена создайте нового пользователя с определенным именем (например,
osmax_backend_svc).Для созданной учетной записи рекомендуется задать постоянной пароль и отключить истечение его срока действия. -
В свойствах созданной учетной записи на вкладке Account активируйте опции This account supports Kerberos AES 128 bit encryption и This account supports Kerberos AES 256 bit encryption.
Создание Service Principal Name (SPN)
| Все команды выполняются в PowerShell из под учетной записи с правами администратора домена. |
-
Для каждого из URL сервисов («Кабинет администратора» и «Магазин приложений») создайте SPN с полным доменным именем, выполнив команду:
setspn -A HTTP/<host-name>@<domain-name> <service-account>
Пример команды:
setspn -A HTTP/admin-console.osmaks.mycompany.com@DEMO.OSMAKS.INNO.TECH osmax_backend_svc
Пример вывода:
Checking domain DC=demo,DC=osmaks,DC=inno,DC=tech Registering ServicePrincipalNames for CN=osmax_backend_svc,CN=Users,DC=demo,DC=osmaks,DC=inno,DC=tech HTTP/admin-console.osmaks.mycompany.com@DEMO.OSMAKS.INNO.TECH Updated object -
Для каждого из URL сервисов («Кабинет администратора» и «Магазин приложений») создайте SPN с коротким именем, выполнив команду:
setspn -A HTTP/<host-name> <service-account>
Пример команды:
setspn -A HTTP/admin-console.osmaks.mycompany.com osmax_backend_svc
Пример вывода:
Checking domain DC=demo,DC=osmaks,DC=inno,DC=tech Registering ServicePrincipalNames for CN=osmax_backend_svc,CN=Users,DC=demo,DC=osmaks,DC=inno,DC=tech HTTP/admin-console.osmaks.mycompany.com Updated object -
Выполните проверку созданных SPN:
setspn -L <service-account>
Пример команды:
setspn -L osmax_backend_svc
Пример вывода:
Registered ServicePrincipalNames for CN=osmax_backend_svc,CN=Users,DC=demo,DC=osmaks,DC=inno,DC=tech: HTTP/admin-console.osmaks.mycompany.com@DEMO.OSMAKS.INNO.TECH HTTP/admin-console.osmaks.mycompany.com HTTP/application-shop.osmaks.mycompany.com@DEMO.OSMAKS.INNO.TECH HTTP/application-shop.osmaks.mycompany.com
-
Выполните проверку атрибутов сервисной учетной записи:
get-aduser -Identity <service-account> -properties servicePrincipalName
Пример команды:
get-aduser -Identity osmax_backend_svc -properties servicePrincipalName
Пример вывода со значимыми параметрами:
DistinguishedName : CN=osmax_backend_svc,CN=Users,DC=demo,DC=osmaks,DC=inno,DC=tech Enabled : True GivenName : lcm_backend_svc Name : lcm_backend_svc ObjectClass : user ObjectGUID : d903b450-e6c3-4324-9770-0236b00f83f8 SamAccountName : lcm_backend_svc servicePrincipalName : { HTTP/admin-console.osmaks.mycompany.com@DEMO.OSMAKS.INNO.TECH, HTTP/admin-console.osmaks.mycompany.com, HTTP/application-shop.osmaks.mycompany.com@DEMO.OSMAKS.INNO.TECH, HTTP/application-shop.osmaks.mycompany.com} SID : S-1-5-21-1700660301-2837393460-1517524629-1105 Surname : UserPrincipalName : HTTP/admin-console.osmaks.mycompany.com@DEMO.OSMAKS.INNO.TECH
Создание keytab-файла
Для дальнейшей интеграции с бэкендом продукта используйте одну из следующих опций:
-
явно укажите в настройках бэкенда имя созданной сервисной учетной записи, домен (realm/область безопасности) и пароль учетной записи;
-
поместите имя сервисной учетной записи, пароль и SPN в файл формата *.keytab и используйте его.
Чтобы создать keytab-файл, выполните команду:
ktpass -princ HTTP/<host-name>@<domain-name> -mapuser <service-account> -pass <service-account-password> -crypto All -ptype KRB5_NT_PRINCIPAL -out <target-path>\<keytab.filename>
Пример команды:
ktpass -princ HTTP/admin-console.osmaks.mycompany.com@DEMO.OSMAKS.INNO.TECH -mapuser lcm_backend_svc -pass "Qwerty123" -crypto All -ptype KRB5_NT_PRINCIPAL -out C:\temp\osmaks_ad.keytab
Пример вывода:
Targeting domain controller: dc-winsrv.osmaks.inno.tech Using legacy password setting method Successfully mapped HTTP/admin-console.osmaks.mycompany.com to osmaks_backend_svc. Key created. Key created. Key created. Key created. Key created. Output keytab to osmaks_ad.keytab: Keytab version: 0x502 keysize 65 HTTP/admin-console.osmaks.mycompany.com@DEMO.OSMAKS.INNO.TECH ptype 1 (KRB5_NT_PRINCIPAL) vno 4 etype 0x1 (DES-CBC-CRC) keylength 8 (0x894ca425cb159eb0) keysize 65 HTTP/admin-console.osmaks.mycompany.com@DEMO.OSMAKS.INNO.TECH ptype 1 (KRB5_NT_PRINCIPAL) vno 4 etype 0x3 (DES-CBC-MD5) keylength 8 (0x894ca425cb159eb0) keysize 73 HTTP/admin-console.osmaks.mycompany.com@DEMO.OSMAKS.INNO.TECH ptype 1 (KRB5_NT_PRINCIPAL) vno 4 etype 0x17 (RC4-HMAC) keylength 16 (0x59fc0f884922b4ce376051134c71e22c) keysize 89 HTTP/admin-console.osmaks.mycompany.com@DEMO.OSMAKS.INNO.TECH ptype 1 (KRB5_NT_PRINCIPAL) vno 4 etype 0x12 (AES256-SHA1) keylength 32 (0x555027fe7864fdd549ea517ff1cff1077fb2bf83de7e6e28eeeb6ed66db556bc) keysize 73 HTTP/admin-console.osmaks.mycompany.com@DEMO.OSMAKS.INNO.TECH ptype 1 (KRB5_NT_PRINCIPAL) vno 4 etype 0x11 (AES128-SHA1) keylength 16 (0xe8dfe5b65a4fdb3bc0c367637c5a0606)
|
При создании keytab-файла на контролере домена Active Directory в атрибутах сервисной учетной записи записывается актуальный KVNO ключей из состава keytab-файлов. Работа с ключами с устаревшей версией KVNO не поддерживается, поэтому после генерации новых keytab-файлов подключение с использованием сгенерированных ранее невозможно. Версию KVNO из ключей в keytab-файле можно уточнить командой в следующем разделе:
|
Чтобы просмотреть содержимое созданного файла, выполните команду:
klist -K -e -t -k <keytab.filename>
Пример команды:
klist -K -e -t -k /opt/inno-osmaks-core/osmaks_ad.keytab
Пример вывода:
Keytab name: FILE:/opt/inno-osmaks-core/osmaks_ad.keytab KVNO Timestamp Principal ---- ----------------- -------------------------------------------------------- 23 01/01/70 03:00:00 HTTP/admin-console.osmaks.mycompany.com@DEMO.OSMAKS.INNO.TECH (DEPRECATED:des-cbc-crc) (0x16cdc11ae5f83845) 23 01/01/70 03:00:00 HTTP/admin-console.osmaks.mycompany.com@DEMO.OSMAKS.INNO.TECH (DEPRECATED:des-cbc-md5) (0x16cdc11ae5f83845) 23 01/01/70 03:00:00 HTTP/admin-console.osmaks.mycompany.com@DEMO.OSMAKS.INNO.TECH (DEPRECATED:arcfour-hmac) (0x59fc0f884922b4ce376051134c71e22c) 23 01/01/70 03:00:00 HTTP/admin-console.osmaks.mycompany.com@DEMO.OSMAKS.INNO.TECH (aes256-cts-hmac-sha1-96) (0x57576e3ab78065762d6b450134367b5f40427942827129eb7bcfc679faab1443) 23 01/01/70 03:00:00 HTTP/admin-console.osmaks.mycompany.com@DEMO.OSMAKS.INNO.TECH (aes128-cts-hmac-sha1-96) (0x8330205fcc577afc946ac1dfc2c3e7c
|
Windows не предоставляет встроенных средств для просмотра содержимого keytab-файла.
Однако, если у вас на компьютере установлена версия Java JRE/JDK, используйте утилиту Например: "c:\Program Files\Java\jre1.8.0_181\bin" klist.exe -K -e -t -k C:\temp\osmaks_ad.keytab |
Сохраните файл на сервере, на который будет устанавливаться бэкенд продукта. Путь к файлу
необходимо будет указать на этапе его настройки. Также измените права доступа к файлу, предоставив доступ к
нему только для пользователя, от имени которого будет запускаться systemd-служба lcm.
|