Для улучшения работы сайта мы используем файлы cookies. Оставаясь на сайте, вы соглашаетесь с политикой обработки персональных данных.

Методы аутентификации. Kerberos

Данный механизм может использовать внешние сертификаты X.509 как часть проверки TLS или подписи. Проверка подписей по сертификатам X.509, использующим SHA-1, является устаревшей и больше не используется без обходного пути. Дополнительную информацию см. в разделе FAQ об устаревании.

Метод аутентификации kerberos — это автоматизированный механизм для получения токена хранилища для субъектов Kerberos.

Kerberos — это протокол сетевой аутентификации, изобретенный в Массачусетском технологическом институте в 1980-х годах. Его название вдохновлено Цербером, трехголовым псом Аида из греческой мифологии. Три головы относятся к трем сущностям Kerberos: серверу аутентификации, серверу выдачи билетов и базе данных принципалов. Kerberos лежит в основе аутентификации в Active Directory, и его цель — распределить нагрузку по аутентификации в сети.

1. Предпосылки

Kerberos — это очень практичный метод авторизации. Другие методы аутентификации, такие как, например, LDAP, требуют лишь беглых знаний для настройки и использования. С другой стороны, Kerberos лучше всего использовать людям, уже знакомым с ним. Рекомендуем использовать более простые методы аутентификации, если задача может быть решена с их помощью. В противном случае, прежде чем приступать к использованию Kerberos, рекомендуем ознакомиться с его основами.

Независимо от способа получения знаний, перед использованием этого метода аутентификации убедитесь, что хорошо знакомы с высокоуровневой архитектурой Kerberos, и выполните следующие действия:

  • Создайте достоверный файл krb5.conf

  • Создайте достоверный файл keytab

  • Аутентификация на сервере домена с файлом keytab с помощью kinit

Этих знаний и уже протестированной и подтвержденной рабочей средой достаточно для подготовки использования Kerberos в StarVault.

2. Конфигурация

  • Включите аутентификацию Kerberos в StarVault:

    starvault auth enable \
        -passthrough-request-headers=Authorization \
        -allowed-response-headers=www-authenticate \
        kerberos
  • Создайте keytab для плагина Kerberos (этот keytab используется самим сервером StarVault, для входа в систему следует создать другой keytab):

    $ ktutil
    ktutil:  addent -password -p your_service_account@REALM.COM -e aes256-cts -k 1
    Password for your_service_account@REALM.COM:
    ktutil:  list -e
    slot KVNO Principal
    ---- ---- ---------------------------------------------------------------------
      1    1            your_service_account@REALM.COM (aes256-cts-hmac-sha1-96)
    ktutil:  wkt starvault.keytab

    KVNO (-k 1) должен совпадать с KVNO учетной записи службы. Если это неверно, в журналах StarVault появится ошибка.

    В keytab также можно добавить различные типы шифрования, например -e rc4-hmac с дополнительными командами addent.

    Затем выполните base64-кодирование:

    base64 starvault.keytab > starvault.keytab.base64
  • Настройте метод аутентификации Kerberos с keytab и именем записи, которая будет использоваться для проверки входящих запросов на вход:

    starvault write auth/kerberos/config \
        keytab=@starvault.keytab.base64 \
        service_account="starvault_svc"
  • Настройте метод аутентификации Kerberos для связи с LDAP с помощью учетной записи службы, настроенной выше. Это пример конфигурации LDAP. Ваша конфигурация будет отличаться. Убедитесь, что сначала проверили свою конфигурацию с сервера StarVault с помощью такого инструмента, как ldapsearch.

    starvault write auth/kerberos/config/ldap \
        binddn=starvault_svc@MATRIX.LAN \
        bindpass=$STARVAULT_SVC_PASSWORD \
        groupattr=sAMAccountName \
        groupdn="DC=MATRIX,DC=LAN" \
        groupfilter="(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={{.UserDN}}))" \
        userdn="CN=Users,DC=MATRIX,DC=LAN" \
        userattr=sAMAccountName \
        upndomain=MATRIX.LAN \
        url=ldaps://somewhere.foo

    Вышеуказанный метод LDAP использует тот же код, что и метод аутентификации LDAP. Дополнительные сведения о доступных параметрах см. в документации к нему.

  • Настройте политики StarVault, которые должны быть предоставлены тем, кто успешно прошел аутентификацию, на основе их членства в группах LDAP. Поскольку этот метод идентичен методу аутентификации LDAP, дальнейшее обсуждение смотрите в разделе Разрешение членства в группах и сопоставление групп LDAP → политики.

    starvault write auth/kerberos/groups/engineering-team \
        policies=engineers

    Вышеуказанная группа предоставляет политику "engineers" тем, кто проходит аутентификацию через Kerberos и является членом LDAP-группы "engineering-team".

