Методы аутентификации. 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.keytabKVNO (
-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. Определите неисправную деталь
Определив неисправный участок пути, сможете направить усилия по отладке в наиболее полезное русло.
-
Используйте
ldapsearch, войдите в систему на машине, на которой размещен StarVault, чтобы убедиться в работоспособности конфигурации LDAP. -
Пройдите аутентификацию на сервере домена с помощью
kinit,keytabиkrb5.conf. Сделайте это как сkeytabStarVault, так и с любой клиентскойkeytab, используемой для входа в систему. Это гарантирует, что ваша сеть Kerberos работает. -
Войдя в клиентскую машину, убедитесь, что можете получить доступ к 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
Эти команды запускают вариации сценария, который запускает полное окружение, добавляет пользователей и выполняет вход в систему от клиента.