我发现有很多方法可以将其存储为变量、钩子和其他使用加密的方式。我想知道最好的方法是什么。
我发现有很多方法可以将其存储为变量、钩子和其他使用加密的方式。我想知道最好的方法是什么。
目前有两种存储机密信息的方式:
1)Airflow 变量:如果键包含(“password”、“secret”、“passwd”、“authorization”、“api_key”、“apikey”和“access_token”)中的任何单词,则变量的值将默认隐藏,但可以配置为像下面的图像一样以明文显示。
但是,已知存在一个错误,任何拥有 UI 访问权限的人都可以导出所有变量,从而暴露机密信息。
2)Airflow Connections:
您可以在 Airflow Connections 中使用 Passwords 字段,如果您已安装了 crypto
包 (pip install apache-airflow[crypto]
),则该字段将被加密。密码字段在 UI 中将显示为空白,如下截图所示。
更多关于安全连接的信息:https://airflow.apache.org/howto/secure-connections.html
我推荐使用第二种方式,因为即使其他人访问 UI,也无法获取您的机密信息。但请注意,您需要安装 crypto
包。
然后,您可以按如下方式访问机密信息:
from airflow.hooks.base_hook import BaseHook
connection = BaseHook.get_connection(CONN_ID)
slack_token = connection.password
您可以将CONN_ID
设置为您的连接名称。
airflow.hooks.base_hook.BaseHook
已在 airflow>=2.5.3 中被弃用。请使用from airflow.hooks.base import BaseHook
。 - Dave