【问题标题】:Airflow Impersonation with 'run_as_user' Not Working带有“run_as_user”的气流模拟不起作用
【发布时间】:2018-03-30 19:21:51
【问题描述】:

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

我启动了气流网络服务器、调度程序和工作程序作为 sudo 在“气流”用户下运行。此用户在 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

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

感谢阅读!

【问题讨论】:

    标签: python airflow


    【解决方案1】:

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

    【讨论】:

    • 感谢您为我指明正确的方向。我能够使用“airflow trigger_dag”或通过从 UI 运行来使其工作。除此之外,我还必须将气流主目录从“airflow”用户目录中移出并进入 /etc/airflow。跨度>
    • 我们已经尝试过同样的操作,但是以用户身份运行不起作用,如果可能,请指导一些详细步骤
    猜你喜欢
    • 2016-11-11
    • 2020-02-21
    • 1970-01-01
    • 2021-12-03
    • 2021-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-04
    相关资源
    最近更新 更多