You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用服务账号调用Google Cloud Speech异步转录私有GCS音频遇权限拒绝

解决Google Cloud Speech异步请求访问非公开GCS文件的权限问题

我来帮你搞定这个权限问题!核心原因是你的Speech-to-Text服务账号没有读取目标GCS存储桶/文件的权限——公开文件能正常工作,是因为公开资源允许所有用户(包括Speech服务的后台进程)访问,而非公开文件则需要明确授权。下面是一步步的解决方法:

1. 确认你正在使用的服务账号

先搞清楚代码里用的是哪个服务账号:

  • 本地运行的话,检查环境变量 GOOGLE_APPLICATION_CREDENTIALS 指向的JSON密钥文件,里面的client_email字段就是服务账号邮箱(格式类似 xxx@xxx.iam.gserviceaccount.com)。
  • 如果是在GCP内部服务(比如Cloud Functions、Compute Engine)上运行,查看该服务的默认服务账号。

2. 给服务账号添加GCS读取权限

你需要给这个服务账号授予Storage Object Viewer角色(或者更精细的权限,按需选择),有两种操作方式:

方式一:通过GCP控制台操作

  • 打开GCP控制台的【Cloud Storage】页面,找到目标存储桶。
  • 点击存储桶右上角的【权限】选项卡。
  • 点击【添加权限】,在【新成员】输入框填入你的服务账号邮箱。
  • 在【角色】下拉菜单中,找到【Cloud Storage】->【Storage Object Viewer】,选中后点击【保存】。

方式二:通过gcloud命令行操作

打开终端,运行以下命令(替换[SERVICE_ACCOUNT_EMAIL]和[BUCKET_NAME]为你的实际信息):

gcloud storage buckets add-iam-policy-binding gs://[BUCKET_NAME] \
  --member="serviceAccount:[SERVICE_ACCOUNT_EMAIL]" \
  --role="roles/storage.objectViewer"

3. 验证权限是否生效

添加权限后,用服务账号直接尝试读取GCS文件验证:

# 替换为你的服务账号密钥路径、存储桶和文件路径
export GOOGLE_APPLICATION_CREDENTIALS="/path/to/your/service-account-key.json"
gcloud storage cat gs://[BUCKET_NAME]/[AUDIO_FILE_PATH]

只要不报错(音频文件会输出二进制内容,这是正常的),就说明权限配置正确了。

4. 额外注意事项

  • 如果你只需要访问特定文件而非整个桶,可以给服务账号添加单个文件的权限,这样更安全。
  • 确认Speech-to-Text API已经启用(你公开文件能运行,大概率已经启用,但可以再核对下)。
  • 若使用VPC Service Controls,需确保Speech-to-Text服务被允许访问你的GCS存储桶。

内容的提问来源于stack exchange,提问作者Davide Visentin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:12:30