在Airflow上存储登录凭据的最佳方法是什么?

9

我发现有很多方法可以将其存储为变量、钩子和其他使用加密的方式。我想知道最好的方法是什么。

1个回答

22

目前有两种存储机密信息的方式:

1)Airflow 变量:如果键包含(“password”、“secret”、“passwd”、“authorization”、“api_key”、“apikey”和“access_token”)中的任何单词,则变量的值将默认隐藏,但可以配置为像下面的图像一样以明文显示。

enter image description here

但是,已知存在一个错误,任何拥有 UI 访问权限的人都可以导出所有变量,从而暴露机密信息。

2)Airflow Connections

您可以在 Airflow Connections 中使用 Passwords 字段,如果您已安装了 crypto 包 (pip install apache-airflow[crypto]),则该字段将被加密。密码字段在 UI 中将显示为空白,如下截图所示。

更多关于安全连接的信息:https://airflow.apache.org/howto/secure-connections.html

enter image description here

我推荐使用第二种方式,因为即使其他人访问 UI,也无法获取您的机密信息。但请注意,您需要安装 crypto 包。

然后,您可以按如下方式访问机密信息:

from airflow.hooks.base_hook import BaseHook

connection = BaseHook.get_connection(CONN_ID)
slack_token = connection.password
您可以将CONN_ID设置为您的连接名称。

谢谢你的回答。我需要保存和导入多个服务器、数据库和API的用户名和密码。请问第二种方法可行吗?你能否给我一个简短的示例代码,演示如何在Python代码中保存和导入它们? - Raj
你能提供已知的安全漏洞链接吗?我试着找了一下,但没找到。 - raphael
@kaxil 谢谢!我看到你是对这个 bug 有着深入了解的人 :) - raphael
5
有人知道安全漏洞是否仍存在,可以将密码导出为变量吗?我们试过了,但导出的变量是加密的({ "password": "********" })。有人能提供该漏洞的链接吗? - Ending
airflow.hooks.base_hook.BaseHook 已在 airflow>=2.5.3 中被弃用。请使用 from airflow.hooks.base import BaseHook - Dave

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接