Управление учетными записями gMSA

Для выполнения специфичных операций по администрированию учетных записей gMSA с помощью утилиты samba-tool используется группа подкоманд service-account group-msa-membership.

Операции доступны пользователям с правами администратора домена (член группы Domain Admins) или администратора предприятия (член группы Enterprise Admins).

В текущей версии функциональность gMSA поддерживается при работе Эллес в гетерогенном домене, в котором также доступны контроллеры домена на ОС Windows Server с развернутой службой каталогов Microsoft Active Directory Domain Services (AD DS).

Общие сведения

Учетные записи gMSA позволяют запускать службы на серверах в домене Эллес с аутентификацией по протоколу Kerberos без необходимости управлять паролями вручную.

Поддержка gMSA обеспечивает:

  • формирование и смену паролей для учетных записей gMSA в автоматическом режиме;

  • дополнительную защиту от несанкционированного изменения учетной записи, от имени которой запускается служба, а также от несанкционированного доступа к паролю такой учетной записи;

  • автоматическую синхронизацию паролей между машинами — участниками домена;

  • возможность делегировать управление учетными записями администраторам домена;

  • возможность запускать службу от имени единой учетной записи, независимо от того, на какой машине — участнике домена она будет выполняться.

Объекты gMSA имеют класс msDS-GroupManagedServiceAccount и хранятся в партиции по умолчанию службы каталогов и реплицируются на все контроллеры домена.

Работа с объектами gMSA в службе каталогов определяется следующими атрибутами:

  • msDS-GroupMSAMembership — используется для проверки того, что запрашивающая пароль к gMSA машина — участник домена имеет на это право;

  • msDS-ManagedPasswordId — идентификатор текущего пароля для gMSA;

  • msDS-ManagedPasswordPreviousId — идентификатор предыдущей версии пароля;

  • msDS-ManagedPasswordInterval — интервал автоматической смены пароля;

  • msDS-ManagedPassword — поле типа BLOB для пароля.

    Атрибут принадлежит к типу constructed и его значение вычисляется каждый раз при запросе на его чтение. Любой контроллер домена с правом на запись может вычислить значение этого атрибута, и значение это всегда будет одинаково.

За генерацию паролей для gMSA и их синхронизацию между серверами в домене отвечает служба распространения ключей (Key Distribution Service, KDS). Данная служба реализует криптографические функции для получения пароля на основе криптографических материалов, включающих в себя корневой ключ (см. «Управление корневыми ключами»).

Также служба KDS выполняет смену пароля по запросу контроллера домена, чем обеспечивается дополнительная безопасность. Период ротации ключей по умолчанию он составляет 30 дней.

Ключи и пароли распространяются по серверам домена по протоколу Kerberos.

Машины — участники домена, на которых запускаются службы от имени gMSA, проходят аутентификацию Kerberos на контроллерах домена Эллес с помощью пароля gMSA, получают билеты Kerberos TGT (Ticket-Granting Ticket), а затем используют TGT для запроса сервисных билетов Kerberos.

Полноценная поддержка gMSA доступна в доменах и лесах с функциональным уровнем 2012 и выше.

Выдача разрешения на использование (чтение пароля) учетной записи gMSA

Формат вызова:

samba-tool service-account group-msa-membership add -H <URL> [options]

При вызове ожидается имя учетной записи gMSA в параметре --name и sAMAccountName или уникальное доменное имя (DN) субъекта протокола Kerberos, который будет использовать gMSA, в параметре --principal.

Подкоманда добавляет разрешения для указанного субъекта в значение атрибута msDS-GroupMSAMembership учетной записи gMSA.

Параметры

Параметры вызова:

  • -H URL|--URL=URL — URL сервера LDAP; может содержать указание на протокол, имя хоста и номер порта;

  • --name=NAME — имя учетной записи gMSA (обязательный);

  • --principal=PRINCIPAL — sAMAccountName или уникальное доменное имя (DN) субъекта протокола Kerberos, который будет использовать gMSA (обязательный).

Примеры

Пример добавления разрешений для учетной записи сервера в атрибут msDS-GroupMSAMembership учетной записи gMSA:

samba-tool service-account group-msa-membership add \
   --name=GMSA1 \
   --principal=Server1$
Trustee 'Server1$' is now allowed to show managed passwords for: GMSA1$

Проверка изменения значения атрибута msDS-GroupMSAMembership (по SID объекта):

