【问题标题】:Limit Airflow DAG Visibility By AD/LDAP Groups通过 AD/LDAP 组限制 Airflow DAG 可见性
【发布时间】:2018-06-27 15:55:18
【问题描述】:

是否可以限制 Airflow 中用户组对 DAG 的可见性和可访问性?

例如,我想为我的整个公司拥有一个大型 Airflow 环境,不同的团队将使用这个 Airflow 环境来处理他们团队的工作流程。假设我们有团队 A 和团队 B,他们都属于各自的 AD/LDAP 组,即 A 组和 B 组。是否可以让 A 组只看到属于他们的团队的 DAG,反之亦然,B 组?

根据我的研究和理解,我认为这在单一 Airflow 环境中是不可能的。我认为为了让我这样做,我需要为每个团队创建一个单独的 Airflow 环境,以便每个团队都有自己的 Airflow Dags 文件夹,其中包含各自的 DAG。

【问题讨论】:

  • 即,没有找到描述如何按组限制 DAG 可见性的相关文章。
  • 在 1.10.2 中,他们添加了 DAG 级别的访问控制。据我所知,您仍然必须手动将 DAG 映射到角色。您还必须手动将用户分配给角色;角色不能由 LDAP 组支持。 github.com/minio/cookbook/blob/master/docs/…

标签: airflow


【解决方案1】:

我认为这里提出了两个不同的问题:

首先,LDAP 身份验证。 Airflow 提供基于ldap3support for LDAP authentication。链接文档中的示例显示了如何将 Airflow 角色与 LDAP 组关联(例如,data_profiler_filter 部分)。

其次,按组限制 DAG 访问。在撰写本文时,当前版本的 Airflow (1.9) 不支持按组限制 DAG 的可见性。最近关于基于角色的访问控制 (RBAC) 的工作改变了这一点。我在下面列出了解决此问题的 3 个不同选项。


选项 1 - RBAC(大多数控制,在 Airflow ≥ 1.10 中可用)

新的 RBAC 功能增加了对此类权限的支持,是细粒度控制的最佳选择。它使用基于 Flask App Builder 构建的权限系统。这是由一家公司创建的,其用例与您提到的内容非常相似,在 Jira 问题中进行了更详细的讨论。

更多信息请见:

RBAC 网络服务器用户界面现在在 airflow/www_rbac 的 master 上可用。围绕 RBAC 的其他功能也在积极开发中,以进一步提高多租户设置的安全性。

注意:AIRFLOW-2267 中的新 DAG 级访问控制 (DLAC) 功能也正在进行中,该功能以 RBAC 工作为基础,引入了更细粒度的控制。更多信息可以在design docPR #3197找到。


选项 2 - 与所有者的多租户(最简单,在 Airflow

对于中等粒度控制,您可以考虑的第二个选项是 multi-tenancy setup,使用 webserver.filter_by_owner 并为每个 DAG 设置一个显式 owner(一个用户,而不是一个组)。 “有了这个,用户将只能看到它拥有的 dag,除非它是超级用户。”

除此之外:您可能对使用impersonationrun_as_usercore.default_impersonation 以特定用户身份运行任务感兴趣。


选项 3 - 运行多个单独的 Airflow 实例(最高隔离)

一些公司选择的第三个粗粒度控制选项是运行多个单独的 Airflow 实例,每个团队一个。对于今天希望单独运行多个团队的 DAG 的人来说,这可能是最实用的。如果您碰巧使用Astronomer Enterprise,我们支持启动多个 Airflow 实例。

【讨论】:

  • 我认为 RBAC 仅从 2.0 开始可用?
  • @Charmy 一旦 2.0 发布,我相信 RBAC 用户界面将成为默认用户界面,旧用户界面将被弃用。不过,从 1.10 开始,RBAC 可用,并且许多人已经在使用它。您可以在RBAC UI Security 找到有关如何启用和使用它的更多信息。您还可以在Airflow Changelog 中找到有关 RBAC 功能版本的更多信息。
  • 选项 2,filter_by_owner。不工作。确实,不拥有 DAG 的用户无法在 DAG 屏幕上看到它,但是一旦所有者(或其他进程)触发 DAG,任何用户都可以从“浏览 > DAG 运行”访问 DAG 主屏幕并删除/修改/触发它。
  • @amza 谢谢。我已经更新了答案以反映这一点。如果您使用的是 github.com/apache/airflow/blame/…
  • @TaylorEdmiston 我没有看到您提到的更新答案。我是在阅读 amza 的评论时才意识到这种担忧
【解决方案2】:

由于您可以拥有一组所有者,因此另一个选择是

  1. 在您的组中定义一个变量作为 json 中的用户名数组
// Variable: group-datascience
["dinigo","michael","david"]
  1. 在您的新 dag 中将此配置设置为所有者
dag = DAG(
  dag_id='dag-with-group-scope',
  owner= Variable.get('group-datascience', parse_json=True),
  # some more config
)
  1. 在airflow.cfg 中或通过环境变量激活所有者过滤
  2. 删除具有自定义角色的人员查看/编辑变量的权限。否则他们可以随时修改它

这只是化妆,它非常容易破解。因为任何人都可以查询任务中的所有变量(可以吗?)。但它可以帮助组织

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-08
    • 2022-08-12
    • 2020-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-05
    • 1970-01-01
    相关资源
    最近更新 更多