为什么“气流连接列表”显示未加密的结果?

why does `airflow connections list` shows unencrypted results?

气流版本:2.1.0

我设置了 FERNET_KEY 并检查了 login/password 当我通过 Web 添加连接时字段是加密的 UI。

但是,当我通过 CLI 添加连接时:

airflow connections add 'site_account' \
    --conn-type 'login' \
    --conn-login 'my_user_id' \
    --conn-password 'wowpassword'

和运行 airflow connections list,它以原始值显示所有内容(根本没有加密)。

我认为如果我使用 CLI 命令管理所有连接(我想让我的气流红外线可恢复。这就是我尝试使用 CLI 命令管理连接的原因)这可能已经足够危险了)

如何解决?

Airflow 在处理您的 cli 命令期间解密连接密码。 您可以使用 airflow connections list --o yaml 查看您的记录是否真的在数据库中加密。

此外,如果您能够访问 cli,您也能够访问配置,这意味着您始终可以提取数据库连接和 fernet_key 并自行获取完整密码。

Jorrick 的回答是正确的,但我想详细说明一下背景,因为我觉得它将在问题和答案之间架起一座桥梁。

当 DAG/user 要求时,Airflow 需要能够解密连接,这是非常可以理解的。这是应用程序正常运行所必需的,因此 Airflow 必须假设如果用户可以创作 DAG,则允许他使用系统资源(连接、变量)。

安全措施处于不同的水平。如果使用它们(使用 Fernet),Airflow 将加密敏感信息(如连接密码),这意味着在数据库本身中,值是加密的。这里的安全问题是 ferent_key 存储在哪里?它在旋转吗?等...

还有许多其他安全层处理不同的方面,例如:访问控制、在 Ui 中隐藏敏感信息,但这是一个不同的话题。

我认为了解安全处理两类用户的重要事项:

  1. 允许的用户,但您只想限制他可以执行的操作或他可以看到的内容。 (这是 Airflow 本身处理的更多内容,请参阅安全性 docs
  2. 恶意用户想要造成破坏。虽然 Airflow 确实在该领域提供了一些功能,但更多的问题在于您在哪里设置 Airflow 以及您如何保护它(IP 允许列表等...)

请记住,如果恶意用户获得了对 Airflow 服务器的访问权限,那么您将无能为力。这个用户可以简单地使用他的管理员权限来做任何事情。这与入侵您拥有的任何其他服务器的用户没有什么不同。