如何授予清除特定Airflow DAG历史执行记录的权限?
如何创建仅能清除特定Airflow DAG历史执行记录的角色
要实现只让角色清除指定DAG的历史执行记录,核心是把操作权限绑定到特定DAG资源上,而不是给全局权限。以下是具体配置方案:
核心权限逻辑
Airflow的权限是「操作类型 + 资源范围」的组合:
- 不需要全局的
can delete on DAGs权限(这个是用来删除DAG本身定义的,不是执行记录,会导致能删所有DAG) - 只需要针对特定DAG分配「删除DAG运行实例」和「清除任务实例状态」的权限
需要分配的具体权限
给新建角色添加以下权限(均限定目标DAG的dag_id):
delete操作,资源类型为DAG Run,资源名称填你的目标DAG ID(比如my_target_dag):对应清除DAG的历史执行记录clear操作,资源类型为Task Instance,资源名称填目标DAG ID:对应清除任务实例的运行状态(如果需要用到post_clear_task_instances相关操作的话)
配置步骤
用Airflow UI配置
- 进入Airflow后台的「Security」→「Roles」页面,点击「Create」新建角色(比如命名为
DAG_Clearer_MyTargetDAG) - 在权限添加区域:
- 选择操作
delete,资源类型DAG Run,资源名称输入目标DAG的ID,点击「Add Permission」 - 选择操作
clear,资源类型Task Instance,资源名称输入目标DAG的ID,点击「Add Permission」
- 选择操作
- 确认不要添加任何全局的
delete on DAGs权限
用CLI配置
如果习惯命令行操作,可以用airflow roles add-permission命令:
# 给角色添加删除指定DAG运行记录的权限 airflow roles add-permission -r DAG_Clearer_MyTargetDAG -a delete -t "DAG Run" -d "my_target_dag" # 给角色添加清除指定DAG任务实例的权限(如果需要) airflow roles add-permission -r DAG_Clearer_MyTargetDAG -a clear -t "Task Instance" -d "my_target_dag"
关键注意点
- 一定要区分「删除DAG定义」(
can delete on DAGs)和「删除DAG执行记录」(can delete on DAG Runs):前者会让角色能删除任何DAG的元数据,完全不符合需求,绝对不能加 - 配置完成后可以测试:用该角色登录Airflow,尝试清除其他DAG的执行记录,应该会被权限拦截,只能操作指定的DAG
内容的提问来源于stack exchange,提问作者Yohei Onishi
相关产品推荐
相关产品推荐

