设置GOOGLE_APPLICATION_CREDENTIALS后gcloud无法获取凭证问题
Google Cloud Text-to-Speech curl调用授权问题排查
问题核心原因
你遇到的问题主要出在环境变量未正确导出和路径解析错误两个方面,导致gcloud无法读取到服务账号密钥,进而无法获取有效访问令牌,最终触发403权限错误。
具体错误点及解决方法
1. 绝对路径中~未被正确解析
终端中的~需要shell自动展开为用户主目录路径,但直接将~/Projects/...赋值给环境变量时,部分shell不会自动解析~,导致实际路径无效,所以nano打开空白文档。
- 解决:替换
~为用户主目录的完整绝对路径,比如/home/your-username/Projects/dbsan2/google-credentials.json,或者用$HOME代替~(shell会自动解析$HOME):GOOGLE_APPLICATION_CREDENTIALS="$HOME/Projects/dbsan2/google-credentials.json"
2. 环境变量未导出,子进程无法读取
仅设置变量值但未用export导出的话,gcloud这类子进程无法继承该环境变量,所以会提示无法自动获取凭据。
- 解决:设置环境变量时必须加上
export,两种路径设置方式都要遵循:# 方式1:相对路径(当前工作目录下) export GOOGLE_APPLICATION_CREDENTIALS="google-credentials.json" # 方式2:绝对路径 export GOOGLE_APPLICATION_CREDENTIALS="$HOME/Projects/dbsan2/google-credentials.json" - 验证:设置后执行
echo $GOOGLE_APPLICATION_CREDENTIALS确认路径正确,再单独运行gcloud auth application-default print-access-token,能返回一串长字符串说明凭据配置成功。
3. 403错误的根源
你看到的请求缺少有效API密钥错误是因为gcloud没拿到令牌,导致Authorization: Bearer后面是空值,服务端默认按无API密钥的请求处理。解决上面两个问题后,重新运行curl命令即可正常获取访问令牌,授权通过。
额外验证步骤
- 确保服务账号拥有
Text-to-Speech Synthesizer权限(roles/texttospeech.synthesizer),避免因权限不足引发新的错误。 - 确认
request.json的格式符合Google Text-to-Speech的API要求,比如包含input、voice、audioConfig三个必填字段。
内容的提问来源于stack exchange,提问作者Patrick Vellia
相关产品推荐
相关产品推荐

