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