使用服务账户及Python库连接Google Ads API遇权限错误求助
解决服务账户连接Google Ads API的认证错误
核心问题分析
你遇到的unauthorized_client错误,主要是权限配置不完整或参数语法错误导致的——Google Ads API的服务账户认证依赖「服务账户的 impersonation 权限」+「被 impersonate 用户的Google Ads权限」,和GCP的Owner等资源权限无直接关联。
分步解决方案
1. 修正代码语法错误
配置里的use_proto_plus用了小写true,这是JavaScript语法,Python需使用大写布尔值True:
from google.ads.googleads.client import GoogleAdsClient credentials = { "developer_token": "xXxxxXxxxXxxXXXXxXxxX", "use_proto_plus": True, # 改为Python标准布尔值 "json_key_file_path": "./path_to_json.json", "impersonated_email": "gcp_and_ads_admin_email", "login_customer_id": "XXXXXXXXXX" # 确保是10位纯数字,不带横杠 } client = GoogleAdsClient.load_from_dict(credentials)
2. 配置GCP侧Impersonation权限
在GCP控制台IAM页面,给你的服务账户添加Service Account Token Creator角色——这是服务账户生成被 impersonate 用户访问令牌的必要权限。
3. 配置Google Ads侧用户权限
- 确保
impersonated_email对应的邮箱是Google Ads账号的管理员用户:在Google Ads后台「访问与权限」中添加该用户,并分配「管理员」角色。 - 该邮箱必须关联到你的Google Ads账号,且账号状态正常(未被暂停)。
4. 验证基础配置
- 确认GCP控制台已启用Google Ads API(在API库中搜索并启用)。
- 检查开发者令牌有效性:令牌需与你的Google Ads账号绑定,且处于活跃状态。
- 确保服务账户JSON密钥文件路径正确,运行脚本的用户有读取该文件的权限。
额外注意事项
服务账户认证Google Ads API的核心逻辑是:服务账户通过Impersonation机制,模拟拥有Google Ads权限的用户身份发起请求,因此服务账户本身不需要在Google Ads后台添加权限,只需确保它能模拟的用户具备足够的Ads权限即可。
内容的提问来源于stack exchange,提问作者Max
相关产品推荐
相关产品推荐

