Apache Airflow-使用RBAC的身份验证问题

时间:2020-05-27 09:09:55

标签: airflow airflow-scheduler airflow-operator apache-airflow-xcom

我有一个问题

气流 1.10.10

Python 3.7

操作系统 redhat企业版

环境具有计算实例的GCP

Nginx 计算实例

我们正在使用(多个)气流,并通过NGINX反向代理(全部在Google Cloud Platform上提供)

我们有一个主域(example.com),该域根据其路径重定向到多个位置。 我们根据变量将位置设置为动态。我们称其为VarA和VarB。这指向运行Airflow的各个实例。 每个Web服务器部署的每个实例的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时,我们可以正确导航到每个气流实例。问题是:

一旦我们通过导航到URL对1个实例进行身份验证

E

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

我们可以浏览到我们生成的所有其他气流实例,而无需进行身份验证(每个实例的用户名和密码都不同)

构建映像时,我们使用airflow create_user在数据库上创建第一个用户。

我尝试添加

  • 保护cookie选项
  • SameSite Cookie
  • enable_proxy_fix

所有方法均无效。

一种可行的方法是我将secret_key更改为我们手动设置的内容,而不是源代码中的os.urandom(16),这使我们可以分别登录每个实例

但是

当我们在URL中加载另一个实例,然后单击刷新或登录到另一个实例时,它将第一个登录的实例注销。

更新:

我知道它已将其链接到ab_user表中RBAC用户的USER_ID(由于我们创建的用户始终是用户1)

我怎么知道这是因为,如果我更改了PG数据库中的USERID,请更改ab_user_roles以在ab_user表中反映新的用户ID,并使该用户ID为随机整数,可以,并且我可以登录一次实例,如果我将其加载到URL中,则可以登录另一个实例,要求我登录。

Airflow不会发送任何cookie来关联用户ID,所以它如何工作?到底是Gunicorn还是Flask?

创建用户I Airflow时,我不想更改USERID,因为它不那么安全。 感谢您的帮助

0 个答案:

没有答案