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

时间:2017-06-29 08:35:58

标签: google-compute-engine gcloud

我有两个Google Cloud服务帐户;我的两个项目各占一个。

# ACCOUNTS
editor@someproj-1.iam.gserviceaccount.com
editor@someproj-2.iam.gserviceaccount.com

我可以告诉gcloud在执行命令之前我需要使用哪个帐户:

gcloud set account [ACCOUNT]

问题:我有什么方法可以配置gcloudgsutil,这样它们就可以用于各自项目中执行的操作,而无需在这些帐户一直是手动吗?

我在一个项目中管理实例,我从另一个项目中的存储桶上传/下载文件。在中间命令之间不断执行gcloud set_account [ACCOUNT]变得非常繁琐。

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

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

2 个答案:

答案 0 :(得分:27)

这里有几个选项:

  • Cloud SDK尊重指定属性的环境变量。 gcloud config set accountgcloud config set core/account的简写,因此相应的属性为CLOUDSDK_CORE_ACCOUNT

    您可以执行以下操作:

    $ CLOUDSDK_CORE_ACCOUNT=email1@domain1.com gcloud ...
    $ CLOUDSDK_CORE_ACCOUNT=email2@domain2.com gcloud ...
    

    哪个可以为您提供您感兴趣的结果。

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

    $ 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 ...
    
  • 在最极端的情况下,您可以维护单独的Cloud SDK配置目录。默认值(在* nix上)为~/.config/gcloud

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

答案 1 :(得分:6)

Zachary的答案非常有用,但是有一种使用gcloud的配置的简便方法。

运行gcloud config configurations list以显示您的配置列表。如果您还没有做任何事情,它只会列出default以及您当前处于活动状态的任何帐户,项目等。

使用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] Re-initialize this configuration [testconfig] with new settings
  • 然后它将要求您选择或登录帐户。
  • 然后它将要求您选择或创建一个项目。
  • 最后,它将询问您是否要为项目设置默认区域。由你决定;对于所有项目都在同一区域中的项目,请继续进行设置。

Your Google Cloud SDK is configured and ready to use!

使用gcloud config configurations activate [config name]切换帐户。