这是一个初学者问题,但我刚开始使用Terraform/Terragrunt进行GCP配置,发现获取GCP凭据的工作流程非常混乱。我之前一直使用AWS,在那里获取凭据并在AWS CLI中进行配置非常简单。
基本上,Google Cloud Provider文档指出您应该定义如下的
基本上,Google Cloud Provider文档指出您应该定义如下的
provider
块:provider "google" {
credentials = "${file("account.json")}"
project = "my-project-id"
region = "us-central1"
zone = "us-central1-c"
}
这个credentials
字段显示我(显然)必须生成一个服务帐户,并在文件系统中保留一个JSON。
但是,如果我运行gcloud auth application-default login
命令,则会生成一个令牌,位于~/.config/gcloud/application_default_credentials.json
;或者我也可以使用gcloud auth login <my-username>
。从那里,我可以使用gcloud
命令从命令行访问Google API(这也是Terraform在幕后执行的操作)。
那么为什么Terraform提供程序需要服务帐户的JSON文件呢?为什么它不能只使用gcloud
CLI工具已经在使用的凭据呢?
顺便说一句,如果我将Terraform配置为指向application_default_credentials.json
文件,则会收到以下错误:
gcloud
命令来完成。这看起来非常奇怪。 - Scott CrooksGOOGLE_APPLICATION_CREDENTIALS
指向~/.config/gcloud/application_default_credentials.json
时,它仍然会给出上述错误,说它不是PEM格式。 - Scott CrooksGOOGLE_APPLICATION_CREDENTIALS
变量,application-default login
是否仍然有效? - Aleksigcloud auth application-default login
方法被 Google 和 Terraform 推荐。通过运行gcloud auth application-default login
命令,让它们使用您的凭据即可。 - Jacek J