Skip to content

Active Directory Constrained Delegation и SPN

Протоколом аутентификации в среде Active Directory является Kerberos. Помимо стандартных операций создания учетных записей, под которыми пользователи заходят на свои компьютеры в домене AD, для улучшения защиты рекомендуется для запуска сервисов создавать специальные учетные записи, иногда называемые сервисными учетными записями.

Однако для нормального функционирования некоторых приложений в среде Kerberos, чьи сервисы запускаются под доменной учетной записью, требуется произвести некоторые дополнительные действия. О том, что такое Constrained Delegation и связанное с ним понятие SPN, а также пример их использования, и будет рассказано в данном посте.

Service Principal Names (SPN)

SPN - это идентификатор сервиса, запущенного на доменной машине.

апример, для учетной записи из-под которой запущен сервис SQL Server, должен быть указан свой SPN. SPN должен быть уникальным в пределах леса.

У двух типов доменных учетных записей: пользователя и компьютера, только у компьютера существуют автоматически указанные SPN.

При вводе комьютера в домен, у его учетной записи автоматически указывается host SPN, которое позволяет сервисам на этой машине запускаться из-под локальных учетных записей Local System и Network Service.

Таким образом если для запуска сервисов на машине используется доменная пользовательская учетная запись, для нее необходимо указать SPN.

Примеры SPN для пользовательских учетных записей:

  • MSSQLSvc/sqlsrvr.contoso.com:1433 - данный SPN указывает, что под этой учетной записью может быть запущен сервис SQL Server на машине с FQDN sqlsrvr.contoso.com, дополнительно также указан порт (1433) этого сервиса.
  • HTTP/websrvr.contoso.com - данный SPN указывает, что под этой учетной записью может быть запущен HTTP Server сервис на машине с FQDN websrvr.contoso.com. Стоит отметить, что FQDN в данной случае, это не Host header. Также данный SPN не воспринимает указание порта, таким образом, если на машине запущены несколько HTTP Server сервиса на разных портах, то нужно вместо FQDN машины указывать для SPN Host header конкретного IIS Web Application Pool.

Делегация Kerberos

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

Пример, пользователь подключается к IIS серверу, который запрашивает от имени пользователя данные у SQL сервера.

Делегация может быть:

  • неограниченная
  • ограниченная (constrained).

Ограниченная делегация используется только в пределах одного домена. Однако начиная с Windows Server 2012 это ограничение отменили.

Ограниченная делегация позволяет указать к каким сервисам и на каких машинах дозволено данной учетной записи (сервису) имперсонализировать пользователя.

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

Пример ограниченной делегации Kerberos:

  • На доменной машине websrvr.contoso.com запущен веб сервер IIS под аккаунтом contoso\service_iis.
  • У аккаунта contoso\service_iis указаны SPN:

    • HTTP/websrvr.contoso.com
    • HTTP/websrvr

    Также у этого аккаунта включена ограниченная делегация для MSSQLSvc/sqlsrvr.contoso.com.

  • На доменной машине sqlsrvr.contoso.com запущен SQL сервер под аккаунтом contoso\service_sql.

  • У аккаунта contoso\service_sql указаны SPN:

    • MSSQLSvc/sqlsrvr.contoso.com
    • MSSQLSvc/sqlsrvr.

В этом примере, клиент подключается к веб-серверу websrvr.contoso.com с целью получить данные, хранящиеся на SQL сервере sqlsrvr.contoso.com. На веб-странице используется код, обращающийся к SQL серверу за этими данными.

  • Пользователь аутентифицируется на веб-сервере.
  • Веб-сервер, используя ограниченную делегацию, использует имперсонализацию при обращении к SQL серверу.

Итог - список шагов для включения ограниченной делегации Kerberos:

  • Убедится, что домен уровня 2003 и выше. Можно использовать оснастку Active Directory Domains and Trust.
  • Настроить SPN для всех участвующих учетных записей сервисов. Можно использовать утилиту ADSI Edit и указать у выбранной учетной записи на вкладке Properties атрибут servicePrincipalName.
  • Настроить ограниченную делегацию для всех учетных записей сервисов, которые будут обращаться от имени пользователя к другим сервисам. Можно использовать оснастку Active Directory Users and Computers и указать у выбранной учетной записи на вкладке Delegation пункт Trust this computer for delegation to specified services only.
  • Убедиться, что выбранные учетные записи не ограничены в делегации. Можно использовать оснастку Active Directory Users and Computers и у выбранной учетной записи на вкладке Account убедиться, что не выбран Account is sensitive and cannot be delegated.
  • Настроить локальную политику безопасности. Можно использовать оснастку Local Security Policy на машине с работающим сервисом и в разделе Local Policies / User Rights Assignment указать учетную запись сервиса в политиках Log on as a service и Impersonate a client after authentication.

Источник 1

Источник 2

Источник 3