将另一个气流连接传递给气流 SSH Operator 时如何从日志和渲染模板中隐藏密码

问题描述 投票:0回答:1

我的 DAG 总结:

我正在使用 SSH Operator 通过 SSH 连接到 EC2 实例并运行一个 JAR 文件,该文件将连接到多个数据库。我已在 DAG 文件中声明了 Airflow Connection,并且能够将变量传递到 EC2 实例中。正如您从下面看到的,我将属性传递到 JAVA 命令中。

Airflow version - airflow-1-10.7
Package installed - apache-airflow[crypto]
from airflow import DAG
from datetime import datetime, timedelta
from airflow.contrib.hooks.ssh_hook import SSHHook
from airflow.contrib.operators.ssh_operator import SSHOperator
from airflow.hooks.base_hook import BaseHook
from airflow.models.connection import Connection

ssh_hook = SSHHook(ssh_conn_id='ssh_to_ec2')
ssh_hook.no_host_key_check = True
redshift_connection = BaseHook.get_connection("my_redshift")

rs_user = redshift_connection.login
rs_password = redshift_connection.password

mongo_connection = BaseHook.get_connection("my_mongo")
mongo_user = mongo_connection.login
mongo_password = mongo_connection.password


default_args = {
    'owner': 'AIRFLOW',
    'start_date': datetime(2020, 4, 1, 0, 0),
    'email': [],
    'retries': 1,
}

dag = DAG('connect_to_redshift', default_args=default_args)

t00_00 = SSHOperator(
    task_id='ssh_and_connect_db',
    ssh_hook=ssh_hook,
    command="java "
            "-Drs_user={rs_user} -Drs_pass={rs_pass} "
            "-Dmongo_user={mongo_user} -Dmongo_pass={mongo_pass} "
            "-jar /home/airflow/root.jar".format(rs_user=rs_user,rs_pass=rs_pass,mongo_user=mongo_user,mongo_pass=mongo_pass),
    dag=dag)

t00_00

问题

rs_pass,mongo_pass
的值将在 Rendered_Template/Airflow 日志中公开,这不好,我希望有一个解决方案可以使用 SSH Operator 从日志和渲染模板中隐藏所有这些敏感信息。

到目前为止,我已尝试将airflow.cfg 中的日志详细信息最小化为ERROR,但它仍然显示在Rendered_Template 中。

请赐教。

谢谢

password-hash airflow
1个回答
0
投票

您可以使用 jinja 模板作为用户名和密码。密码将被自动屏蔽。您可以在此处

找到如何模板连接的文档

您的代码将如下所示:

rs_user = "{{ conn['my_redshift'].login }}"
rs_password = "{{ conn['my_redshift'].password }}"

mongo_user = "{{ conn['my_mongo'].login }}"
mongo_password = "{{ conn['my_mongo'].password }}"
© www.soinside.com 2019 - 2024. All rights reserved.