Airflow UI无法编辑spark_default连接报fernet.InvalidToken错误如何解决
问题核心原因
Fernet是Airflow用来加密存储敏感数据(比如连接配置的密码、extra字段内容)的对称加密算法,你遇到的cryptography.fernet.InvalidToken报错,本质是当前配置的Fernet Key,无法解密之前已经存在元数据库里的spark_default连接的加密内容。
你虽然按官方要求生成导出了Fernet Key,但问题出在部署的时间顺序:
- 容器第一次启动、初始化Airflow元数据库时,如果你当时没有提前配置固定的Fernet Key,Airflow会自动生成一个临时密钥,初始自带的
spark_default连接的敏感字段就是用这个临时密钥加密存储的 - 后续你手动生成新的Fernet Key并配置后,旧的加密内容用新密钥无法解密,就会触发该报错
修复方案
方案1:删除旧的
spark_default连接后重建(推荐,不影响其他已有配置)
进入Airflow的元数据库,执行SQL删除旧连接:DELETE FROM connection WHERE conn_id = 'spark_default';重启Airflow服务后,直接在UI里新建一个ID为
spark_default的Spark连接,填写对应主机、端口、extra配置即可,新连接会用你当前配置的Fernet Key加密存储,不会再出现解密失败问题。方案2:重置元数据库(仅适合还没有自定义DAG、连接配置的全新部署场景)
先停掉所有Airflow服务,执行重置命令:airflow db reset重置完成后再启动服务,所有初始连接都会用你当前配置的Fernet Key加密。
后续部署注意事项
容器化部署Airflow时,一定要在第一次启动、初始化元数据库之前,就把固定的AIRFLOW__CORE__FERNET_KEY环境变量配置到docker-compose的env配置或者.env文件中,不要使用动态生成的临时密钥,避免后续密钥变更导致所有加密的敏感数据失效。
内容的提问来源于stack exchange,提问作者Minura Punchihewa
相关产品推荐
相关产品推荐

