【问题标题】:How to use multiple service accounts with gcloud?如何在 gcloud 中使用多个服务帐户?
【发布时间】:2017-12-02 20:36:55
【问题描述】:

我有两个 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?

【问题讨论】:

    标签: google-compute-engine gcloud


    【解决方案1】:

    你有几个选择:

    • 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
      

    【讨论】:

    • 要添加到这个答案,gcloud 支持 --account 和 --configuration 标志。 --account 的可能值可以通过gcloud auth list 列出,配置的可能值可以通过gcloud config configurations list 列出。但这两个标志不能与 gsutil 或 bq 一起使用。
    • 创建新实例时是否有理由不勾选“允许完全访问所有 Cloud API”?我在 GCloud 文档中找到了这一行:“一般而言,Google 建议需要调用 Google API 的每个实例都应作为服务帐户运行,并具有该实例完成其工作所需的最低权限。” .但是读到here,我不明白为什么这是推荐的
    • 另一方面,我有过创建实例的经验,然后在我忘记创建实例的细节之后的一两个月内,我想访问一些方便的 Google API,然后我必须“搜索引擎”来授予我的服务帐户权限。所以我可能会继续授予比我需要更多的权力。我主要担心 1. 有人以某种方式访问​​我的虚拟机并滥用这些权限,但也许 2. 由于我拥有的权力超出了我的需要,我以后可能会意外破坏某些东西
    【解决方案2】:

    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]切换帐户。

    【讨论】:

    • 很棒的答案,正是我所需要的。谢谢!
    • 这非常简单。这应该是新的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-10
    • 2020-03-22
    • 2014-07-04
    • 2021-10-24
    • 1970-01-01
    • 1970-01-01
    • 2017-03-15
    相关资源
    最近更新 更多