是否可以限制Airflow中用户组对DAG的可见性和可访问性?
例如,我希望为我的整个公司提供一个大型Airflow环境,不同的团队将在其团队的工作流程中使用此Airflow环境。假设我们有A组和B组,它们分别属于各自的AD / LDAP组,A组和B组。是否有可能使A组仅看到属于其组的DAG,反之亦然? >
基于我的研究和理解,我认为不可能在单个气流环境中实现这一目标。我认为,为了做到这一点,我需要为每个团队创建一个单独的Airflow环境,以便每个团队都有各自的Airflow Dags文件夹,其中包含各自的DAG。
答案 0 :(得分:8)
我认为这里存在两个不同的问题:
首先,LDAP身份验证。气流提供了基于support for LDAP authentication构建的ldap3。链接文档中的示例显示了如何将Airflow角色与LDAP组关联(例如,data_profiler_filter
部分)。
第二,按组限制DAG访问。在撰写本文时,当前版本的Airflow(1.9)不支持按组限制DAG的可见性。基于角色的访问控制(RBAC)的最新工作改变了这一点。我在下面列出了3个用于解决此问题的选项。
新的RBAC功能增加了对此类权限的支持,并且是进行细粒度控制的最佳选择。它使用基于Flask App Builder构建的权限系统。它是由一家公司创建的,该公司的用例与您提到的用例非常相似,在Jira问题中将对此进行详细讨论。
更多信息,请访问:
现在可以在airflow/www_rbac的master上使用RBAC Web服务器UI。围绕RBAC的其他功能也正在积极开发中,以进一步提高多租户设置中的安全性。
注意:AIRFLOW-2267中还有一项有关DAG级别访问控制(DLAC)的新功能的正在进行中,该功能基于RBAC的工作以引入更细粒度的控制。可以在design doc和PR #3197中找到更多信息。
您可以考虑用于中等粒度控制的第二个选项是使用webserver.filter_by_owner
的{{3}}并为每个DAG设置一个明确的owner
(用户,而不是组)。 “这样,除非是超级用户,否则用户将只能看到其所有者的dag。”
此外:您可能对使用multi-tenancy setup以特定用户身份使用run_as_user
或core.default_impersonation
运行任务的相关功能感兴趣。
一些公司选择的粗粒度控制的第三种选择是运行多个单独的Airflow实例,每个团队一个。对于今天希望独立运行多个团队的DAG的人员来说,这可能是最实用的。如果您碰巧使用了impersonation,我们支持旋转多个Airflow实例。
答案 1 :(得分:0)
由于您可以拥有一系列所有者,因此另一个选择是
// Variable: group-datascience
["dinigo","michael","david"]
dag = DAG(
dag_id='dag-with-group-scope',
owner= Variable.get('group-datascience', parse_json=True),
# some more config
)
这只是化妆,很容易被黑客入侵。由于任何人都可以查询任务中的所有变量(可以吗?)。但这可以帮助组织