Apache Airflow - Проблемы с аутентификацией с использованием RBAC - PullRequest
0 голосов
/ 27 мая 2020

У меня небольшая проблема

Воздушный поток 1.10.10

Python 3,7

OS redhat enterprise

Среда GCP с вычислительными инстансами

Nginx Compute Instance

Мы с использованием (нескольких) Airflow и прохождения через обратный прокси NGINX (все на облачной платформе Google)

У нас есть основной домен (example.com), который перенаправляет в несколько местоположений в зависимости от их пути. Мы устанавливаем динамические c местоположения на основе переменных. Назовем это VarA и VarB. Это указывает на отдельные экземпляры, на которых запущен Airflow. Postgres БД отличается для каждого экземпляра в зависимости от развертывания веб-сервера.

Snippet of Nginx Conf
...

server_name example.com

location ~/airflow-<varA>-<varB>/.*
  proxy_pass http://varA.example-instance.our-org.com/airflow-varB

Остальная часть блока местоположения, которую я настроил отсюда:

https://airflow.readthedocs.io/en/stable/howto/run-behind-proxy.html

У нас включены текущие настройки в airflow.cfg:

rbac = True
fernet_key = <the same for every image we build>
sercret_key = temporary_key (default)
base_url = <machine_dns_name:8080>

Когда наш CI создает и развертывает Airflow, мы можем правильно переходить к каждому экземпляру воздушного потока. Проблема:

После аутентификации с 1 экземпляром путем перехода по URL-адресу

EG

https://example.com/airflow-varA-varB `

Мы можем просматривать ВСЕ другие созданные нами экземпляры воздушного потока без аутентификации (имя пользователя и пароли ВСЕ разные для каждого экземпляра)

Когда мы создаем образ, мы используем airflow create_user для создания первого пользователя в БД.

Я попытался добавить параметр

  • Secure Cook ie
  • SameSite Cook ie
  • enable_proxy_fix

Все не работает.

Одна из вещей, которая вроде сработала, заключалась в том, что я изменил secret_key на то, что мы установили вручную, а не os.urandom(16), как в исходном коде, и что позволило нам войти в систему по-разному для каждого экземпляра

ОДНАКО

Когда мы загрузили другой экземпляр в URL-адрес и нажали refre sh или вошли в другой экземпляр, он зарегистрировал первый зарегистрированный- в инстансе выключен.

ОБНОВЛЕНИЕ:

I k теперь он связан с USER_ID пользователя RBA C в таблице ab_user (поскольку пользователь, которого мы создаем, всегда является пользователем 1)

Как я знаю, это потому, что если я изменил USERID в базе данных PG измените ab_user_roles, чтобы отразить новый идентификатор пользователя в таблице ab_user, и сделайте идентификатор пользователя случайным целым числом. Он работает, и я могу войти в один экземпляр, а другой экземпляр, если я загружу его в URL-адрес, запрашивает мне войти в систему.

Airflow не отправляет файлы cookie для связывания идентификатора пользователя, так как же это работает? Проблема в Gunicorn или Flask?

Я не хочу изменять USERID при создании пользователя I Airflow, потому что это не так безопасно. Любая помощь приветствуется

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...