airflow中的那些“用戶”,user,owner 與run_as_user


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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM