我发现有很多方法可以将其存储为变量、挂钩和其他使用加密的方式。我想知道最好的方法是什么。
目前有2种存储秘密的方式:
1) Airflow 变量:如果键包含 ('password', 'secret', 'passwd', 'authorization', 'api_key', 'apikey', 'access_token' 中的任何单词,则变量的值将被隐藏)默认情况下,但可以配置为以明文形式显示,如下图所示。
但是,有一个已知的错误,任何有权访问 UI 的人都可以导出所有会暴露秘密的变量。
2) 气流连接:
您可以在 Airflow 连接中使用 Passwords 字段,如果您安装了
crypto
软件包 (pip install apache-airflow[crypto]
),该字段将会加密该字段。密码字段在 UI 中仅显示为空白,如屏幕截图所示。
有关保护连接的更多信息:https://airflow.apache.org/howto/secure-connections.html
我推荐第二种方法,因为即使有人可以访问用户界面,他/她也无法获取您的秘密。请记住,您需要为此安装
crypto
软件包。
然后您可以访问以下秘密:
from airflow.hooks.base_hook import BaseHook
connection = BaseHook.get_connection(CONN_ID)
slack_token = connection.password
您可以将
CONN_ID
设置为您的连接名称。
这是一个迟到的答案,但我认为可能对其他人有用。
将您的凭据存储到 .env 文件( gitignore 它)
API_USER=my_api_user
API_PASSWORD=123345678
并在 docker-compose.yaml 文件中定义带有前缀 AIRFLOW_VAR
的变量例如:如果定义的变量是 AIRFLOW_VAR_MY_API_USER,则可以在 dag 文件中使用 my_api_user。
docker-compose.yaml
x-airflow-common:
&airflow-common
....
AIRFLOW_VAR_MY_API_USER: ${API_USER}
AIRFLOW_VAR_MY_API_PASSWORD: ${API_PASSWORD}
在你的狗里面
from airflow.models import Variable
with DAG(
dag_id="my_dag",
start_date=pendulum.datetime(2024, 4, 22, tz="UTC"),
schedule="@once",
catchup=False
) as dag:
user = Variable.get("my_api_user")
password = Variable.get("my_api_password")
如果 Variable.get("my_api_user") 在 env 文件中定义,则不会创建数据库连接,因此使用它不会出现性能问题。 我使用了官方的 docker-compose.yaml 文件和airflow 2.9.0