samba-tool service-account view \
   --name=GMSA1 \
   | grep msDS-GroupMSAMembership
  "msDS-GroupMSAMembership": "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-21-1159061634-2679507100-403793082-500)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-21-1159061634-2679507100-403793082-2121)",

Отзыв разрешения на использование (чтение пароля) учетной записи gMSA

Формат вызова:

samba-tool service-account group-msa-membership remove -H <URL> [options]

При вызове ожидается имя учетной записи gMSA в параметре --name и sAMAccountName или уникальное доменное имя (DN) субъекта протокола Kerberos, который больше не должен иметь доступ к паролю учетной записи gMSA, в параметре --principal.

Подкоманда удаляет разрешения для указанного субъекта из значения атрибута msDS-GroupMSAMembership учетной записи gMSA.

Параметры

Параметры вызова:

  • -H URL|--URL=URL — URL сервера LDAP; может содержать указание на протокол, имя хоста и номер порта;

  • --name=NAME — имя учетной записи gMSA (обязательный);

  • --principal=PRINCIPAL — sAMAccountName или уникальное доменное имя (DN) субъекта протокола Kerberos, который будет использовать gMSA (обязательный).

Примеры

Пример удаления разрешений для учетной записи сервера из атрибута msDS-GroupMSAMembership учетной записи gMSA:

samba-tool service-account group-msa-membership remove \
   --name=GMSA1 \
   --principal=Server1$
Trustee 'Server1$' removed access to show managed passwords for: GMSA1$

Проверка изменения значения атрибута msDS-GroupMSAMembership (по SID объекта):

samba-tool service-account view \
   --name=GMSA1 \
   | grep msDS-GroupMSAMembership
  "msDS-GroupMSAMembership": "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-21-1159061634-2679507100-403793082-500)",

Просмотр списка разрешений на использование (чтение пароля) учетной записи gMSA

Формат вызова:

samba-tool service-account group-msa-membership list -H <URL> [options]

В выводе подкоманды содержится список уникальных доменных имен (DN) субъектов протокола Kerberos, имеющих разрешения на использование (чтение пароля) учетной записи gMSA.

Параметры

Параметры вызова:

  • -H URL|--URL=URL — URL сервера LDAP; может содержать указание на протокол, имя хоста и номер порта;

  • --name=NAME — имя учетной записи gMSA (обязательный);

  • --json — вывод результатов выполнения операции в формате JSON.

Примеры

Пример получения списка субъектов протокола Kerberos, имеющих разрешения на использование учетной записи gMSA:

samba-tool service-account group-msa-membership show \
   --name=GMSA1
{
  "dn": "CN=GMSA1,CN=Managed Service Accounts,DC=elles,DC=inno,DC=tech",
  "trustees": [
    "CN=Administrator,CN=Users,DC=elles,DC=inno,DC=tech",
    "CN=Server1,CN=Computers,DC=elles,DC=inno,DC=tech"
  ]
}

Пример настройки учетной записи gMSA в Эллес

В качестве примера рассмотрим настройку учетной записи gMSA на контроллере Эллес, введенном в домен, который изначально был развернут с помощью AD DS.

В результате выполненных действий в домене должна появиться учетная запись gMSA, которую можно было бы использовать для безопасного запуска различных служб на рабочих станциях и серверах, являющихся участниками домена.

