Создание Service Principal Name (SPN) и keytab-файла для сервисной учетной записи

Перед началом работы задайте в произвольной форме следующие значения:

  • имена хостов отдельно для каждого из модулей; например:

    • «Кабинет администратора» — web-admin.example.com;

    • «Магазин приложений» — app-shop.example.com;

  • имя домена; например: LCM.TERRA.INNO.TECH;

  • имя сервисной учетной записи; например: lcm_backend_svc.

При создании Service Principal Name (SPN) и keytab-файла модулей «Кабинет администратора» и «Магазин приложений» используется единый принцип.

Ниже приведены примеры создания SPN (Service Principal Name) и keytab-файла модуля «Кабинет администратора» для сервисной учетной записи в домене под управлением Samba и в домене под управлением Active Directory.

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

  • Samba

  • Active Directory

  1. Создайте SPN с полным доменным именем, выполнив команду:

    samba-tool spn add HTTP/<host-name>@<domain-name> <service-account>

    Пример команды:

    samba-tool spn add HTTP/web-admin.example.com@LCM.TERRA.INNO.TECH lcm_backend_svc
  2. Создайте SPN с коротким именем, выполнив команду:

    $ samba-tool spn add HTTP/<host-name> <service-account>

    Пример команды:

    $ samba-tool spn add HTTP/web-admin.example.com lcm_backend_svc
  3. Проведите проверку созданных SPN, выполнив команду:

    $ samba-tool spn list <service-account>

    Пример команды:

    $ samba-tool spn list lcm_backend_svc

    Пример вывода:

    User CN=lcm_backend_svc,CN=Users,DC=lcm,DC=terra,DC=inno,DC=tech has the following servicePrincipalName:
    HTTP/web-admin.example.com@LCM.TERRA.INNO.TECH
    HTTP/web-admin.example.com
  4. Проведите проверку атрибутов сервисной учетной записи, выполнив команду:

    $ samba-tool user show <service-account>

    Пример команды:

    $ samba-tool user show lcm_backend_svc

    Пример вывода со значимыми параметрами:

    cn: lcm_backend_svc
    name: lcm_backend_svc
    sAMAccountName: lcm_backend_svc
    userPrincipalName: lcm_backend_svc@lcm.terra.inno.tech
    objectCategory: CN=Person,CN=Schema,CN=Configuration,DC=lcm,DC=terra,DC=inno,DC=tech
    msDS-SupportedEncryptionTypes: 24
    accountExpires: 0
    servicePrincipalName: HTTP/web-admin.example.com@LCM.TERRA.INNO.TECH
    servicePrincipalName: HTTP/web-admin.example.com
    distinguishedName: CN=lcm_backend_svc,CN=Users,DC=lcm,DC=terra,DC=inno,DC=tech
  1. Создайте SPN с полным доменным именем, выполнив команду:

    setspn -A HTTP/<host-name>@<domain-name> <service-account>

    Пример команды:

    setspn -A HTTP/web-admin.example.com@LCM.TERRA.INNO.TECH lcm_backend_svc
  2. Создайте SPN с коротким именем, выполнив команду:

    setspn -A HTTP/<host-name> <service-account>

    Пример команды:

    setspn -A HTTP/web-admin.example.com lcm_backend_svc

    Пример вывода:

    Checking domain DC=lcmtest,DC=lan
    Registering ServicePrincipalNames for CN=lcm_backend_svc,CN=Users,DC=lcm,DC=terra,DC=inno,DC=tech
               HTTP/web-admin.example.com
    Updated object
  3. Проведите проверку созданных SPN, выполнив команду:

    setspn -L  <service-account>

    Пример команды:

    setspn -L lcm_backend_svc

    Пример вывода:

    Registered ServicePrincipalNames for CN=lcm_backend_svc,CN=Users,DC=lcm,DC=terra,DC=inno,DC=tech:
        HTTP/web-admin.example.com@LCM.TERRA.INNO.TECH
        HTTP/web-admin.example.com
  4. Проведите проверку атрибутов сервисной учетной записи, выполнив команду:

    get-aduser -Identity <service-account> -properties servicePrincipalName

    Пример команды:

    get-aduser -Identity lcm_backend_svc -properties servicePrincipalName

    Пример вывода со значимыми параметрами:

    DistinguishedName : CN=lcm_backend_svc,CN=Users,DC=lcm,DC=terra,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/web-admin.example.com@LCM.TERRA.INNO.TECH, HTTP/web-admin.example.com}
    SID : S-1-5-21-1700660301-2837393460-1517524629-1105
    Surname :
    UserPrincipalName : HTTP/web-admin.example.com@LCM.TERRA.INNO.TECH

