Airflow DAG调用Connection无法获取解密后密码及extra字段问题
排查修复步骤
- 第一步:排除日志脱敏干扰
Airflow默认开启敏感字段日志脱敏机制,所有连接的密码、extra字段内容在打印到日志时会被自动替换为***,不代表实际获取到的就是掩码值。在DAG中添加测试代码验证实际取值:
如果输出显示值实际已获取,直接使用对应字段即可,无需关注日志中的星号展示。from airflow.hooks.base import BaseHook def verify_conn(): conn = BaseHook.get_connection([conn_id]) # 验证值是否真的为掩码,而非日志输出时被替换 pwd_real = conn.password != "***" extra_real = conn.extra_dejson.get("token_host") != "***" print(f"密码实际已获取:{pwd_real}") print(f"extra字段实际已获取:{extra_real}") # 可打印长度辅助验证 print(f"密码长度:{len(conn.password) if conn.password else 0}") - 第二步:确认运行中Worker的配置有效性
你之前用docker-compose run验证的是临时启动容器的配置,不代表正在运行的Worker服务加载的配置正确,执行以下操作验证:- 重启所有Airflow服务加载最新配置:
docker-compose down && docker-compose up -d - 进入正在运行的Worker容器验证配置:
同时检查Webserver、Scheduler容器的fernet key,确保三者完全一致。# 注意用exec而非run,访问已启动的运行容器 docker-compose exec airflow-worker airflow config get-value core fernet_key
- 重启所有Airflow服务加载最新配置:
- 第三步:确认Worker连接的元数据库正确性
检查Worker节点的元数据库连接配置,确保和Webserver、CLI使用的是同一个元数据库,避免Worker从错误的库中读取到非对应加密的连接信息。 - 第四步:修复版本已知bug
Airflow 2.2.0存在多个连接字段在Worker侧解密异常的已知问题,如果上述排查都正常,可升级到2.2.x分支的最终稳定补丁版本2.2.5,即可解决版本自带的解密缺陷。
内容的提问来源于stack exchange,提问作者davidverweij
相关产品推荐
相关产品推荐

