使用Terraform创建Google Cloud凭据

13
这是一个初学者问题,但我刚开始使用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>。从那里,我可以使用gcloud命令从命令行访问Google API(这也是Terraform在幕后执行的操作)。

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

顺便说一句,如果我将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: 语法错误: 序列截断
3个回答

13
如果我将Terraform配置指向application_default_credentials.json文件,我会收到以下错误:
提供程序配置中的 credentials 字段需要一个路径来指向服务帐户密钥文件,而不是用户帐户凭据文件。如果您想使用用户帐户进行身份验证,请省略 credentials ,然后运行 gcloud auth application-default login ; 如果 Terraform 找不到您的凭据文件,则可以设置 GOOGLE_APPLICATION_CREDENTIALS 环境变量指向 ~/.config/gcloud/application_default_credentials.json 。有关服务帐户与用户帐户的更多信息,请参见此处。值得一提的是,Terraform文档明确建议不要使用 application-default login
“不推荐使用此方法-某些API与通过gcloud获得的凭据不兼容”
同样GCP文档也指出:
“重要提示:几乎所有情况下,无论您是在本地开发还是在生产应用程序中,都应该使用服务帐户,而不是用户帐户或API密钥。”

1
啊,我现在明白了,非常感谢!我之前对于为什么会发生这种情况感到很困惑。你提到的 Terraform 文档中的那一部分(“这种方法并不推荐——某些 API 不兼容通过 gcloud 获取的凭据”)仍然让我有点担心。这意味着有些操作我不能通过普通的 gcloud 命令来完成。这看起来非常奇怪。 - Scott Crooks
1
实际上看起来用户必须使用服务帐户。当我按照您推荐的步骤操作,并将GOOGLE_APPLICATION_CREDENTIALS指向~/.config/gcloud/application_default_credentials.json时,它仍然会给出上述错误,说它不是PEM格式。 - Scott Crooks
哦,对不起,如果您取消设置GOOGLE_APPLICATION_CREDENTIALS变量,application-default login是否仍然有效? - Aleksi
1
值得一提的是,链接的“GCP文档”中不再包含“应该使用服务账号”的短语。用户账号似乎并没有被反对,并且似乎是为开发人员而设计的。 - Matt Drees
6
目前,在开发过程中,使用 gcloud auth application-default login 方法被 GoogleTerraform 推荐。通过运行 gcloud auth application-default login 命令,让它们使用您的凭据即可。 - Jacek J

0

将凭据更改为直接指向文件位置。其他所有内容看起来都很好。

示例:凭据 =“/home/scott/gcp/FILE_NAME”


-2

2
这是错误的,同样的链接 https://registry.terraform.io/providers/hashicorp/google/latest/docs/guides/provider_reference#credentials-1 指出:如果您在工作站上使用Terraform,我们建议您安装gcloud并使用用户应用程序默认凭据(“ADC”)进行身份验证作为主要身份验证方法。您可以通过运行命令 gcloud auth application-default login 来启用ADC。 - cryanbhu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接