如何使用不同的服务帐户凭据验证google API?

时间:2016-01-19 17:58:05

标签: authentication google-bigquery google-cloud-storage google-cloud-platform gcloud

任何曾经不幸地以编程方式与全面的谷歌CLI二进制文件进行交互的人都会意识到,使用gcloudgsutilbq等进行身份验证,当你需要在不同的项目中工作时,尤其远非直观或微不足道。

我正在运行与Google Cloud Storage和BigQuery交互的各种cron作业,用于不同的项目。由于cron作业可能会重叠,因此重命名配置文件显然不是一种选择,任何理智的人也不会采用这种方法。

肯定有某种方法可以将服务帐户的密钥对文件的路径传递给这些CLI二进制文件,但bq help不产生任何效果。

谷歌文档虽然详细,但在很大程度上是无用的,一个人参观了OAuth2的工作方式等,而不是解释一下非常常见的要求,相对于如何实际验证服务帐户没有运行修改中央配置文件的命令。

任何开明的人都能告诉我Google的工程师是否决定添加一项功能,就像将服务帐户的密钥对文件路径传递给gsutilbq一样简单?或许我可以简单地导出一些变量,以便他们知道用于身份验证的密钥对文件?

我意识到这些简单化的方法可能是对情报的侮辱,但我们并不关心利用核聚变,所以我们甚至不需要考虑亚马逊如何正确地使用他们的认证方法进行比较......

1 个答案:

答案 0 :(得分:5)

Cloud SDK中的配置对用户来说是全局的,但您可以指定要在每个命令的基础上使用该配置的哪些方面。要完成您想要做的事情,您可以:

gcloud auth activate-service-account foo@developer.gserviceaccount.com --key-file ...
gcloud auth activate-service-account bar@developer.gserviceaccount.com --key-file ...

此时,两组凭据都在您的全局凭证存储中。 现在你可以运行:

gcloud --account foo@developer.gserviceaccount.com some-command
gcloud --account bar@developer.gserviceaccount.com some-command

并行,每个人都会使用给定的帐户而不会干扰。

更大的扩展是'配置'它做同样的事情,但是对于你的整套配置(包括账户和项目等设置)。

# Create first configuration
gcloud config configurations create myconfig
gcloud config configurations activate myconfig
gcloud config set account foo@developer.gserviceaccount.com
gcloud config set project foo

# Create second configuration
gcloud config configurations create anotherconfig
gcloud config configurations activate anotherconfig
gcloud config set account bar@developer.gserviceaccount.com
gcloud config set project bar

您可以说出基于每个命令使用哪种配置。

gcloud --configuration myconfig some-command
gcloud --configuration anotherconfig some-command

您可以通过运行gcloud topic configurations

来详细了解配置

所有属性都有相应的环境变量,允许您为单个命令调用或终端会话设置该特定属性。他们采取以下形式:

CLOUDSDK_<SECTION>_<PROPERTY>

例如:CLOUDSDK_CORE_ACCOUNT

您可以通过运行gcloud help config

来查看所有可用的配置设置

--configuration标志的等价物是:CLOUDSDK_ACTIVE_CONFIG_NAME

如果您真的想要完全隔离,您还可以通过将CLOUDSDK_CONFIG设置为您选择的目录来更改Cloud SDK的配置目录。请注意,如果执行此操作,配置将完全独立,包括凭据存储,所有配置,日志等。