NodeJS调用GCS STT遇ERROR 7权限拒绝错误排查求助
确认Speech-to-Text API的启用项目与密钥匹配:
核对密钥文件对应的GCP项目和启用STT API的项目是否完全一致。TTS正常仅能说明密钥对应的项目TTS已启用,不代表STT在同一项目启用。可以打开密钥文件,查看project_id字段,再去GCP控制台该项目的API库确认STT状态。验证服务账号的Owner权限是否在当前项目生效:
即使账号继承了Owner角色,也要确认该角色绑定是在当前项目层级生效。可以用GCloud CLI执行以下命令检查:gcloud projects get-iam-policy [你的项目ID] --filter="bindings.members:serviceAccount:[你的服务账号邮箱]"输出中如果没有
roles/owner的绑定记录,说明继承的权限可能未覆盖到当前项目,需要联系组织管理员确认IAM层级配置。检查密钥文件的有效性与正确性:
确认你使用的JSON密钥属于目标服务账号,查看密钥文件中的client_email字段是否与你关联的服务账号邮箱一致,避免因误使用旧密钥、其他账号密钥导致权限不匹配。查看Cloud Logging中的STT详细错误日志:
GCS日志管理器不会记录STT API的调用日志,你需要到Cloud Logging中搜索相关记录:- 选择对应的GCP项目
- 在日志过滤器中输入:
resource.type="speech.googleapis.com/Operation" AND severity=ERROR - 查看具体的错误详情,比如是否涉及跨项目资源访问(如其他项目的GCS桶)、权限缺失的具体权限项等。
排查STT调用的参数是否涉及外部资源:
如果你的STT请求中引用了其他GCP项目的资源(比如gs://其他项目的存储桶/音频文件),即使当前服务账号是本项目Owner,也没有访问外部项目资源的权限。这种情况下需要给服务账号添加对应外部项目的存储桶访问权限,或者将音频文件移到当前项目的存储桶中。等待权限生效时间:
IAM权限变更后通常需要1-10分钟才能完全生效,如果是刚配置完就测试,建议等待一段时间后再重试。
内容的提问来源于stack exchange,提问作者Mor Sagmon

