Apache Airflow 与多个团队合作(多租户)

Era*_*anH 4 airflow

我正在使用 Airflow,并且希望将另一个团队添加到我的实例中。我希望新团队只能看到他们自己的 DAGS,这意味着只有当团队成员之一是 DAG 的所有者时,他才能看到他的 DAG。我正在使用 LDAP 身份验证。我希望每个团队都维护自己的 DAG。我还想要一个解决方案,让团队可以上传 DAG,而无需让他们直接访问 DAG 文件夹。也许通过使用 git 自动将 DAG 推送到目标。任何指导将不胜感激!

Jar*_*iuk 18

目前(Airflow 2.1)无法阻止任何可以编写 DAG 的人访问实例中的任何内容。Airflow(尚)没有真正的多租户设置来提供这种隔离。该功能正在开发中,但可能要到 Airflow 3 才会(完全)实现,但其中的元素将在未来几个月内出现在 Airlfow 2 中,因此如果您愿意,您将能够配置越来越多的隔离。

目前,与 1.10 相比,Airflow 2 引入了部分隔离:

  1. 解析 DAG 与调度程序是分开的,因此错误/恶意的 DAG 不会直接影响调度过程。

  2. Web服务器不再执行DAG代码。

目前,无论谁编写 DAG 都可以:

  • 直接访问Airflow的DB并在数据库中执行任何操作(包括删除整个数据库)
  • 读取任何配置变量以及连接和秘密
  • 通过操作数据库动态更改在 Airflow 中运行的任何 DAGS/任务的定义

并且没有办法阻止它(通过设计)。

所有这些都计划在未来几个月内解决。

这基本上意味着您必须对编写 DAG 的用户有一定程度的信任。无法实现完全隔离,您应该依靠在生产中提交的 DAG 的代码审查来防止任何类型的滥用(与开发人员向您的代码库提交的任何代码的情况非常相似)。

当前唯一“真正”的隔离可以通过部署多个 Airlfow 实例来实现 - 每个实例都有自己的数据库、调度程序、网络服务器。这实际上并不像看起来那么糟糕 - 如果您有 Kubernetes 集群并使用 Airflow 的官方 Helm Chart https://airflow.apache.org/docs/helm-chart/stable/index.html。您可以轻松创建多个 Airflow 实例 - 每个实例都位于不同的命名空间中,并且每个实例都使用自己的数据库架构(因此您仍然可以使用单个数据库服务器,但每个实例都必须有自己单独的架构)。然后,每个气流实例将拥有自己的工作人员,这些工作人员可以具有不同的身份验证(通过连接或通过其他机制)。

您甚至可以为所有此类实例提供通用身份验证机制 - 例如,您可以将 KeyCloak 放在 Airflow 前面,并将 Oauth/LDAP 身份验证与通用身份验证方法集成(例如为不同实例授权不同的员工组)。

这提供了良好的多租户可管理性、一定程度的资源重用(数据库、K8S 集群节点),并且如果您有(例如)Terraform 脚本来管理您的基础设施,那么实际上可以很好地使其易于管理,以便您可以轻松添加/删除租户。租户之间的隔离甚至更好 - 因为您可以单独管理每个租户使用的资源(工作人员数量、调度程序等)。

如果您认真对待隔离和多租户管理,我衷心推荐这种方法。即使在 Airflow 3 中我们将实现完全隔离,您仍然必须确保管理租户之间的“资源”隔离,并且拥有多个 Airflow 实例是使其变得非常简单的一种方法(因此它也将保持有效和推荐)在某些场景下实现多租户的方式)。

更新(2022 年 1 月):我们开始讨论 Airflow 的改进以允许多租户设置。这一切都在气流改善 Poposal-1“AIP-1:改善气流安全”的保护范围内。目前我们正在研究两个 AIP:AIP-42 和 AIP-43,它们将使 Airflow 多租户更接近现实 - 查看更多信息:https ://cwiki.apache.org/confluence/display/AIRFLOW/AIP-1 %3A+改善+气流+安全

  • 我和我的同事花了大约两个月的时间才解决这个问题,这是一个涉及 terraform、keycloack 集成和其他一些东西的项目。Helm 图表实际上可能只占解决方案的一小部分。 (2认同)