Создание keytab-файла

  • Samba

  • Active Directory

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

$ sudo samba-tool domain exportkeytab ./lcm-user.keytab --principal=<service-account>

Пример команды:

$ sudo samba-tool domain exportkeytab ./lcm-user.keytab --principal=lcm_backend_svc

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

$ sudo klist -e -k ./lcm-user.keytab

Пример файла:

Keytab name: FILE:./lcm-user.keytab
KVNO Principal
---- --------------------------------------------------------------------------
7 web-admin.example.com@LCM.TERRA.INNO.TECH (aes256-cts-hmac-sha1-96)
7 web-admin.example.com@LCM.TERRA.INNO.TECH (aes128-cts-hmac-sha1-96)
7 web-admin.example.com@LCM.TERRA.INNO.TECH(DEPRECATED:arcfour-hmac)

Чтобы создать 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/web-admin.example.com@LCM.TERRA.INNO.TECH -mapuser lcm_backend_svc -pass "Qwerty123" -crypto All -ptype KRB5_NT_PRINCIPAL -out C:\temp\web-admin_0.keytab

Пример вывода:

Targeting domain controller: lcm-dc-winsrv.<span data-markjs="true" class="terms-mark tooltipstered terms-term-selector">lcm</span>.terra.inno.tech
Using legacy password setting method
Successfully mapped HTTP/web-admin.example.com to lcm_backend_svc.
Key created.
Key created.
Key created.
Key created.
Key created.
Output keytab to C:\temp\web-admin_0.keytab:
Keytab version: 0x502
keysize 65 HTTP/web-admin.example.com@LCM.TERRA.INNO.TECH ptype 1 (KRB5_NT_PRINCIPAL) vno 4 etype 0x1 (DES-CBC-CRC) keylength 8 (0x894ca425cb159eb0)
keysize 65 HTTP/web-admin.example.com@LCM.TERRA.INNO.TECH ptype 1 (KRB5_NT_PRINCIPAL) vno 4 etype 0x3 (DES-CBC-MD5) keylength 8 (0x894ca425cb159eb0)
keysize 73 HTTP/web-admin.example.com@LCM.TERRA.INNO.TECH ptype 1 (KRB5_NT_PRINCIPAL) vno 4 etype 0x17 (RC4-HMAC) keylength 16 (0x59fc0f884922b4ce376051134c71e22c)
keysize 89 HTTP/web-admin.example.com@LCM.TERRA.INNO.TECH ptype 1 (KRB5_NT_PRINCIPAL) vno 4 etype 0x12 (AES256-SHA1) keylength 32 (0x555027fe7864fdd549ea517ff1cff1077fb2bf83de7e6e28eeeb6ed66db556bc)
keysize 73 HTTP/web-admin.example.com@LCM.TERRA.INNO.TECH ptype 1 (KRB5_NT_PRINCIPAL) vno 4 etype 0x11 (AES128-SHA1) keylength 16 (0xe8dfe5b65a4fdb3bc0c367637c5a0606)
Windows не предоставляет встроенных средств для просмотра содержимого keytab-файла. Однако, если у вас на компьютере установлена версия Java JRE, используйте утилиту klist.exe, которая входит в комплект java. cd "c:\Program Files\Java\jre1.8.0_181\bin" klist.exe -K -e -t -k C:\temp\web-admin_0.keytab.
Сохраните файл на сервере, на который будет устанавливаться бэкенд продукта. Путь к файлу необходимо будет указать на этапе его настройки. Также измените права доступа к файлу, предоставив доступ к нему только для пользователя, от имени которого будет запускаться systemd-служба lcm.