这是一个新手问题,但我刚刚开始使用 Terraform / Terragrunt 进行 GCP 配置,我发现获取 GCP 凭据的工作流程非常混乱。我是专门使用 AWS 的,在 AWS CLI 中获取凭证和配置它们非常简单。
基本上,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>
. 从那里我可以使用命令从命令行访问 Google API(这也是 Terraform 在幕后所做的)gcloud
。
那么为什么 Terraform 提供者需要服务帐户的 JSON 文件呢?为什么它不能只使用gcloud
CLI 工具已经在使用的凭据?
顺便说一句,如果我将 Terraform 配置为指向该application_default_credentials.json
文件,则会收到以下错误:
正在初始化模块...
正在初始化后端...
错误:无法获取现有工作区:查询云存储失败:获取 https://www.googleapis.com/storage/v1/b/terraform-state-bucket/o?alt=json&delimiter=%2F&pageToken=&prefix=projects%2Fsomeproject %2F&prettyPrint=false&projection=full&versions=false : 私钥应该是 PEM 或普通 PKCS1 或 PKCS8;解析错误:asn1:语法错误:序列被截断