【问题标题】:Apache Airflow working with multi teams (Multi Tenant)Apache Airflow 与多团队合作(多租户)
【发布时间】:2021-08-02 06:53:57
【问题描述】:

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

【问题讨论】:

    标签: airflow


    【解决方案1】:

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

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

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

    2. Webserver 不再执行 DAG 代码。

    目前,编写 DAG 的人可以:

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

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

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

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

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

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

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

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

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

    【讨论】:

    • 哇,感谢您提供详细而翔实的回复。
    • 您能否添加一些简短描述或链接,说明如何使用 Helm Chart 进行此类部署?对于像我这样的新手来说,使用 Helm Chart 在 Kubernetes 上安装 Airflow 的参数有点不清楚。
    • 我和我的同事花了大约两个月的时间来解决这个问题,这是一个涉及 terraform、keycloack 集成和其他一些东西的项目。 Helm 图表可能只是解决方案的 %。
    猜你喜欢
    • 2018-02-18
    • 2015-10-28
    • 2018-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-21
    • 2016-02-15
    • 1970-01-01
    相关资源
    最近更新 更多