如何使用不同的服务帐户凭据对 google API 进行身份验证?
How to authenticate google APIs with different service account credentials?
任何不幸不得不以编程方式与 Google CLI 二进制文件进行交互的人都会意识到,使用 gcloud
、gsutil
等进行身份验证bq
等远非直观或琐碎,尤其是 当您需要跨不同项目工作时。
我是 运行 各种与 Google Cloud Storage 和 BigQuery 交互的 cron 作业,用于不同的项目。由于 cron 作业可能会重叠,因此重命名配置文件显然不是一种选择,任何理智的人也不会采用这种方法。
肯定有某种方法可以将服务帐户的密钥对文件的路径传递给这些 CLI 二进制文件,但是 bq help
没有任何结果。
Google 文档虽然冗长,但基本上毫无用处,带您了解 OAuth2 的工作原理等,而不是解释什么肯定是非常普遍的要求,相对于,如何在没有修改中央配置文件的 运行 命令的情况下实际验证服务帐户。
任何有识之士都可以告诉我 Google 的工程师是否决定添加一个简单的功能,例如将服务帐户的密钥对文件的路径传递给 gsutil
和 bq
?或者我可以简单地导出一些变量,以便他们知道使用哪个密钥对文件进行身份验证?
我意识到这些简单化的方法可能是对情报的侮辱,但我们并不关心利用核聚变,所以我们甚至不需要考虑相比之下亚马逊在他们的身份验证方法方面做得如此正确。 ..
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
并行,每个人都将使用给定的帐户而不会干扰。
更大的扩展是 'configurations',它做同样的事情,但针对您的整个配置集(包括帐户和项目等设置)。
# 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
您可以通过 运行ning 阅读有关配置的更多信息:gcloud topic configurations
所有属性都有相应的环境变量,允许您为单个命令调用或终端会话设置特定的 属性。它们采用以下形式:
CLOUDSDK_<SECTION>_<PROPERTY>
例如:CLOUDSDK_CORE_ACCOUNT
您可以通过 运行ning 查看所有可用的配置设置:gcloud help config
--configuration 标志的等价物是:CLOUDSDK_ACTIVE_CONFIG_NAME
如果您真的想要完全隔离,您还可以通过将 CLOUDSDK_CONFIG
设置为您选择的目录来更改 Cloud SDK 的配置目录。请注意,如果您这样做,配置将完全独立,包括凭证存储、所有配置、日志等。
任何不幸不得不以编程方式与 Google CLI 二进制文件进行交互的人都会意识到,使用 gcloud
、gsutil
等进行身份验证bq
等远非直观或琐碎,尤其是 当您需要跨不同项目工作时。
我是 运行 各种与 Google Cloud Storage 和 BigQuery 交互的 cron 作业,用于不同的项目。由于 cron 作业可能会重叠,因此重命名配置文件显然不是一种选择,任何理智的人也不会采用这种方法。
肯定有某种方法可以将服务帐户的密钥对文件的路径传递给这些 CLI 二进制文件,但是 bq help
没有任何结果。
Google 文档虽然冗长,但基本上毫无用处,带您了解 OAuth2 的工作原理等,而不是解释什么肯定是非常普遍的要求,相对于,如何在没有修改中央配置文件的 运行 命令的情况下实际验证服务帐户。
任何有识之士都可以告诉我 Google 的工程师是否决定添加一个简单的功能,例如将服务帐户的密钥对文件的路径传递给 gsutil
和 bq
?或者我可以简单地导出一些变量,以便他们知道使用哪个密钥对文件进行身份验证?
我意识到这些简单化的方法可能是对情报的侮辱,但我们并不关心利用核聚变,所以我们甚至不需要考虑相比之下亚马逊在他们的身份验证方法方面做得如此正确。 ..
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
并行,每个人都将使用给定的帐户而不会干扰。
更大的扩展是 'configurations',它做同样的事情,但针对您的整个配置集(包括帐户和项目等设置)。
# 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
您可以通过 运行ning 阅读有关配置的更多信息:gcloud topic configurations
所有属性都有相应的环境变量,允许您为单个命令调用或终端会话设置特定的 属性。它们采用以下形式:
CLOUDSDK_<SECTION>_<PROPERTY>
例如:CLOUDSDK_CORE_ACCOUNT
您可以通过 运行ning 查看所有可用的配置设置:gcloud help config
--configuration 标志的等价物是:CLOUDSDK_ACTIVE_CONFIG_NAME
如果您真的想要完全隔离,您还可以通过将 CLOUDSDK_CONFIG
设置为您选择的目录来更改 Cloud SDK 的配置目录。请注意,如果您这样做,配置将完全独立,包括凭证存储、所有配置、日志等。