如何创建Airflow只读用户?Airflow 1.9是否支持该功能?
创建Airflow只读用户及版本兼容性说明
首先明确:Airflow 1.8和1.9版本都没有原生的只读用户功能——你提到的那个关于只读用户的讨论是针对Airflow 2.0的规划,这个特性直到2.0才正式纳入核心功能,所以早期1.x系列版本都不支持原生的只读角色。
如果你现在用的是Airflow 1.8,想要实现类似只读用户的效果,可以试试这几个方案:
自定义数据库级别的权限配置
Airflow 1.8基于Flask-Admin实现后台管理,权限系统依赖数据库中的角色和权限表。你可以手动创建一个只读角色并分配仅查看类的权限:- 连接到Airflow的元数据库(比如PostgreSQL/SQLite)。
- 在
ab_role表中插入新角色,比如执行INSERT INTO ab_role (name) VALUES ('ReadOnly');。 - 查询
ab_permission表,筛选出所有以can_view开头的权限(比如can_view_dag,can_view_taskinstance,can_view_log等),记录这些权限的id。 - 在
ab_role_permission表中,将新角色的id和这些只读权限的id关联起来,比如执行INSERT INTO ab_role_permission (role_id, permission_id) VALUES (角色ID, 权限ID);。 - 创建新用户时,将这个
ReadOnly角色分配给用户即可。
通过反向代理拦截操作接口
用Nginx这类反向代理服务器,对Airflow中涉及修改/操作的接口做访问限制:- 比如拦截
/admin/dag/*/edit/(编辑DAG的接口)、/trigger_dag(触发DAG的接口)等,只允许管理员IP访问; - 普通只读用户只能访问
/admin/dag/(DAG列表)、/admin/taskinstance/(任务实例查看)这类纯查看页面。
- 比如拦截
尝试社区插件增强权限
有些社区开发的插件可以给Airflow 1.x添加更精细的权限控制,比如airflow-access-control,不过要注意找适配Airflow 1.8的版本,安装前最好先在测试环境验证兼容性。
另外,如果你们有升级计划,Airflow 2.0及以上版本的权限系统(基于Flask-AppBuilder)原生支持角色管理,自带的Viewer角色就是完整的只读权限,创建用户时直接分配这个角色就搞定,比1.x版本的方案省心太多。
内容的提问来源于stack exchange,提问作者Kunal
相关产品推荐
相关产品推荐

