我开始使用Apache Airflow,并想知道如何有效地使用存储在Vault中的密码和密钥。不幸的是,搜索并没有返回有意义的答案,除了Airflow项目本身中尚未实现的挂钩。我可以始终使用Python的
hvac
模块从PythonOperator
通用访问Vault,但我想知道是否有任何更好的方式或良好实践(例如我错过的Airflow插件)。hvac
模块从PythonOperator
通用访问Vault,但我想知道是否有任何更好的方式或良好实践(例如我错过的Airflow插件)。Airflow >=1.10.10 支持 Secrets 后端,并支持从 Hashicorp Vault 获取 Airflow 变量和连接。
更多细节请参考 Airflow 文档:https://airflow.apache.org/docs/stable/howto/use-alternative-secrets-backend.html#hashicorp-vault-secrets-backend
如果您想在本地测试,请查看以下教程:https://www.astronomer.io/guides/airflow-and-hashicorp-vault/
请在 airflow.cfg
中设置以下配置,根据您的环境进行更新:
backend = airflow.contrib.secrets.hashicorp_vault.VaultBackend
backend_kwargs = {"connections_path": "connections", "variables_path": "variables", "mount_point": "airflow", "url": "http://127.0.0.1:8200"}
用于测试集成的示例DAG:
from airflow import DAG
from airflow.operators.python_operator import PythonOperator
from datetime import datetime
from airflow.hooks.base_hook import BaseHook
def get_secrets(**kwargs):
conn = BaseHook.get_connection(kwargs['my_conn_id'])
print(f"Password: {conn.password}, Login: {conn.login}, URI: {conn.get_uri()}, Host: {conn.host}")
with DAG('example_secrets_dags', start_date=datetime(2020, 1, 1), schedule_interval=None) as dag:
test_task = PythonOperator(
task_id='test-task',
python_callable=get_secrets,
op_kwargs={'my_conn_id': 'smtp_default'},
)
如果您是Vault的新手,请注意以下几点:
验证您的airflow.cfg backend_kwargs参数mount_point在vault中是否真实存在:
vault secrets list
在尝试Web界面之前,请先使用命令行尝试上面的DAG代码
airflow test example_secrets_dags test-task 2020-06-04
vault
命令行工具airflow.cfg
中设置backend_kwargs = {...,"token_path": "/usr/local/airflow/.vault-token", ...}
$ vault token renew
,因为我被互联网告知在Docker容器中设置cron作业很困难且不推荐。backend_kwargs = {"connections_path": "kv"}
,然后在调用上面示例中的PythonOperator
时,使用路径作为op_kwargs={'my_conn_id': '/my_secrets/dev/smtp_default'}
,这样从Vault推断出的连接将是kv/my_secrets/dev/smtp_default
吗? - Giorgos Myrianthous{"connections_path": "kv/my_secrets/dev/"}
。 - kaxilvariables_path
设置为除variables
之外的其他路径,有什么想法可以读取其他路径中的值吗?这个不起作用:"variables_path": "my_custom_variables"
。 - Lal