如何在 gcloud 中使用多个服务帐户?
Posted
技术标签:
【中文标题】如何在 gcloud 中使用多个服务帐户?【英文标题】:How to use multiple service accounts with 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]
问题:有什么方法可以配置gcloud
和gsutil
,以便它们用于在各自项目中执行的操作,而无需我在这些帐户之间手动切换所有时间?
我在一个项目中管理实例,并从另一个项目的存储桶中上传/下载文件。在命令之间必须一直执行gcloud set_account [ACCOUNT]
变得相当乏味。
我需要同时在两个项目中运行长时间运行的命令,这使我认为如果我激活/停用用于这些命令的帐户,我会陷入困境。
也许我唯一的选择是从两个不同的 Docker 容器运行 google-cloud-sdk?
【问题讨论】:
【参考方案1】:你有几个选择:
Cloud SDK 尊重指定属性的环境变量。 gcloud config set account
是gcloud 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]
切换帐户。
【讨论】:
很棒的答案,正是我所需要的。谢谢! 这非常简单。这应该是新的答案。以上是关于如何在 gcloud 中使用多个服务帐户?的主要内容,如果未能解决你的问题,请参考以下文章