通过AD / LDAP组限制气流DAG的可见性

时间:2018-06-27 15:55:19

标签: airflow

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

例如,我希望为我的整个公司提供一个大型Airflow环境,不同的团队将在其团队的工作流程中使用此Airflow环境。假设我们有A组和B组,它们分别属于各自的AD / LDAP组,A组和B组。是否有可能使A组仅看到属于其组的DAG,反之亦然? >

基于我的研究和理解,我认为不可能在单个气流环境中实现这一目标。我认为,为了做到这一点,我需要为每个团队创建一个单独的Airflow环境,以便每个团队都有各自的Airflow Dags文件夹,其中包含各自的DAG。

2 个答案:

答案 0 :(得分:8)

我认为这里存在两个不同的问题:

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

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


选项1-RBAC(在Airflow 1.10中可用)

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

更多信息,请访问:

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

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


选项2-与所有者进行多租户(最简单)

您可以考虑用于中等粒度控制的第二个选项是使用webserver.filter_by_owner的{​​{3}}并为每个DAG设置一个明确的owner(用户,而不是组)。 “这样,除非是超级用户,否则用户将只能看到其所有者的dag。”

此外:您可能对使用multi-tenancy setup以特定用户身份使用run_as_usercore.default_impersonation运行任务的相关功能感兴趣。


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

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

答案 1 :(得分:0)

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

  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. 删除具有自定义角色的人员的变量查看/编辑权限。否则,他们可以随时修改它

这只是化妆,很容易被黑客入侵。由于任何人都可以查询任务中的所有变量(可以吗?)。但这可以帮助组织