3. Аутентификация

На клиентской машине с действительными файлами krb5.conf и keytab выполните следующую команду:

starvault login -method=kerberos \
    username=grace \
    service=HTTP/my-service \
    realm=MATRIX.LAN \
    keytab_path=/etc/krb5/krb5.keytab  \
    krb5conf_path=/etc/krb5.conf \
    disable_fast_negotiation=false
  • krb5conf_path — путь к действительному файлу krb5.conf, описывающему взаимодействие со средой Kerberos.

  • keytab_path — путь к keytab, в которой находится запись для субъекта, аутентифицирующегося в StarVault. Файлы keytab должны быть защищены от других пользователей на общем сервере с помощью соответствующих разрешений на файлы.

  • username — имя пользователя для записи в keytab, которое будет использоваться для входа в Kerberos. Это имя пользователя должно совпадать с учетной записью службы в LDAP.

  • service — главное имя службы, которое следует использовать для получения билета службы для получения токена SPNEGO. Этот сервис должен существовать в LDAP.

  • realm — имя пространства Kerberos. Это пространство должно совпадать с UPNDomain, настроенным на LDAP-соединении. Эта проверка чувствительна к регистру.

  • disable_fast_negotiation — отключение метода аутентификации Kerberos, по умолчанию использующего согласование FAST. FAST — это механизм предварительной аутентификации для Kerberos. Включает в себя механизм туннелирования обменов перед аутентификацией с помощью защищенных сообщений KDC. FAST обеспечивает повышенную устойчивость к пассивным атакам на угадывание пароля. Некоторые распространенные реализации Kerberos не поддерживают согласование FAST.

  • remove_instance_name — удаляет любые имена экземпляров из имени принципала сервиса Kerberos при разборе файла keytab. Например, если для keytab установлено значение true, то при разборе файла с именем принципала сервиса foo/localhost@example.com, CLI удалит из него имя экземпляра и останется только foo@example.com.

4. Устранение неполадок

4.1. Определите неисправную деталь

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

  1. Используйте ldapsearch, войдите в систему на машине, на которой размещен StarVault, чтобы убедиться в работоспособности конфигурации LDAP.

  2. Пройдите аутентификацию на сервере домена с помощью kinit, keytab и krb5.conf. Сделайте это как с keytab StarVault, так и с любой клиентской keytab, используемой для входа в систему. Это гарантирует, что ваша сеть Kerberos работает.

  3. Войдя в клиентскую машину, убедитесь, что можете получить доступ к StarVault с помощью следующей команды: curl $STARVAULT_ADDR/v1/sys/health.

4.2. Составьте четкие шаги для воспроизведения проблемы

Если возможно, сделайте так, чтобы проблему мог воспроизвести кто-то вне вашей компании. Например, если ожидаете, что сможете войти в систему, используя такую команду, как:

starvault login -method=kerberos \
    username=my-name \
    service=HTTP/my-service \
    realm=EXAMPLE.COM \
    keytab_path=/etc/krb5/krb5.keytab\
    krb5conf_path=/etc/krb5.conf

Затем убедитесь, что готовы поделиться результатами ошибки этой команды, содержимым файла krb5.conf и записями, перечисленными в файле keytab.

4.3. Дополнительные ресурсы для устранения неполадок

Библиотека StarVault Kerberos имеет рабочую интеграционную тестовую среду, которую можно использовать в качестве примера полноценной среды Kerberos и LDAP. Она работает через Docker и может быть запущена с помощью одной из следующих команд:

make integration
make dev-env

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

5. API

Метод аутентификации Kerberos имеет полный HTTP API. Более подробную информацию можно найти в разделе API метода аутентификации Kerberos.