首页 > 解决方案 > 使用基于所有者的 LDAP 进行气流身份验证

问题描述

我正在尝试使用 RBAC 配置我的 Airflow(2.10 版)LDAP 身份验证。UI 访问受到 AD 组(Python Developer、ML Developer 等的多个组)的限制。属于特定组的成员应该能够查看其他组成员创建的 DAG,而其他组成员则不能。

能够通过 AD 组向用户提供访问权限,但所有用户都能够看到创建的所有 DAG。我想根据定义的所有者集限制此访问,(这可以通过关闭 LDAP 并直接在 Airflow 中创建用户来实现,但我希望它与 AD 组一起使用。)

添加fiter_by_owner=True在airflow.cfg 文件中,似乎没有任何影响。

对此有任何想法。

EDIT1:从 FAB,我们可以配置角色,然后将其映射到 AD 组,如下所示:

FAB_ROLES = {
    "ReadOnly_Altered": [
        [".*", "can_list"],
        [".*", "can_show"],
        [".*", "menu_access"],
        [".*", "can_get"],
        [".*", "can_info"]
    ]
}

FAB_ROLES_MAPPING = {
    1: "ReadOnly_Altered"
}

为了使用它,我假设我们需要从应用程序端创建类似于 , 的can_list端点can_show

在 Airflow 的情况下,我无法找到基于所有者(或基于标签)提供访问权限的端点。我相信如果我们拥有它们,我可以将其映射到角色,然后相应地映射到 AD 组。

标签: securityldapairflowrbac

解决方案


使用较新版本的 Airlfow,您可以将 LDAP 组映射到 Airflow 组。

Owner 是一个旧的且当前已失效的功能,已被弃用。

您可以查看一些有关 FAB 配置的示例(Flask Application Builder 实现了所有身份验证功能):

https://flask-appbuilder.readthedocs.io/en/latest/security.html

请参阅开头的部分:

You can give FlaskAppBuilder roles based on LDAP roles (note, this requires AUTH_LDAP_SEARCH to be set):

从文档:

# a mapping from LDAP DN to a list of FAB roles
AUTH_ROLES_MAPPING = {
    "cn=fab_users,ou=groups,dc=example,dc=com": ["User"],
    "cn=fab_admins,ou=groups,dc=example,dc=com": ["Admin"],
}

# the LDAP user attribute which has their role DNs
AUTH_LDAP_GROUP_FIELD = "memberOf"

# if we should replace ALL the user's roles each login, or only on registration
AUTH_ROLES_SYNC_AT_LOGIN = True

# force users to re-auth after 30min of inactivity (to keep roles in sync)
PERMANENT_SESSION_LIFETIME = 1800

请参阅此处了解角色(包括自定义角色)https://airflow.apache.org/docs/apache-airflow/stable/security/access-control.html


推荐阅读