Google compute engine 如何在gcloud中使用多个服务帐户?

Google compute engine 如何在gcloud中使用多个服务帐户?,google-compute-engine,gcloud,Google Compute Engine,Gcloud,我有两个谷歌云服务账户;我的两个项目各一个 # ACCOUNTS editor@someproj-1.iam.gserviceaccount.com editor@someproj-2.iam.gserviceaccount.com 在执行命令之前,我可以告诉gcloud我需要使用哪个帐户: gcloud set account [ACCOUNT] 问题:我有没有办法配置gcloud和gsutil以便它们用于各自项目中执行的操作,而无需我一直手动切换这些帐户 我在一个项目中管理实例,在另一

我有两个谷歌云服务账户;我的两个项目各一个

# ACCOUNTS
editor@someproj-1.iam.gserviceaccount.com
editor@someproj-2.iam.gserviceaccount.com
在执行命令之前,我可以告诉
gcloud
我需要使用哪个帐户:

gcloud set account [ACCOUNT]
问题:我有没有办法配置
gcloud
gsutil
以便它们用于各自项目中执行的操作,而无需我一直手动切换这些帐户


我在一个项目中管理实例,在另一个项目中从bucket上传/下载文件。在两个命令之间必须始终执行
gcloud set\u account[account]
,这会变得相当乏味

我需要同时在两个项目中运行长时间运行的命令,这会使我认为如果我激活/取消激活用于这些命令的帐户,我将陷入困境


也许我唯一的选择是从两个不同的Docker容器运行google cloud sdk?

这里有几个选项:

  • CloudSDK尊重指定属性的环境变量
    gcloud config set account
    gcloud config set core/account
    的缩写,因此相应的属性是
    CLOUDSDK\u core\u account

    您可以执行以下操作:

    $ CLOUDSDK_CORE_ACCOUNT=email1@domain1.com gcloud ...
    $ CLOUDSDK_CORE_ACCOUNT=email2@domain2.com gcloud ...
    
    这会让你得到你感兴趣的结果

  • 如果需要更改多个属性,CloudSDK提供了一个抽象。有关完整详细信息,请参阅文档,但您可以运行:

    $ gcloud config configurations create my-project1-config
    $ gcloud config configurations activate my-project1-config
    $ gcloud auth login  # or activate-service-account
    $ gcloud config set project project1  # and any other configuration you need to do
    $ 
    $ gcloud config configurations create my-project2-config
    $ gcloud config configurations activate my-project2-config
    $ gcloud auth login  # or activate-service-account
    $ gcloud config set project project2  # and any other configuration you need to do
    $
    $ CLOUDSDK_ACTIVE_CONFIG_NAME=my-project1-config gcloud ...
    $ CLOUDSDK_ACTIVE_CONFIG_NAME=my-project2-config gcloud ...
    
  • 在最极端的情况下,您可以维护单独的CloudSDK配置目录。默认值(on*nix)为
    ~/.config/gcloud

    $ CLOUDSDK_CONFIG=/tmp/tmpconfig1 gcloud auth login
    $ CLOUDSDK_CONFIG=/tmp/tmpconfig2 gcloud auth login
    

扎卡里的答案非常有用,但使用gcloud的配置有一种更简单的方法

运行
gcloud config configurations list
以显示配置列表。如果你还没有做任何修改,它只会列出你的当前帐户、项目等的默认设置

使用
gcloud config configurations创建新配置Create[config name]

> gcloud config configurations create testconfig
Created [testconfig].
Activated [testconfig].
新配置现在将处于活动状态,请继续使用
gcloud init
进行设置:

> gcloud init
Welcome! This command will take you through the configuration of gcloud.
然后它会问你一系列问题:

  • 当它要求您选择要使用的配置时,选择
    [1]使用新设置重新初始化此配置[testconfig]
  • 然后它会要求您选择或登录一个帐户
  • 然后它会要求您选择或创建一个项目
  • 最后,它将询问您是否要为项目设置默认区域。这取决于你;在所有内容都位于同一区域的项目中,继续并设置它


使用
gcloud config configurations切换帐户激活[config name]

要添加到此答案,gcloud支持--account和--configuration标志。--account的可能值可以通过
gcloud auth list
列出,配置的可能值可以通过
gcloud config configurations list
列出。但是这两个标志不能与gsutil或bq一起使用。有什么理由我在创建新实例时不勾选“允许完全访问所有云API”?我在GCloud文档中发现了这句话:“一般来说,谷歌建议需要调用谷歌API的每个实例都应该作为一个服务帐户运行,拥有该实例完成其工作所需的最低权限。”。但是读到这篇文章时,我不明白为什么会有这样的建议。另一方面,我有过创建实例的经验,然后在我忘记创建实例的细节后的一到两个月内,我想访问一些方便的谷歌API,然后我必须“搜索引擎”获取授予我的服务帐户的权限的方法。所以我可能会继续给予比我需要的更多的力量。我主要关心的是1。有人以某种方式访问我的虚拟机并滥用这些权限,但可能2。后来我可能会不小心弄坏一些东西,因为我有比我需要的更多的能力。神奇的答案,正是我需要的。非常感谢。
Your Google Cloud SDK is configured and ready to use!