GCSFuse权限问题求助:已激活服务账号仍报403,报错账号非当前激活账号
解决GCSFuse使用指定服务账号却触发默认Compute账号报错的问题
我之前踩过一模一样的坑!你遇到的问题核心是:gcsfuse默认会优先从Compute Engine的元数据服务器获取默认服务账号凭据,哪怕你用gcloud auth activate-service-account激活了其他账号,它也会绕过gcloud的缓存凭据,直接用虚拟机自带的那个xxxxxx-compute@developer.gserviceaccount.com账号。
下面给你两个靠谱的解决办法:
方法一:通过环境变量强制指定服务账号密钥
这是最直接的方式,让gcsfuse明确使用你想要的服务账号:
- 先导出目标服务账号的密钥文件(如果还没做的话):
gcloud iam service-accounts keys create /path/to/your-key.json --iam-account=serviceaccname@[你的项目ID].iam.gserviceaccount.com - 挂载时设置环境变量指向这个密钥文件:
GOOGLE_APPLICATION_CREDENTIALS=/path/to/your-key.json gcsfuse --debug_gcs --foreground cloudbuckethere /backup
方法二:强制gcsfuse使用gcloud CLI的凭据
如果你不想管理密钥文件,可以让gcsfuse用gcloud缓存的凭据,不过得确保gcloud的默认账号是你激活的那个:
- 先检查当前gcloud的默认账号:
gcloud config get-value account - 如果输出不是你的
serviceaccname,就设置默认账号:gcloud config set account serviceaccname@[你的项目ID].iam.gserviceaccount.com - 挂载时加上
--gcsfs-use-gcloud-sdk参数,强制gcsfuse使用gcloud的凭据:gcsfuse --gcsfs-use-gcloud-sdk --debug_gcs --foreground cloudbuckethere /backup
最后别忘了确认:你的serviceaccname服务账号确实拥有目标存储桶的storage.objects.list权限(可以在IAM控制台给它绑定Storage Object Viewer角色,或者更细粒度的自定义角色)。
内容的提问来源于stack exchange,提问作者James Tan
相关产品推荐
相关产品推荐

