authentication - 如何使用不同的服务帐户凭据对 google API 进行身份验证?

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

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

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

肯定有某种方法可以将服务帐户的 key 对文件的路径传递给这些 CLI 二进制文件,但是 bq help 什么也没产生。

谷歌文档虽然冗长,但在很大程度上是无用的,带一个人参观 OAuth2 的工作原理等,而不是解释什么肯定是一个非常常见的要求,相对,如何在不运行的情况下实际验证服务帐户修改中央配置文件的命令。

有没有开明的人能告诉我谷歌的工程师是否决定添加一个像将服务帐户的 key 对文件的路径传递给 gsutilbq 之类的简单功能?或者我可以简单地导出一些变量,以便他们知道使用哪个 key 对文件进行身份验证?

我意识到这些简单化的方法可能是对情报的侮辱,但我们并不关心利用核聚变,所以相比之下,我们甚至不需要考虑亚马逊在他们的身份验证方法上做得如此正确......

最佳答案

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
所有属性都有相应的环境变量,允许您为单个命令调用或终端 session 设置该特定属性。它们采用以下形式:
CLOUDSDK_<SECTION>_<PROPERTY>
例如:CLOUDSDK_CORE_ACCOUNT
您可以通过运行以下命令查看所有可用的配置设置:gcloud help config
等效于 --configuration 标志是:CLOUDSDK_ACTIVE_CONFIG_NAME
如果您真的想要完全隔离,您还可以通过将 CLOUDSDK_CONFIG 设置为您选择的目录来更改 Cloud SDK 的配置目录。请注意,如果您这样做,配置将完全独立,包括凭证存储、所有配置、日志等。

关于authentication - 如何使用不同的服务帐户凭据对 google API 进行身份验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34883810/

相关文章:

sql - 在 bigquery 中创建一个 View ,并将日期向下舍入到午夜?

text - 将多行文本插入 Google Big Query

javascript - 如何使用 $.Ajax 将 Windows 身份验证凭据传递给 Web API 服务

php - 无法在 codeigniter 中销毁 session

sql - 如何获取最新日期的行?

google-cloud-storage - 通过代理使用 gcs 连接器仅向 gcs 发送存储请求

python - 使用 storage.objectAdmin 权限在 Python 中写入 GCS 存储桶

google-app-engine - Google 云存储客户端库 - 将 acl 设置为 "public-read"和 "bucket-owner-full-control"

php - 在 laravel 中登录时更新数据库

authentication - LDAP 身份验证 apache 2.2 错误 500