В настоящее время у меня есть задача, в которой я должен выполнить аутентификацию и авторизацию по LDAP, начиная с Spark Jobserver и передавая его через Spark Master и Workers в базу данных Cassandra (без Datastax Enterprise). Мне уже удалось пройти аутентификацию на Jobserver и экземпляре OpenLDAP. Но я не уверен, как передать эту информацию Кассандре, чтобы иметь возможность выполнять авторизацию на уровне ключей / таблиц.
Поскольку у нас есть KNIME в качестве Клиента для нашей инфраструктуры, мне как-то нужно иметь возможность запретить / разрешить доступ к информации в базе данных для определенных пользователей / групп.
В данный момент я размещаю все вовлеченные компоненты в Docker Containers локально.
Все компоненты довольно современны.
Это используемые версии:
- Spark Jobserver: 0.7.0.3-KNIME для Spark 2.x
- Мастер и рабочий Искры: 2.3.2
- Кассандра: 3.11.3
- OpenLDAP: 2.4.44
Сама Spark работает в автономном режиме.
Идея в основном заключается в том, чтобы запросить контекст Spark в KNIME (и аутентифицировать), извлечь данные из базы данных Cassandra через Spark и выполнить любые операции с возвращенным кадром данных.
Единственное, чего мне удалось добиться, - это пройти аутентификацию по LDAP с помощью сервера заданий. Но как только я активирую аутентификацию LDAP в Cassandra, я больше не могу войти в систему без какого-либо технического пользователя, который не является фиксированной частью конфигурации Jobserver (настраиваемой в файле environmentsernet.conf Jobserver, как показано ниже).
spark.cassandra.auth.username = <user>
spark.cassandra.auth.password = <pwd>
После поиска в течение почти 3 дней я нахожусь в такой ситуации, когда я пытаюсь найти ответ на эту проблему. Я видел записи в блоге / страницы, в которых говорится о чем-то связанном с Hadoop (вероятно, YARN ?!). Другие писали о Месосе и / или Керберосе.
Для самого сервера заданий я уже активировал use-as-proxy-user
shiro {
authentication = on
config.path = "shiro.ini"
use-as-proxy-user = on
}
Это означает, что имя пользователя уже передается в Spark в свойстве spark.proxy.user.
Чтобы наконец иметь возможность выполнять авторизацию на уровне Keyspace / Table в Cassandra, мне как-то нужна эта информация на уровне базы данных.
Это, наконец, привело меня к следующим вопросам:
- Кто-нибудь когда-нибудь достигал чего-то подобного с этими компонентами?
- Возможно ли добиться этого с помощью конфигурации автономного Spark Master?
- Возможно ли это вообще?
- Если да, то как?