Airflow 2.10基于LDAP的RBAC配置:按AD组限制查看对应所有者DAG求助
Airflow 2.10 对接AD组实现DAG粒度权限控制方案
1 先解决filter_by_owner配置不生效问题
你当前配置的fiter_by_owner=True存在两处错误:
- 配置项拼写错误,正确参数名为
filter_by_owner - 该参数必须放在
airflow.cfg的[webserver]配置段下,放在其他段不会生效
修正后重启Airflow webserver和scheduler,可先验证原生的基于用户名的owner过滤功能是否正常。
2 AD组对接实现方案
Airflow 2.x原生已经基于FAB框架生成了DAG粒度的权限端点,不需要自行开发对应接口,可按以下两种方案落地:
方案1:DAG内置access_control + AD组角色映射
无需修改Airflow核心配置,仅需调整DAG代码和FAB角色配置即可:
- 第一步:完成AD组到FAB角色的映射,在
webserver_config.py中配置你提到的FAB_ROLES和FAB_ROLES_MAPPING,将不同AD组对应到专属角色,比如Python开发组对应python_dev_role、ML开发组对应ml_dev_role。配置示例:
FAB_ROLES = { "python_dev_role": [ [".*", "menu_access"], ["DAGRun", "can_list"], ["TaskInstance", "can_list"] ], "ml_dev_role": [ [".*", "menu_access"], ["DAGRun", "can_list"], ["TaskInstance", "can_list"] ] } # 键为AD组的SID,值为对应自定义角色名 FAB_ROLES_MAPPING = { "S-1-5-21-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-1001": "python_dev_role", "S-1-5-21-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-1002": "ml_dev_role" }
- 第二步:在DAG定义中通过
access_control参数指定可访问的角色,示例如下:
from airflow import DAG from datetime import datetime default_args = { 'owner': 'python_team', 'start_date': datetime(2024, 1, 1) } with DAG( dag_id='python_team_daily_task', default_args=default_args, schedule_interval='0 1 * * *', # 仅允许python_dev_role和管理员访问该DAG access_control={ 'python_dev_role': {'can_read', 'can_edit'}, 'Admin': {'can_read', 'can_edit'} } ) as dag: # 你的任务逻辑 pass
- 第三步:移除所有自定义角色中
all_dags资源的读权限,避免用户看到所有DAG。
方案2:自定义安全管理器实现标签/组自动匹配
如果不想逐个DAG配置access_control,可重写Airflow安全管理器实现自动权限匹配:
- 自定义安全管理器,继承
AirflowSecurityManager,重写get_accessible_dag_ids方法,逻辑为获取当前用户所属的AD组,匹配DAG的标签(比如标签为team:python的DAG仅允许Python开发组成员查看),返回有权限的DAG ID列表。 - 在
webserver_config.py中指定SECURITY_MANAGER_CLASS为你自定义的安全管理器类即可。
注意事项
- 用户首次登录时FAB会自动同步AD组对应的角色,可在Airflow UI的
Admin > Security > List Users页面验证角色分配是否正确。 - 如果是动态生成DAG的场景,可在DAG生成模板中统一注入
access_control配置,无需逐个修改DAG代码。
内容的提问来源于stack exchange,提问作者Sarath Chandra Vema
相关产品推荐
相关产品推荐

