You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Apache Airflow中不依赖本地os.environ用Python连接GCP

Airflow 安全连接GCP的最佳实践

1. 使用Airflow内置GCP连接(推荐方案)

Airflow原生支持Google Cloud类型的连接,可直接在UI中配置GCP服务账号的JSON密钥,无需依赖本地文件或硬编码环境变量。代码中通过Airflow的连接管理器获取凭证,安全性与可维护性更强。

修改身份令牌获取函数

利用GoogleCloudHook替代原生google.auth.default(),直接从Airflow连接中读取认证信息:

from airflow.providers.google.common.hooks.base_google import GoogleCloudHook
from google.auth.transport.requests import Request
from google.oauth2 import id_token

def get_identity_token(service_url, gcp_conn_id="google_cloud_default"):
    # 通过Airflow连接ID获取已认证的凭证
    hook = GoogleCloudHook(gcp_conn_id=gcp_conn_id)
    creds = hook.get_credentials()
    
    # 自动刷新过期凭证
    if creds.expired and creds.refresh_token:
        creds.refresh(Request())
    
    # 基于获取的凭证生成身份令牌
    token = id_token.fetch_id_token(Request(), service_url, credentials=creds)
    return token

Airflow GCP连接配置步骤

  • 进入Airflow UI → 点击左侧菜单Admin → Connections → Add a new record
  • 连接类型选择Google Cloud
  • 在Keyfile JSON字段直接粘贴GCP服务账号的完整JSON密钥内容
  • 设置Conn Id(默认可使用google_cloud_default,自定义名称需与函数中gcp_conn_id参数对应)
  • 可选:填写Project Id字段以指定默认GCP项目

2. 放弃本地环境变量方案的核心原因

  • 本地文件依赖在Airflow集群部署时需要同步文件,易出现权限缺失或文件遗漏问题
  • 环境变量在多节点集群中难以统一管理,且存在明文泄露风险
  • Airflow连接管理器会加密存储敏感密钥(需配置fernet_key启用加密),安全性远高于本地配置

3. 额外安全规范

  • 给GCP服务账号分配最小必要权限,避免使用管理员级别的账号
  • 启用Airflow元数据库加密,通过fernet_key配置项加密所有连接敏感数据
  • 禁止在DAG代码中直接写入任何凭证内容,完全依赖Airflow连接管理器管理认证信息

内容的提问来源于stack exchange,提问作者mrd44

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 15:09:53