Создание 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

  1. Перейдите в Control Panel > Administrative tools > Local Security Policy.

  2. В открывшемся окне перейдите в раздел Local Policies > Security Options и измените значение параметра Network security: Configure encryption types allowed for Kerberos.

  3. В отображаемом списке протоколов шифрования отключите устаревший RC4_HMAC_MD5 и включите остальные.

    1

Создание технической учетной записи пользователя, входящей в группу Domain Users

  1. Перейдите в Control Panel > Administrative tools > Active Directory Users and Computers.

  2. В требуемой директории домена создайте нового пользователя с определенным именем (например, osmax_backend_svc).

    Для созданной учетной записи рекомендуется задать постоянной пароль и отключить истечение его срока действия.
  3. В свойствах созданной учетной записи на вкладке Account активируйте опции This account supports Kerberos AES 128 bit encryption и This account supports Kerberos AES 256 bit encryption.

    2

Создание Service Principal Name (SPN)

Все команды выполняются в PowerShell из под учетной записи с правами администратора домена.
  1. Для каждого из 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
  2. Для каждого из 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
  3. Выполните проверку созданных 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
  4. Выполните проверку атрибутов сервисной учетной записи:

    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-файле можно уточнить командой в следующем разделе:

3

Чтобы просмотреть содержимое созданного файла, выполните команду:

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, используйте утилиту klist.exe, которая входит в комплект программного продукта.

Например:

"c:\Program Files\Java\jre1.8.0_181\bin" klist.exe -K -e -t -k C:\temp\osmaks_ad.keytab
Сохраните файл на сервере, на который будет устанавливаться бэкенд продукта. Путь к файлу необходимо будет указать на этапе его настройки. Также измените права доступа к файлу, предоставив доступ к нему только для пользователя, от имени которого будет запускаться systemd-служба lcm.