如何在Airflow中使用HashiCorp Vault?

7
我开始使用Apache Airflow,并想知道如何有效地使用存储在Vault中的密码和密钥。不幸的是,搜索并没有返回有意义的答案,除了Airflow项目本身中尚未实现的挂钩。我可以始终使用Python的hvac模块从PythonOperator通用访问Vault,但我想知道是否有任何更好的方式或良好实践(例如我错过的Airflow插件)。
2个回答

3

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'},
    )

1
@leftjoin 我也在努力弄清楚这个问题。 - Nadim Younes
同样的问题。我们的令牌每12小时过期一次。关于更新,我得到的最接近的东西是:
  1. 在我的Airflow Docker镜像中安装vault命令行工具
  2. airflow.cfg中设置backend_kwargs = {...,"token_path": "/usr/local/airflow/.vault-token", ...}
  3. 请一个小矮人进入每个Airflow容器并每6小时执行$ vault token renew,因为我被互联网告知在Docker容器中设置cron作业很困难且不推荐。
- Zach
有人知道我是否可以使用路径来连接吗?例如,将顶层指定为“connections_path”: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/"} - kaxil
Airflow无法从Vault读取秘密值,如果我将variables_path设置为除variables之外的其他路径,有什么想法可以读取其他路径中的值吗?这个不起作用:"variables_path": "my_custom_variables" - Lal
显示剩余3条评论

1

如果您是Vault的新手,请注意以下几点:

验证您的airflow.cfg backend_kwargs参数mount_point在vault中是否真实存在: vault secrets list

在尝试Web界面之前,请先使用命令行尝试上面的DAG代码 airflow test example_secrets_dags test-task 2020-06-04


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