跳到主要内容

Airflow 加密配置

在现代数据工程中,保护敏感数据和通信安全至关重要。Apache Airflow 提供了多种加密配置选项,以确保数据在传输和存储过程中的安全性。本文将逐步介绍如何在 Airflow 中配置加密,并通过实际案例帮助您理解其应用场景。

什么是Airflow加密配置?

Airflow 加密配置是指通过配置 Airflow 以使用加密技术来保护敏感数据(如数据库连接信息、API 密钥等)和通信(如 Web 服务器与数据库之间的通信)。加密可以防止未经授权的访问和数据泄露。

配置Airflow加密

1. 加密数据库连接

Airflow 使用 SQLAlchemy 与数据库进行交互。为了保护数据库连接信息,您可以使用环境变量或 Airflow 的 Connections 功能来存储加密的凭据。

使用环境变量

您可以将数据库连接信息存储在环境变量中,并在 airflow.cfg 中引用这些变量:

python
# airflow.cfg
sql_alchemy_conn = postgresql+psycopg2://${AIRFLOW_DB_USER}:${AIRFLOW_DB_PASSWORD}@localhost:5432/airflow

然后,在启动 Airflow 之前设置环境变量:

bash
export AIRFLOW_DB_USER=myuser
export AIRFLOW_DB_PASSWORD=mypassword

使用Airflow Connections

您还可以在 Airflow UI 中创建加密的连接:

  1. 进入 Airflow Web UI。
  2. 导航到 Admin > Connections
  3. 点击 Create 按钮。
  4. 填写连接信息,并选择 Encrypt 选项。

2. 加密通信

Airflow 支持通过 HTTPS 加密 Web 服务器与客户端之间的通信。要启用 HTTPS,您需要配置 SSL 证书。

配置SSL证书

airflow.cfg 中配置 SSL 证书路径:

python
# airflow.cfg
web_server_ssl_cert = /path/to/cert.pem
web_server_ssl_key = /path/to/key.pem

然后,重新启动 Airflow Web 服务器以应用更改。

3. 加密敏感变量

Airflow 提供了 Variable 功能来存储敏感信息。您可以使用 Fernet 密钥对这些变量进行加密。

生成Fernet密钥

首先,生成一个 Fernet 密钥:

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

然后,将生成的密钥配置到 airflow.cfg 中:

python
# airflow.cfg
fernet_key = your_generated_fernet_key

存储加密变量

在 Airflow UI 中创建加密变量:

  1. 进入 Airflow Web UI。
  2. 导航到 Admin > Variables
  3. 点击 Create 按钮。
  4. 填写变量信息,并选择 Encrypt 选项。

实际案例

假设您正在开发一个 Airflow DAG,该 DAG 需要访问一个包含敏感数据的数据库。为了保护数据库连接信息,您可以使用加密的连接。

示例DAG

python
from airflow import DAG
from airflow.providers.postgres.operators.postgres import PostgresOperator
from airflow.utils.dates import days_ago

default_args = {
'owner': 'airflow',
'start_date': days_ago(1),
}

dag = DAG(
'encrypted_db_dag',
default_args=default_args,
schedule_interval='@daily',
)

t1 = PostgresOperator(
task_id='query_db',
postgres_conn_id='encrypted_db_connection',
sql='SELECT * FROM sensitive_table',
dag=dag,
)

t1

在这个示例中,postgres_conn_id 指向一个加密的数据库连接,确保连接信息在传输和存储过程中是安全的。

总结

通过配置 Airflow 的加密功能,您可以有效保护敏感数据和通信安全。本文介绍了如何加密数据库连接、启用 HTTPS 通信以及加密敏感变量。希望这些内容能帮助您在 Airflow 中实现更安全的数据处理流程。

附加资源

练习

  1. 尝试在本地 Airflow 实例中配置一个加密的数据库连接。
  2. 生成一个 Fernet 密钥,并使用它加密一个 Airflow 变量。
  3. 配置 Airflow Web 服务器以使用 HTTPS,并验证其安全性。
提示

在配置加密时,请务必备份您的密钥和证书,以防止数据丢失。