Где хранить учетные данные для приложения AWS EMR Apache Spark, отправленные из задачи Airflow - PullRequest
0 голосов
/ 06 февраля 2019

Я работаю над приложением Apache Spark, которое отправляю в кластер AWS EMR из задачи Airflow.

В логике приложения Spark мне нужно читать файлы из AWS S3 и информацию из AWS RDS.Например, чтобы подключиться к AWS RDS в PostgreSQL из приложения Spark, мне нужно предоставить имя пользователя / пароль для базы данных.

Сейчас я ищу лучший и безопасный способ сохраненияэти учетные данные в безопасном месте и предоставить их в качестве параметров для моего приложения Spark.Пожалуйста, предложите, где хранить эти учетные данные, чтобы обеспечить безопасность системы - как env vars, где-нибудь в Airflow или где?

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Airflow обеспечил нам прекрасное покрытие управления учетными данными , предлагая Connection SQLAlchemy модель , к которой можно получить доступ из WebUI (где пароли все еще остаются скрытыми )

  • Вы можете контролировать salt, который Airflow использует для шифрованияпароли при хранении Connection -детали в его метаданных базы данных.

  • Он также предоставляет вам extra параметр для хранения неструктурированных / специфичных для клиента вещей , таких как {"use_beeline": true} config для Hiveserver2

  • В дополнение к WebUI вы также можете редактировать Connection s через CLI(что справедливо почти для каждой функции Airflow)

  • Наконец, если ваш сценарий использования включает динамическое создание / удаление Connection, это также возможно, используя базовый SQLAlchemy Session.Вы можете увидеть детали реализации из cli.py

Обратите внимание, что Airflow рассматривает все Connection с равными независимо от их type (тип - это просто подсказка для конечного пользователя).Airflow различает их на основе conn_id только

0 голосов
/ 06 февраля 2019

В Airflow вы можете создавать переменные для хранения этой информации.Переменные могут быть перечислены, созданы, обновлены и удалены из пользовательского интерфейса (Admin -> Variables).Вы можете получить к ним доступ из своего кода следующим образом:

from airflow.models import Variable
foo = Variable.get("foo")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...