【发布时间】:2019-12-18 13:51:35
【问题描述】:
这是一个新手问题,但我刚刚开始使用 Terraform / Terragrunt 进行 GCP 配置,我发现获取 GCP 凭据的工作流程非常混乱。我是专门使用 AWS 的,在 AWS CLI 中获取凭证并对其进行配置非常简单。
基本上,Google Cloud Provider documentation 声明您应该像这样定义一个 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 文件,我会收到以下错误:
正在初始化模块...
正在初始化后端...
错误:无法获取现有工作区:查询云存储 失败:获取 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:语法错误:序列被截断
【问题讨论】:
标签: google-cloud-platform terraform terraform-provider-gcp terragrunt