如何在服务器上将 GOOGLE_APPLICATION_CREDENTIALS 与 gcloud 一起使用?

yon*_*ran 17 google-cloud-platform gcloud

gcloud在 GCE 之外以非交互方式使用命令行与服务帐户的最简单方法是什么?最好不要用凭证文件乱扔文件系统,这就是这样gcloud auth activate-service-account --key-file=...做的。

有许多使用gcloud服务帐户的用例。例如,在服务器上,我想GOOGLE_APPLICATION_CREDENTIALS在运行我的应用程序之前测试是否正确设置并具有所需的权限。或者,我想运行一些设置脚本或 cron 脚本来执行一些gcloud命令行检查。

Google Cloud 库(例如pythonjava)自动使用环境变量GOOGLE_APPLICATION_CREDENTIALS向 Google Cloud 进行身份验证。但不幸的是,这个命令行似乎对gcloud. gcloud在保持文件系统完好无损的同时使用干净的方法是什么?

$ GOOGLE_APPLICATION_CREDENTIALS=/etc/my-service-account-4b4b6e63aaed.json gcloud alpha pubsub topics publish testtopic hello
ERROR: (gcloud.alpha.pubsub.topics.publish) You do not currently have an active account selected.
Please run:

  $ gcloud auth login

to obtain new credentials, or if you have already logged in with a
different account:

  $ gcloud config set account ACCOUNT

to select an already authenticated account to use.
Run Code Online (Sandbox Code Playgroud)

小智 27

gcloud一般不使用GOOGLE_APPLICATION_CREDENTIALS环境变量。它只有一些命令来帮助在gcloud auth application-default [login|revoke|print-access-token...].

默认情况下,gcloud它的配置存储在 ${HOME}/.config/gcloud 中。可以通过设置CLOUDSDK_CONFIG环境变量来覆盖该位置。

也可以(虽然更乏味)覆盖大多数设置,这样它们就不需要通过gcloud config set ...和/或进行预配置gcloud auth activate-service-account。对于每个设置,可以指定环境变量。

例如,您尝试使用服务帐户密钥文件的等效命令是:

$ CLOUDSDK_AUTH_CREDENTIAL_FILE_OVERRIDE=/etc/my-service-account-4b4b6e63aaed.json \
    gcloud alpha pubsub topics publish testtopic hello
Run Code Online (Sandbox Code Playgroud)

请注意,这仍将缓存凭据,CLOUDSDK_CONFIG因为它需要缓存访问令牌,因此不必在每次调用时刷新它。

对于您的用例,我认为最好的选择是

  1. 设置CLOUDSDK_CONFIG为某个临时目录
  2. gcloud auth activate-service-account --key-file=...
  3. ...gcloud用来做你的工作 ...
  4. 删除临时CLOUDSDK_CONFIG目录。


Sha*_*mey 9

1) 在 GCP IAM 中创建 ServiceAccount。选中“提供新私钥”复选框,然后选择 JSON 作为文件类型。

2) 将 JSON 文件下载到您的服务器,然后输入: gcloud auth activate-service-account --key-file serviceaccount.json

3) 通过运行验证凭据是否已应用gcloud auth list