首页 > 技术文章 > airflow中的那些“用户”,user,owner 与run_as_user

chenboshi 2020-06-22 21:12 原文

airflow的那些“用户” airflow中有三个与用户相关的概念。user,owner和run_as_user。下文将详细介绍三个概念、参数设置等,以及它们可以解决的需求。

user, 是指访问airflow web界面的用户,用户需要账户和密码才能登陆进web界面,可以提高web安全。user有两种,超级用户和普通用户。权限区别可以从web界面直接看出,superuser可以配置数据库连接connection、查看Xcom任务间传递的信息、执行任务的实例pool、创建删除superuser和普通用户等。

设置airflow.cfg中的参数;

vim airflow.cfg
[api]
# How to authenticate users of the API
auth_backend = airflow.contrib.auth.backends.password_auth
[webserver]
# Set to true to turn on authentication:
# https://airflow.apache.org/security.html#web-authentication
authenticate =True 
auth_backend = airflow.contrib.auth.backends.password_auth
​

创建用户,命令行创建,或者写python脚本创建用户(1.9以下版本)。

#airflow 1.9。0以上
airflow create_user [-h] [-r ROLE] [-u USERNAME] [-e EMAIL] [-f FIRSTNAME]
                    [-l LASTNAME] [-p PASSWORD] [--use_random_password]
#airflow 1.9以下

import airflow from airflow import models, settings from airflow.contrib.auth.backends.password_auth import PasswordUser user = PasswordUser(models.User()) user.username = 'username' user.email = 'username@example.com' user.password = 'password' session = settings.Session() session.add(user) session.commit() session.close()

  



owner,在创建dag文件时指定的dag所有者。在创建了用户和访问验证后,如果希望每个用户只能看到自己的dag列表,可以再设置一个参数filter_by_owner=True。当user和owner同名,并且该用户为普通用户时,只能看到自己创建的daglist。如果是superuser,依然可以看到所有dag。

#编写dag时指定
args = {
    'owner': 'test',  #此外还需创建test用户
    'start_date': days_ago(2),
}
# vim airflow.cfg
[webserver]
filter_by_owner = True

  

run_as_user,airflow运行任务使用的unix用户,在dag文件中指定。此外,为了防止run_as_user没有指定导致某些任务运行时用sudo权限,可以在airflow.cfg 设置参数,指定默认的unix用户为一个普通的用户。default_impersonation = ordinalxxx

args = {
    'owner': 'test',
    'start_date': days_ago(2),
    'run_as_user':'root'
}

  

总结:

需求1 :限制用户访问,提高web安全。

实现: 创建user是方法之一。

需求2 :限制用户可查看操作的dag列表,用户只能查看操作自己创建的dag。

实现:创建普通用户,用户与dag owner同名。

需求3 :限制airflow运行某些任务时的权限,类unix用户的权限。

实现:dag指定run_as_user

 

 

推荐阅读