Google 使用 Terraform 的云凭证
Google Cloud credentials with Terraform
这是一个新手问题,但我刚刚开始使用 Terraform / Terrag运行t 配置 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
文件,我会收到以下错误:
Initializing modules...
Initializing the backend...
Error: Failed to get existing workspaces: querying Cloud Storage
failed: Get
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:
private key should be a PEM or plain PKCS1 or PKCS8; parse error:
asn1: syntax error: sequence truncated
if I configure Terraform to point to the application_default_credentials.json file, I get the following errors:
提供商配置中的 credentials
字段需要服务帐户密钥文件的路径,而不是用户帐户凭据文件。如果您想使用您的用户帐户进行身份验证,请尝试省略 credentials
然后 运行 gcloud auth application-default login
; 如果 Terraform 找不到您的凭据文件,您可以将 GOOGLE_APPLICATION_CREDENTIALS
环境变量设置为指向 ~/.config/gcloud/application_default_credentials.json
.
阅读 here for more 关于服务帐户与用户帐户的主题。对于它的价值,Terraform 文档明确建议不要使用 application-default login
:
This approach isn't recommended- some APIs are not compatible with credentials obtained through gcloud
同样GCP docs声明如下:
Important: For almost all cases, whether you are developing locally or in a production application, you should use service accounts, rather than user accounts or API keys.
仍然不建议使用 gcloud auth application-default login
,最好的方法是
https://www.terraform.io/docs/providers/google/guides/provider_reference.html#credentials-1
更改凭据以直接指向文件位置。其他一切看起来都不错。
示例:凭据 =“/home/scott/gcp/FILE_NAME”
这是一个新手问题,但我刚刚开始使用 Terraform / Terrag运行t 配置 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
文件,我会收到以下错误:
Initializing modules...
Initializing the backend...
Error: Failed to get existing workspaces: querying Cloud Storage failed: Get 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: private key should be a PEM or plain PKCS1 or PKCS8; parse error: asn1: syntax error: sequence truncated
if I configure Terraform to point to the application_default_credentials.json file, I get the following errors:
提供商配置中的 credentials
字段需要服务帐户密钥文件的路径,而不是用户帐户凭据文件。如果您想使用您的用户帐户进行身份验证,请尝试省略 credentials
然后 运行 gcloud auth application-default login
; 如果 Terraform 找不到您的凭据文件,您可以将 .GOOGLE_APPLICATION_CREDENTIALS
环境变量设置为指向 ~/.config/gcloud/application_default_credentials.json
阅读 here for more 关于服务帐户与用户帐户的主题。对于它的价值,Terraform 文档明确建议不要使用 application-default login
:
This approach isn't recommended- some APIs are not compatible with credentials obtained through gcloud
同样GCP docs声明如下:
Important: For almost all cases, whether you are developing locally or in a production application, you should use service accounts, rather than user accounts or API keys.
仍然不建议使用 gcloud auth application-default login
,最好的方法是
https://www.terraform.io/docs/providers/google/guides/provider_reference.html#credentials-1
更改凭据以直接指向文件位置。其他一切看起来都不错。
示例:凭据 =“/home/scott/gcp/FILE_NAME”