能否从Google Cloud普通用户生成JSON密钥文件用于Airflow认证?
解决办法
方法1:用用户账号的OAuth2刷新令牌替代ServiceAccount密钥
- 针对Google Cloud场景,你可以生成test@gmail.com账号的刷新令牌来完成认证:
- 去Google Cloud控制台创建一个桌面应用类型的OAuth客户端ID。
- 在本地或Airflow服务器上执行
gcloud auth application-default login,用test@gmail.com账号登录,完成后会生成application_default_credentials.json文件,里面包含长期有效的刷新令牌。 - 在Airflow的Google Cloud连接配置里,指定这个JSON文件的路径,或者直接把文件内容粘贴到对应的字段中,Airflow会自动用这个令牌完成认证。
- 注意:只要你不主动撤销账号权限,刷新令牌一直有效,但要保证Airflow环境能正常访问Google的认证服务器。
方法2:利用工作负载身份(Airflow跑在Google Cloud上时可用)
- 如果你的Airflow部署在GKE、GCE这类Google Cloud资源上,可以直接给运行Airflow的资源绑定IAM权限,不用额外密钥:
- 给Airflow所在的GCE实例或者GKE节点的服务账号,授予目标存储桶的访问角色(比如
roles/storage.objectAdmin)。 - 在Airflow连接配置里选择自动检测认证方式,Airflow会自动继承所在资源的身份去访问存储桶。
- 给Airflow所在的GCE实例或者GKE节点的服务账号,授予目标存储桶的访问角色(比如
方法3:申请使用现有ServiceAccount的密钥
- 如果团队里已经有具备存储桶访问权限的ServiceAccount,不用自己创建,直接找管理员申请它的JSON密钥文件,然后在Airflow连接里配置这个密钥就行。
方法4:直接配置用户账号的OAuth2信息(部分场景支持)
- 有些版本的Airflow Google Cloud连接支持直接用OAuth2信息认证:
- 在连接配置里选择
OAuth2认证类型。 - 填入之前生成的OAuth客户端ID、客户端密钥,还有用
gcloud命令生成的刷新令牌,也能完成认证。
- 在连接配置里选择
内容的提问来源于stack exchange,提问作者zzob
相关产品推荐
相关产品推荐

