为什么导出GOOGLE_APPLICATION_CREDENTIALS不能与`bq`一起使用?

时间:2016-01-20 16:45:16

标签: python google-cloud-storage google-cloud-platform gcloud google-cloud-sdk

google docs说要将env var GOOGLE_APPLICATION_CREDENTIALS导出到服务帐户的JSON密钥的路径,gcloud将使用它。我无法让它发挥作用。

我的命令是:

GOOGLE_APPLICATION_CREDENTIALS=/home/ubuntu/.config/google-creds.json bq ls

这只会出现错误:

  

您目前没有选择有效帐户。请运行:

     

$ gcloud auth login

     

获取新凭据,或者您已使用   不同的帐户:

     

$ gcloud config set account ACCOUNT

     

选择要使用的已经过身份验证的帐户。

gcloud -v给出:

Google Cloud SDK 92.0.0

bq 2.0.18
bq-nix 2.0.18
core 2016.01.12
core-nix 2015.11.24
gcloud
gsutil 4.16
gsutil-nix 4.15

我做错了什么,我该如何解决这个问题?我需要gsutilbq才能使用此文件。我正在处理多个项目,因此无法激活任何项目。

1 个答案:

答案 0 :(得分:9)

您是否尝试过gcloud auth activate-service-account?:

gcloud auth activate-service-account --key-file google-creds.json

(似乎命令行工具并没有沿着整个凭据发现链走下去,就像gcloud在代码中用作库时所做的那样。)

如果您需要使用多种配置(例如auth,project ID),则可以设置configurations。例如,如果您有两个服务帐户凭据,您可以使用它们 - 将其称为sa1.jsonsa2.json - 您可以执行以下操作:

$ gcloud config configurations create proj1
$ gcloud config configurations activate proj1
$ gcloud auth activate-service-account --key-file sa1.json

$ gcloud config configurations create proj2
$ gcloud config configurations activate proj2
$ gcloud auth activate-service-account --key-file sa2.json

现在,您可以使用gcloud config configurations activate命令设置您要使用的配置,也可以设置CLOUDSDK_ACTIVE_CONFIG_NAME环境变量以指定您喜欢的配置运行命令。即使用bq ls cred运行sa1.json

$ CLOUDSDK_ACTIVE_CONFIG_NAME=proj1 bq ls

sa2.json cred:

$ CLOUDSDK_ACTIVE_CONFIG_NAME=proj2 bq ls