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

同一机器下如何同时使用Gcloud服务账号与用户账号?

问题原因

gsutil的凭证加载逻辑和gcloud存在差异:它会读取所有可找到的boto配置文件(包括用户目录下的.boto,以及gcloud生成的legacy_credentials目录里的服务账号.boto文件)。只要这些配置里同时存在OAuth用户账号和OAuth服务账号两种类型的凭证,gsutil就会因无法自动确定使用优先级而抛出冲突错误。哪怕你用gcloud auth激活了服务账号,只要其他配置文件里还有用户账号的凭证记录,gsutil依然会触发这个问题。

可行解决方案

1. 临时指定凭证执行gsutil

直接在gsutil命令里指定服务账号对应的boto配置文件,无需修改全局设置:

gsutil --boto-config /data/home/user/.config/gcloud/legacy_credentials/upload@my-bucket.iam.gserviceaccount.com/.boto cp example.file gs://my-bucket/

这种方式完全不影响原用户账号的使用,每次需要用服务账号上传时添加参数即可。

2. 临时用环境变量覆盖凭证

在当前终端会话中设置BOTO_CONFIG环境变量,让gsutil只加载服务账号的配置:

export BOTO_CONFIG=/data/home/user/.config/gcloud/legacy_credentials/upload@my-bucket.iam.gserviceaccount.com/.boto
# 后续执行的gsutil命令都会使用服务账号凭证
gsutil cp example.file gs://my-bucket/

要切回原用户账号,只需取消该环境变量:

unset BOTO_CONFIG

3. 使用应用默认凭证(推荐)

设置gcloud的应用默认凭证为服务账号,这样gsutil会自动优先使用该凭证,同时原用户账号的凭证依然保留:

gcloud auth application-default login --key-file bucket-creds.json

之后无论gcloud的活跃账号是什么,gsutil都会默认使用这个应用默认凭证执行操作,除非手动指定其他配置。

4. 注释全局boto里的用户账号凭证

编辑全局.boto文件(路径/data/home/user/.boto),找到[Credentials]段下的用户账号相关配置,例如:

[Credentials]
gs_oauth2_refresh_token = xxxxxxx
gs_oauth2_client_id = xxxxxxx
gs_oauth2_client_secret = xxxxxxx

在这些行前添加#注释掉,这样gsutil就只会加载服务账号的凭证。需要使用原用户账号时,取消注释即可。

5. 用gcloud配置文件隔离账号

创建一个专门用于上传的gcloud配置文件,切换到该配置时自动使用服务账号:

# 创建新配置文件
gcloud config configurations create upload-profile
# 为该配置绑定服务账号
gcloud config set account upload@my-bucket.iam.gserviceaccount.com --configuration upload-profile
# 激活该配置
gcloud config configurations activate upload-profile
# 此时执行gsutil会自动使用服务账号凭证
gsutil cp example.file gs://my-bucket/
# 切回原用户账号的默认配置
gcloud config configurations activate default

内容的提问来源于stack exchange,提问作者Ed F

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 04:00:34