管理多租户 Airflow 实例中的连接
Manage connections in multi tenant Airflow instance
我是 运行 AWS ECS 上的一个 Airflow 实例。效果很好。然而,最近出现了对多租户的需求。我激活了 webserver:filter_by_owner
,我的不同团队现在无法看到彼此的 DAG。太棒了!
但是,我偶然注意到,没有什么可以阻止 A 队使用 B 队打算使用的 connectionId。
在我的示例中,我是 运行 Airflow 以在 Snowflake 中编排一些 SQL。示例:
with DAG("TEST_Dag", default_args=config.default.args, schedule_interval=None) as dag:
t_create_table = SnowflakeOperator(
task_id="CreateTable",
snowflake_conn_id="CONNECTION_ID_FOR_TEAM_A",
sql="CREATE TABLE IF NOT EXISTS TEST_TABLE (C1 INT)",
dag=dag
)
在这个例子中,我已经建立了一个指向雪花的连接,我称之为 CONNECTION_ID_FOR_TEAM_A。每个团队都有自己的连接 ID。因此 TEAM B 将有一个 CONNECTION_ID_FOR_TEAM_B.
然而,问题在于没有什么可以阻止团队 B 使用团队 A 的连接,这是此多租户 Airflow 设置中的一个很大的安全漏洞。
这个能解决吗?
我认为在 Airflow 1.x 中没有简单的方法可以做到这一点,但在 Airflow 2 中有一些东西可以帮助你。他们添加了一个叫做 Secret backend 的东西。您可以使用它来保持连接并允许 Airflow 从那里而不是从它自己的数据库中获取连接。这样做的缺点是这些连接不会出现在 Airflow UI.
中
您可以发送用户 ID 并将其用作 Secret 后端连接的过滤器。
我是 运行 AWS ECS 上的一个 Airflow 实例。效果很好。然而,最近出现了对多租户的需求。我激活了 webserver:filter_by_owner
,我的不同团队现在无法看到彼此的 DAG。太棒了!
但是,我偶然注意到,没有什么可以阻止 A 队使用 B 队打算使用的 connectionId。
在我的示例中,我是 运行 Airflow 以在 Snowflake 中编排一些 SQL。示例:
with DAG("TEST_Dag", default_args=config.default.args, schedule_interval=None) as dag:
t_create_table = SnowflakeOperator(
task_id="CreateTable",
snowflake_conn_id="CONNECTION_ID_FOR_TEAM_A",
sql="CREATE TABLE IF NOT EXISTS TEST_TABLE (C1 INT)",
dag=dag
)
在这个例子中,我已经建立了一个指向雪花的连接,我称之为 CONNECTION_ID_FOR_TEAM_A。每个团队都有自己的连接 ID。因此 TEAM B 将有一个 CONNECTION_ID_FOR_TEAM_B.
然而,问题在于没有什么可以阻止团队 B 使用团队 A 的连接,这是此多租户 Airflow 设置中的一个很大的安全漏洞。
这个能解决吗?
我认为在 Airflow 1.x 中没有简单的方法可以做到这一点,但在 Airflow 2 中有一些东西可以帮助你。他们添加了一个叫做 Secret backend 的东西。您可以使用它来保持连接并允许 Airflow 从那里而不是从它自己的数据库中获取连接。这样做的缺点是这些连接不会出现在 Airflow UI.
中您可以发送用户 ID 并将其用作 Secret 后端连接的过滤器。