调用Google Cloud Vision API返回403项目权限不足问题求助
问题复现
- 操作依据:Google Cloud Vision API CLI快速入门教程
- 前置操作已完成:注册Google Cloud账号、新建项目、开启Vision API、完成账单设置
- 执行的cURL请求:
curl -X POST \ -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \ -H "Content-Type: application/json; charset=utf-8" \ -H "X-Goog-User-Project: dragon-ocr-324006" \ https://vision.googleapis.com/v1/images:annotate -d @request.json
- 返回错误响应:
{ "error": { "code": 403, "message": "Caller does not have required permission to use project dragon-ocr-324006. Grant the caller the Owner or Editor role, or a custom role with the serviceusage.services.use permission, by visiting https://console.developers.google.com/iam-admin/iam/project?project=dragon-ocr-324006 and then retry (propagation of new permission may take a few minutes).", "status": "PERMISSION_DENIED", "details": [ { "@type": "type.googleapis.com/google.rpc.Help", "links": [ { "description": "Google developer console IAM admin", "url": "https://console.developers.google.com/iam-admin/iam/project?project=dragon-ocr-324006" } ] }, { "@type": "type.googleapis.com/google.rpc.ErrorInfo", "reason": "USER_PROJECT_DENIED", "domain": "googleapis.com", "metadata": { "consumer": "projects/dragon-ocr-324006", "service": "vision.googleapis.com" } } ] } }
- 已尝试的排查操作:
- 确认账号在项目中持有Owner权限
- 删除本地gcloud配置文件
rm -rf ~/.config/gcloud后重新执行gcloud auth application-default login,令牌可正常生成 - 新注册的其他账号执行相同操作可正常返回结果
问题解答
错误含义
该403 PERMISSION_DENIED错误表示:发起API请求的身份没有serviceusage.services.use权限,无法使用指定项目dragon-ocr-324006的Vision API服务,账单无法关联到该项目。
caller身份说明
此处的caller就是你gcloud auth application-default print-access-token生成的访问令牌对应的账号,也就是你执行gcloud auth application-default login时登录的谷歌账号,你的理解是正确的。
第一个账号配置异常的排查方向
按优先级从高到低排查:
- 核对登录账号一致性:执行
gcloud auth list,查看带*标记的激活账号,是否和你在后台确认过Owner权限的账号完全一致,很多用户会因为谷歌账号多登错账号而不自知。 - 核对项目ID正确性:确认curl请求中
X-Goog-User-Project参数的值是项目的唯一ID,而非项目显示名称,项目ID和项目名称是两个不同的属性,填错会直接触发权限错误。 - 检查是否开启了服务账号冒充:执行
gcloud config get-value auth/impersonate_service_account,如果返回了服务账号地址,说明你本地配置了默认冒充服务账号,即便你登录了个人账号,生成的令牌也属于该服务账号,此时需要执行gcloud config unset auth/impersonate_service_account清除配置,重新登录后再测试。 - 检查组织级策略限制:如果你的第一个账号属于某企业/组织,可能组织管理员设置了组织级的服务使用限制、IAM策略限制,这类上层策略优先级高于项目级的Owner权限,会导致你即便有项目Owner权限也无法调用API,而新注册的个人账号不属于任何组织,没有这类限制所以可以正常调用。
- 等待权限传播:如果是刚给账号加的Owner权限,最长需要等待15分钟让权限全网生效,刚加完立刻测试会临时触发该错误。
内容的提问来源于stack exchange,提问作者P i
相关产品推荐
相关产品推荐

