'run_as_user' 的气流模拟不工作

Airflow Impersonation with 'run_as_user' Not Working

我正在尝试让模拟工作但没有成功。我按照此处的说明进行操作 - https://airflow.apache.org/security.html#impersonation

我在 'airflow' 用户下以 sudo 运行 启动了 airflow 网络服务器、调度程序和工作程序。该用户在 sudoers 文件中设置为允许无密码登录。

我创建了一个 BashOperator 和一个 PythonOperator,其中 run_as_user 参数设置为服务器上名为 'linus' 的现有用户。当我以 'airflow' 身份登录时,我可以通过 运行 sudo -u linus 切换用户,而不会提示我输入密码。

dag = DAG('test_impersonation', default_args=args)

def print_user(**kwargs):
    print('USER:', getpass.getuser())

t1 = BashOperator(task_id='bash_task', 
                  bash_command='touch /home/linus/test.x',
                  run_as_user='linus',
                  dag=dag)

t2 = PythonOperator(task_id='py_task',
                    python_callable='print_user', 
                    run_as_user='linus',
                    dag=dag)

我正在终端中使用以下命令测试这些任务:

airflow test test_impersonation bash_task 2018-03-30
airflow test test_impersonation py_task 2018-03-30

第一个命令(BashOperator 任务)失败并出现权限被拒绝错误,告诉我它仍然是 运行 作为 'airflow' 用户。

第二个命令(PythonOperator 任务)打印以下内容:

USER: airflow

我希望这会打印 USER: linus

有什么我遗漏的吗?任何帮助将不胜感激。

感谢阅读!

我不太确定,但看起来 sudo -u 前缀应用在 task_runner 中,它由执行程序设置,并且可能 运行s cli 运行 命令;而 cli test 命令仅在测试模式下调用 task_instance 上的 运行,并且不会在 sudo -u.

之前添加