Airflow Connections 加密
介绍
在 Apache Airflow 中,Connections 是用于存储和管理外部系统连接信息的核心组件。这些信息通常包括数据库连接字符串、API 密钥、用户名和密码等敏感数据。为了保护这些敏感信息,Airflow 提供了加密功能,确保 Connections 中的密码和其他机密数据在存储时是加密的。
本文将详细介绍如何在 Airflow 中启用和使用 Connections 加密功能,并通过实际案例展示其应用场景。
启用 Connections 加密
要启用 Connections 加密,首先需要在 Airflow 的配置文件中设置加密密钥。Airflow 使用 Fernet 对称加密算法来加密和解密敏感数据。
步骤 1: 生成 Fernet 密钥
Fernet 密钥是一个 32 字节的 base64 编码字符串。你可以使用 Python 的 cryptography
库来生成一个 Fernet 密钥:
from cryptography.fernet import Fernet
key = Fernet.generate_key()
print(key.decode())
输出示例:
your_generated_fernet_key
步骤 2: 配置 Airflow
将生成的 Fernet 密钥添加到 Airflow 的配置文件 airflow.cfg
中:
[core]
fernet_key = your_generated_fernet_key
确保 fernet_key
的值是你生成的密钥。
步骤 3: 重启 Airflow
配置完成后,重启 Airflow 以应用更改。现在,Airflow 将使用该密钥来加密和解密 Connections 中的敏感信息。
加密 Connections 中的密码
在 Airflow 中,当你创建一个新的 Connection 时,密码字段会自动加密。以下是一个创建加密 Connection 的示例:
from airflow.models import Connection
from airflow.utils.db import provide_session
@provide_session
def create_encrypted_connection(session=None):
conn = Connection(
conn_id='my_encrypted_connection',
conn_type='mysql',
host='localhost',
login='myuser',
password='mypassword',
port=3306
)
session.add(conn)
session.commit()
create_encrypted_connection()
在这个示例中,password
字段在存储到数据库之前会被自动加密。