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

如何本地以服务账号运行Cloud Run应用,同时保留gcloud用户身份?

解决方案:分离应用与gcloud身份,多应用使用不同服务账号

一、让应用用服务账号,gcloud保留用户身份

你不需要覆盖默认的应用凭据,而是为服务账号生成独立的临时凭据文件,通过环境变量让Go SDK加载这个文件,gcloud则继续使用你的用户身份:

  1. 生成服务账号的临时应用凭据文件(指定路径,不覆盖默认)

    gcloud auth application-default login \
      --impersonate-service-account=your-service-account@your-project.iam.gserviceaccount.com \
      --cred-file=~/.config/gcloud/sa-impersonate-creds.json
    

    这个命令生成的凭据是临时的,默认有效期1小时,到期后重新执行命令即可刷新。

  2. 运行Go应用时,指定环境变量加载该凭据
    在启动应用的终端中设置环境变量:

    # Linux/macOS
    GOOGLE_APPLICATION_CREDENTIALS=~/.config/gcloud/sa-impersonate-creds.json go run your-app.go
    
    # Windows PowerShell
    $env:GOOGLE_APPLICATION_CREDENTIALS="~/.config/gcloud/sa-impersonate-creds.json"; go run your-app.go
    

    这样Go SDK会使用服务账号的临时凭据,而gcloud命令不受影响——它读取的是自身的凭据存储,不会读取GOOGLE_APPLICATION_CREDENTIALS环境变量,依然使用你原本的用户身份。

二、同时运行多个应用,使用不同服务账号

为每个服务账号生成独立的凭据文件,然后分别设置环境变量启动应用即可:

  1. 为每个服务账号生成专属凭据文件

    # 服务账号1
    gcloud auth application-default login \
      --impersonate-service-account=sa1@your-project.iam.gserviceaccount.com \
      --cred-file=~/.config/gcloud/sa1-creds.json
    
    # 服务账号2
    gcloud auth application-default login \
      --impersonate-service-account=sa2@your-project.iam.gserviceaccount.com \
      --cred-file=~/.config/gcloud/sa2-creds.json
    
  2. 在不同终端分别启动应用,指定对应的凭据文件

    # 终端1:运行应用1,用sa1
    GOOGLE_APPLICATION_CREDENTIALS=~/.config/gcloud/sa1-creds.json go run app1.go
    
    # 终端2:运行应用2,用sa2
    GOOGLE_APPLICATION_CREDENTIALS=~/.config/gcloud/sa2-creds.json go run app2.go
    

关键说明

  • 这种方式使用的是临时 impersonate 凭据,不是长期服务账号密钥,符合Google Cloud的最佳实践,无需担心密钥泄露风险。
  • gcloud的身份与应用的身份完全分离:gcloud始终使用你通过gcloud auth login登录的用户身份,应用则通过环境变量指定的临时凭据文件使用服务账号。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 18:33:17