在 GCE 之外以非交互方式使用gcloud
服务帐户命令行的最简单方法是什么?最好不要在文件系统中堆满凭证文件,这就是它的gcloud auth activate-service-account --key-file=...
作用。
使用服务帐户有很多用例gcloud
。例如,在服务器上,我想在运行我的应用程序之前测试是否正确设置并具有所需的权限。或者,我想运行一些设置脚本或 cron 脚本,使用命令GOOGLE_APPLICATION_CREDENTIALS
行执行一些检查。gcloud
Google Cloud 库(例如Python,Java 语言) 自动使用环境变量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.
答案1
gcloud
一般不使用GOOGLE_APPLICATION_CREDENTIALS
环境变量。它只有一些命令来方便在 中设置这些应用程序默认凭据gcloud auth application-default [login|revoke|print-access-token...]
。
默认情况下,gcloud
其配置存储在 ${HOME}/.config/gcloud 中。可以通过设置CLOUDSDK_CONFIG
环境变量来覆盖该位置。
也可以(虽然比较繁琐)覆盖大多数设置,这样就不需要通过gcloud config set ...
and/or进行预先配置gcloud auth activate-service-account
。对于每个设置,都可以指定环境变量。
例如,您尝试使用服务帐户密钥文件的等效命令是:
$ CLOUDSDK_AUTH_CREDENTIAL_FILE_OVERRIDE=/etc/my-service-account-4b4b6e63aaed.json \
gcloud alpha pubsub topics publish testtopic hello
请注意,由于它需要缓存访问令牌,因此这仍将缓存凭据CLOUDSDK_CONFIG
,因此不必在每次调用时刷新它。
对于您的用例,我认为最好的选择是
- 设置
CLOUDSDK_CONFIG
为某个临时目录 gcloud auth activate-service-account --key-file=...
- ... 用来
gcloud
做你的工作... - 删除临时
CLOUDSDK_CONFIG
目录。
答案2
1) 在 GCP IAM 中创建 ServiceAccount。勾选“提供新私钥”,并选择 JSON 作为文件类型。
2)将 JSON 文件下载到您的服务器,然后输入:
gcloud auth activate-service-account --key-file serviceaccount.json
3)通过运行来验证凭据是否已应用gcloud auth list
。
答案3
答案4
如果你已经有了 env-var 和 json 键,只需运行:
gcloud auth activate-service-account --key-file=$GOOGLE_APPLICATION_CREDENTIALS
这将激活 gcloud/gsutil 的服务帐户