Выполняется следующая последовательность шагов по настройке от имени доменного пользователя Administrator с необходимыми правами:

  1. Проверка наличия корневого ключа.

    Данный пример основан на допущении, что ключ был создан на другом контроллере в домене и был добавлен на текущий контроллер Эллес в результате репликации:

    samba-tool domain kds root-key list
    1 root key found.
    
    name f1acc9a9-bf7f-4413-e2ee-c288f6ad236f
       created        2024-07-11T18:25:35.290512+00:00 (about 22 minutes ago)
       usable from    2024-07-11T08:20:35.290512+00:00 (about 10 hours ago)
       dn             CN=f1acc9a9-bf7f-4413-e2ee-c288f6ad236f,CN=Master Root Keys,CN=Group Key Distribution Service,CN=Services,CN=Configuration,DC=gmsaexample,DC=net
  2. Просмотр содержимого ключа.

    Для проверки параметров ключа можно просмотреть его содержимое:

    samba-tool domain kds root-key view \
       --name=f1acc9a9-bf7f-4413-e2ee-c288f6ad236f
    name f1acc9a9-bf7f-4413-e2ee-c288f6ad236f
       created        2024-07-11T18:25:35.290512+00:00 (about 22 minutes ago)
       usable from    2024-07-11T08:20:35.290512+00:00 (about 10 hours ago)
       dn             CN=f1acc9a9-bf7f-4413-e2ee-c288f6ad236f,CN=Master Root Keys,CN=Group Key Distribution Service,CN=Services,CN=Configuration,DC=gmsaexample,DC=net
       cn             f1acc9a9-bf7f-4413-e2ee-c288f6ad236f
       whenCreated    20240711182535.0Z
       whenChanged    20240711182535.0Z
       objectGUID     824f85dd-a7e9-488b-9cac-40f00fc5c1a1
       msKds-KDFAlgorithmID SP800_108_CTR_HMAC
       msKds-KDFParam 00000000010000000e000000000000005300480041003500310032000000
       msKds-SecretAgreementAlgorithmID DH
       msKds-PublicKeyLength 2048
       msKds-PrivateKeyLength 256
       msKds-Version  1
       msKds-DomainID CN=AL-R-DC1,OU=Domain Controllers,DC=gmsaexample,DC=net
  3. Создание доменной группы.

    Для удобства администрирования состава машин — участников домена, которые будут иметь доступ к паролю учетной записи gMSA, создаются:

    • подразделение:

      samba-tool ou add 'OU=GMSAS'
      Added ou "OU=GMSAS,DC=gmsaexample,DC=net"
    • доменная группа:

      samba-tool group add GMSA1 \
         --groupou="OU=GMSAS" \
         --group-scope=Global
      Added group GMSA1
  4. Добавление в группу машин — участников домена.

    Добавленные в группу рабочие станции и серверы будут иметь доступ к паролю учетной записи gMSA:

    samba-tool group addmembers GMSA1 al-r-dc1$,win-cl1$,win-r-dc1$
    Added members to group GMSA1

    Проверка состава группы:

    samba-tool group show GMSA1
    dn: CN=GMSA1,OU=GMSAS,DC=gmsaexample,DC=net
    objectClass: top
    objectClass: group
    cn: GMSA1
    instanceType: 4
    whenCreated: 20240711180023.0Z
    uSNCreated: 3967
    name: GMSA1
    objectGUID: 3158ea1f-dc51-4b77-be6e-09f8a6ea4fbd
    objectSid: S-1-5-21-280994483-2379122998-3972094575-1601
    sAMAccountName: GMSA1
    sAMAccountType: 268435456
    groupType: -2147483646
    objectCategory: CN=Group,CN=Schema,CN=Configuration,DC=gmsaexample,DC=net
    member: CN=WIN-R-DC1,OU=Domain Controllers,DC=gmsaexample,DC=net
    member: CN=WIN-CL1,CN=Computers,DC=gmsaexample,DC=net
    member: CN=AL-R-DC1,OU=Domain Controllers,DC=gmsaexample,DC=net
    whenChanged: 20240711180436.0Z
    uSNChanged: 3968
    distinguishedName: CN=GMSA1,OU=GMSAS,DC=gmsaexample,DC=net
  5. Создание групповой управляемой служебной учетной записи (gMSA).

    Создается учетная запись gMSA:

    samba-tool service-account create \
       --name=gmsaSrvc1 \
       --dns-host-name=gmsaSrvc1.gmsaexample.net
    Created group managed service account: gmsaSrvc1

    Созданная запись привязывается к группе GMSA1:

    samba-tool service-account group-msa-membership add \
       --name=gmsaSrvc1 \
       --principal='CN=GMSA1,OU=GMSAS,DC=gmsaexample,DC=net'
    Trustee 'CN=GMSA1,OU=GMSAS,DC=gmsaexample,DC=net' is now allowed to show managed passwords for: gmsaSrvc1

    Проверка разрешений, заданных для созданной учетной записи gMSA:

    samba-tool service-account group-msa-membership show \
       --name=gmsaSrvc1 \
       --json
    {
      "dn": "CN=gmsaSrvc1,CN=Managed Service Accounts,DC=gmsaexample,DC=net",
      "trustees": [
        "CN=Administrator,CN=Users,DC=gmsaexample,DC=net",
        "CN=GMSA1,OU=GMSAS,DC=gmsaexample,DC=net"
      ]
    }

Далее созданная учетная запись gMSA может использоваться для выполнения различных задач на добавленных в группу машинах — участниках домена.