2016-03-07 2 views
2

У меня есть кластер, защищенный Kerberos, и у него есть REST API, который должен взаимодействовать с кластером от имени пользователя. Я использовал Spring Security с SPNEGO для аутентификации пользователя, но когда я пытаюсь использовать Hadoop SDK, он не работает по разным причинам на основе того, что я пытаюсь.Первичные учетные данные SPNEGO для безопасного кластера

Когда я пытаюсь использовать SDK непосредственно после входа пользователя в систему, он дает мне SIMPLE authentication is not enabled.

Я заметил, что сеанс Authenticator - это UserNamePasswordAuthenticationToken, который не имеет смысла, так как я аутентифицируюсь в отношении области Kerberos с учетными данными пользователя.

Я пытаюсь использовать этот проект из коробки с моей учетной записи службы и Keytab: https://github.com/spring-projects/spring-security-kerberos/tree/master/spring-security-kerberos-samples/sec-server-spnego-form-auth

+0

При использовании «Hadoop SDK» я предполагаю, что вы создаете конфигурацию Hadoop и Hadoop 'UserGroupInformation'. Как передать свойства конфигурации в «Конфигурация», неявно * (например, «drop-core-site.xml» и т. Д. В локальном каталоге и добавить каталог в CLASSPATH) * или явно? Если неявно, вы проверили, что файл (ы) действительно читаются * (в противном случае Hadoop тихо переходит в жестко кодированные значения по умолчанию, например, SIMPLE, и ваша программа будет сбой и запись бессмысленными сообщениями об исключении позже) *? –

+0

Если это еще не так, вы можете поднять некоторые флагов отладки, как описано в https://steveloughran.gitbooks.io/kerberos_and_hadoop/content/sections/secrets.html i.e. '-Dsun.security.krb5.debug = true' и 'export HADOOP_JAAS_DEBUG = true' –

+0

Я добавляю файлы конфигурации явно, но я стараюсь избегать использования UGI вообще, поскольку все это использует статические элементы, и мне нужно поддерживать поточно-безопасные операции. У меня, вероятно, есть фундаментальное непонимание того, что должно присутствовать для того, чтобы все работало под руководством пользователя, но я надеялся, что это будет так же просто, как получить ссылку на «Subject» и запустить мой список HDFS и т. Д. Внутри «Subject» .doAs' – Benny

ответ

0

Прежде всего, Spring Sec Расширение Kerberos страшный кусок кода. Я оценил его один раз и воздержался от его использования. Вам нужны учетные данные для аутентификации клиента в вашем кластере. У вас есть в основном два варианта здесь:

  1. Если вы на Tomcat, вы можете попробовать JEE предварительно аутентификации обертку от Spring Security вместе с моим Tomcat SPNEGO AD Authenticator from trunk. Если вы получите делегированные полномочия от клиента, которые позволят вам выполнить вашу задачу, считая, что ваша учетная запись сервера доверена для делегирования.
  2. Если вышеуказанное не является вариантом, обратитесь к S4U2Proxy/S4U2Self с Java 8 и получите билет Kerberos от имени принципала пользователя и затем выполните ваш вызов REST API.

Как только у вас есть GSSCredential, поток будет таким же.

Отказ от ответственности: Я понятия не имею о Hadoop, но процесс GSS-API всегда одинаков.

+0

* «Я понятия не имею о Hadoop, но процесс GSS-API всегда один и тот же »* - вы оптимист ... GitBook о« Kerberos и Hadoop »подзаголовок **« Безумие за воротами »** с выдержками из HP Lovecraft повсюду * (и соответствующие презентации ApacheCon также имеют некоторые связанные с ними работы) * –

+0

@SamsonScharfrichter Возможно, материал не был сделан правильно. Это с открытым исходным кодом, улучшите его, поскольку вы знаете больше о Hadoop, чем я. Если бы я использовал Hadoop, я бы сделал это. –

+0

Сотрудники HortonWorks работают над этим ... и они более квалифицированы, чем кто-либо другой (и тоже заплатили за это). Тем временем мы можем просто плакать и плакать. –

0

Для чего вы можете использовать Apache Knox (http://knox.apache.org) для использования API Hadoop REST в защищенном кластере. Knox позаботится о переговорах SPNEGO с различными компонентами для вас. Вы можете использовать провайдер SSO, основанный на HTTP-заголовке, для распространения идентификатора вашего конечного пользователя на Knox.

Детали: http://knox.apache.org/books/knox-0-8-0/user-guide.html#Preauthenticated+SSO+Provider

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

В качестве альтернативы, вы можете пройти аутентификацию в Knox для LDAP с именем пользователя/паролем с поставщиком Shiro по умолчанию.

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

Смежные вопросы