跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
Airflow加密配置
”︁(章节)
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
= Airflow加密配置 = '''Airflow加密配置'''是Apache Airflow中保护敏感数据的关键机制,通过加密技术确保数据库连接密码、API密钥等机密信息的安全存储与传输。本指南将详细介绍Airflow支持的加密方案、配置方法及实际应用场景。 == 概述 == Airflow提供两种主要加密方式: # '''Fernet密钥加密''':对称加密方案,用于加密数据库连接、变量等敏感字段。 # '''TLS/SSL传输加密''':保护组件间通信(如Web服务器与数据库)。 加密配置的核心目标是: * 防止敏感数据以明文形式存储 * 满足合规性要求(如GDPR、HIPAA) * 降低凭证泄露风险 == Fernet密钥配置 == === 生成Fernet密钥 === Fernet密钥是32字节的base64编码字符串,可通过以下Python代码生成: <syntaxhighlight lang="python"> from cryptography.fernet import Fernet fernet_key = Fernet.generate_key() print(fernet_key.decode()) # 输出类似:'sT3Xb5jZ8...Q2oP0w=' </syntaxhighlight> === 配置Airflow使用密钥 === 在`airflow.cfg`中设置: <syntaxhighlight lang="ini"> [core] fernet_key = your_generated_fernet_key_here </syntaxhighlight> 或通过环境变量: <syntaxhighlight lang="bash"> export AIRFLOW__CORE__FERNET_KEY="your_key" </syntaxhighlight> === 加密数据示例 === 加密数据库连接密码(CLI操作): <syntaxhighlight lang="bash"> airflow connections add --conn-uri 'postgres://user:password@host:5432/dbname' </syntaxhighlight> Airflow会自动将密码加密存储到元数据库: <mermaid> flowchart LR A[明文密码] -->|Fernet加密| B[加密字符串] B -->|存储到| C[(元数据库)] </mermaid> == TLS/SSL配置 == === Web服务器HTTPS === 在`airflow.cfg`中配置: <syntaxhighlight lang="ini"> [webserver] web_server_ssl_cert = /path/to/cert.pem web_server_ssl_key = /path/to/key.pem </syntaxhighlight> === 数据库SSL === 连接字符串示例: <syntaxhighlight lang="ini"> [core] sql_alchemy_conn = postgresql+psycopg2://user:pass@host:5432/db?sslmode=require </syntaxhighlight> == 进阶配置 == === 密钥轮换 === 当需要更换Fernet密钥时: 1. 将新旧密钥以逗号分隔配置: <syntaxhighlight lang="ini"> [core] fernet_key = new_key,old_key </syntaxhighlight> 2. Airflow会自动用新密钥加密新数据,同时能解密旧数据 === 自定义加密后端 === 通过继承`airflow.models.crypto.BaseFernet`实现: <syntaxhighlight lang="python"> from airflow.models.crypto import BaseFernet class CustomCrypto(BaseFernet): @classmethod def encrypt(cls, content: bytes) -> bytes: # 自定义加密逻辑 return processed_content @classmethod def decrypt(cls, content: bytes) -> bytes: # 自定义解密逻辑 return original_content </syntaxhighlight> == 实际案例 == '''场景:医疗数据处理管道''' * 需求:保护患者数据访问凭证 * 解决方案: - 使用Fernet加密数据库连接字符串 - 为Worker到数据库的通信启用SSL - 每90天轮换一次密钥 配置片段: <syntaxhighlight lang="ini"> [core] fernet_key = MDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUY= sql_alchemy_conn = mysql+mysqldb://user:encrypted_password@dbserver:3306/medical?ssl_ca=/path/to/ca.pem </syntaxhighlight> == 数学原理 == Fernet基于AES-CBC模式,密钥派生使用PBKDF2: <math> K = PBKDF2(password, salt, iterations=100000, length=32) </math> 加密过程: <math> C = AES_{256}^{CBC}(K, IV, P) </math> == 常见问题 == '''Q:忘记Fernet密钥怎么办?''' A:无法恢复已加密数据,必须: 1. 重置所有加密凭证 2. 重新配置新密钥 3. 更新所有连接信息 '''Q:如何验证加密是否生效?''' 检查元数据库中的`connection`表: <syntaxhighlight lang="sql"> SELECT * FROM connection WHERE conn_id = 'your_connection'; </syntaxhighlight> 密码字段应为加密字符串(非明文)。 == 最佳实践 == * 将密钥存储在环境变量或密钥管理服务(如AWS KMS) * 禁止在版本控制中提交`airflow.cfg`含密钥的文件 * 定期监控密钥使用情况 * 为不同环境(开发/生产)使用独立密钥 通过合理配置Airflow加密,可显著提升工作流系统的整体安全性,满足企业级安全需求。 [[Category:大数据框架]] [[Category:Airflow]] [[Category:Airflow安全与身份验证]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)