使用 Terraform 的 Google Cloud 凭据

Sco*_*oks 9 google-cloud-platform terraform terragrunt terraform-provider-gcp

这是一个新手问题,但我刚刚开始使用 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"
}
Run Code Online (Sandbox Code Playgroud)

credentials字段显示我(显然)必须生成一个服务帐户,并在我的文件系统上的某处保留一个 JSON。

但是,如果我运行该命令gcloud auth application-default login,则会生成一个位于~/.config/gcloud/application_default_credentials.json;的令牌。或者我也可以使用gcloud auth login <my-username>. 从那里我可以使用gcloud命令从命令行访问 Google API(这也是 Terraform 在幕后所做的)。

那么为什么 Terraform 提供程序需要服务帐户的 JSON 文件呢?为什么不能只使用gcloudCLI 工具已经在使用的凭据?

顺便说一句,如果我将 Terraform 配置为指向该application_default_credentials.json文件,则会出现以下错误:

正在初始化模块...

正在初始化后端...

错误:无法获取现有工作区:查询 Cloud Storage 失败:获取 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:语法错误:序列被截断

Ale*_*ksi 6

如果我将 Terraform 配置为指向 application_default_credentials.json 文件,则会出现以下错误:

credentialsprovider config 中的字段需要服务帐户密钥文件的路径,而不是用户帐户凭据文件。如果您想使用您的用户帐户进行身份验证,请尝试省略credentials然后运行gcloud auth application-default login; 如果 Terraform 找不到您的凭据文件,您可以将GOOGLE_APPLICATION_CREDENTIALS环境变量设置为指向~/.config/gcloud/application_default_credentials.json.

在此处阅读有关服务帐户与用户帐户主题的更多信息。就其价值而言,Terraform 文档明确建议不要使用application-default login

不推荐使用此方法 - 某些 API 与通过 gcloud 获得的凭据不兼容

同样,GCP 文档声明如下:

重要提示:对于几乎所有情况,无论您是在本地开发还是在生产应用程序中开发,您都应该使用服务帐户,而不是用户帐户或 API 密钥。

  • 目前,在开发过程中,[Google](https://cloud.google.com/iam/docs/best-practices-service-accounts#development) 建议使用“gcloud auth application-default login”方法(而不是,让他们通过运行...`gcloud auth application-default login`)和[Terraform](https://registry.terraform.io/providers/hashicorp/google/latest/docs/guides/getting_started#来使用您的凭据配置提供商)(最简单的方法是运行“gcloud auth application-default login”) (7认同)