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