airflow中的那些“用户”,user,owner 与run_as_user
user, 是指访问airflow web界面的用户,用户需要账户和密码才能登陆进web界面,可以提高web安全。user有两种,超级用户和普通用户。权限区别可以从web界面直接看出,superuser可以配置数据库连接connection、查看Xcom任务间传递的信息、执行任务的实例pool、创建删除superuser和普通用户等。
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
posted on 2020-06-22 21:12 chenboshi 阅读(2237) 评论(0) 编辑 收藏 举报