部署Flask应用时如何安全处理Google Ads API所需的YAML文件?
解决Google Ads API令牌安全部署问题的方案
方案一:直接用配置对象初始化客户端(更推荐)
Google Ads Python SDK完全支持不用YAML文件,直接通过字典配置初始化客户端,根本不需要依赖YAML文件。你可以把所有敏感信息存在环境变量里,直接读取构建配置:
import os from google.ads.googleads.client import GoogleAdsClient # 从环境变量读取所有配置项 config = { "developer_token": os.getenv("GOOGLE_ADS_DEVELOPER_TOKEN"), "client_id": os.getenv("GOOGLE_ADS_CLIENT_ID"), "client_secret": os.getenv("GOOGLE_ADS_CLIENT_SECRET"), "refresh_token": os.getenv("GOOGLE_ADS_REFRESH_TOKEN"), "login_customer_id": os.getenv("GOOGLE_ADS_LOGIN_CUSTOMER_ID"), "use_proto_plus": True } # 直接用配置字典初始化客户端 client = GoogleAdsClient(config=config)
方案二:从环境变量动态生成临时YAML文件
如果确实需要依赖YAML文件的加载方式,可以在应用启动时从环境变量读取配置,动态生成临时YAML文件,用完可自动清理:
import yaml import os from tempfile import NamedTemporaryFile from google.ads.googleads.client import GoogleAdsClient # 从环境变量读取配置 config = { "developer_token": os.getenv("GOOGLE_ADS_DEVELOPER_TOKEN"), "client_id": os.getenv("GOOGLE_ADS_CLIENT_ID"), "client_secret": os.getenv("GOOGLE_ADS_CLIENT_SECRET"), "refresh_token": os.getenv("GOOGLE_ADS_REFRESH_TOKEN"), "login_customer_id": os.getenv("GOOGLE_ADS_LOGIN_CUSTOMER_ID"), "use_proto_plus": True } # 生成临时YAML文件(存在render的临时目录,重启自动清理) with NamedTemporaryFile(mode='w', suffix='.yaml', delete=False) as f: yaml.dump(config, f) temp_config_path = f.name # 用临时文件初始化客户端 client = GoogleAdsClient.load_from_storage(temp_config_path) # 可选:使用后删除临时文件 os.unlink(temp_config_path)
render.com部署注意事项
- 所有敏感配置项都在render.com的「Environment」->「Variables」面板添加,不要硬编码或提交到代码仓库。
- 本地开发时可以用
python-dotenv库加载.env文件模拟环境变量,部署时直接用平台提供的变量即可。
内容的提问来源于stack exchange,提问作者Ryan Hemlock
相关产品推荐
相关产品推荐

