为 Airflow 加装 Cryptography 库

Using Cryptography Package in Airflow

Posted by zihengCat on 2018-08-26

前言

Apache Airflow分布式任务调度框架默认将密码等敏感信息以明文形式存储到元数据(Metadata)库中,这会带来一定的安全隐患。Airbnb 官方也强烈建议开发者安装cryptography库以实现敏感信息的加密存储。

另外,如果不安装cryptography加密库,Airflow 的许多高级功能都是无法使用的。

Airflow加装cryptography

Apache Airflow 默认不会安装cryptography库,我们需要手动安装并配置。

首先,使用pip命令来安装上cryptography库。

$ pip install apache-airflow[crypto]

代码清单:pip安装apache-airflow[crypto]

第二步,使用Python代码生成一枚fernet_keyfernet_key的格式必须为base64-encoded,长度必须为32-bytes

$ python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"
...

代码清单:Python生成fernet_key

然后,配置 Airflow 使用fernet_key。将第二步得到的秘钥写入到**配置文件airflow.cfg**中,也可以额外设置一枚环境变量。

$ vim airflow.cfg
...
fernet_key = <fernet_key>
...

代码清单:写airflow.cfg配置文件

$ export AIRFLOW__CORE__FERNET_KEY='<fernet_key>'

代码清单:设置AIRFLOW__CORE__FERNET_KEY环境变量

最后,重启 Airflow 服务「schedulerwebserver」即可。

参考资料