这是一个新手问题,但我刚刚开始使用 Terraform / Terragrunt 进行 GCP 配置,并且我发现获取 GCP 凭据的工作流程非常混乱。我以前只使用过 AWS,获取凭证并在 AWS CLI 中配置它们非常简单。
基本上,Google 云提供商文档 https://www.terraform.io/docs/providers/google/provider_reference.html指出你应该定义一个provider
像这样阻止:
provider "google" {
credentials = "${file("account.json")}"
project = "my-project-id"
region = "us-central1"
zone = "us-central1-c"
}
This 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
文件,我收到以下错误:
正在初始化模块...
正在初始化后端...
错误:无法获取现有工作区:正在查询 Cloud Storage
失败:获取:
私钥应该是 PEM 或普通 PKCS1 或 PKCS8;解析错误:
asn1:语法错误:序列被截断
如果我将 Terraform 配置为指向 application_default_credentials.json 文件,则会收到以下错误:
The credentials
field in provider config expects a path to service account key file, not user account credentials file. If you want to authenticate with your user account try omitting credentials
and then running gcloud auth application-default login
; if Terraform doesn't find your credentials file you can set the GOOGLE_APPLICATION_CREDENTIALS
environment variabe to point to ~/.config/gcloud/application_default_credentials.json
.
Read 在这里了解更多 https://cloud.google.com/docs/authentication/关于服务帐户与用户帐户的主题。无论如何,Terraform 文档明确建议不要使用application-default login
:
不建议使用此方法 - 某些 API 与通过 gcloud 获取的凭据不兼容
相似地GCP docs https://cloud.google.com/docs/authentication/陈述以下内容:
重要提示:对于几乎所有情况,无论您是在本地开发还是在生产应用程序中开发,都应该使用服务帐户,而不是用户帐户或 API 密钥。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)