如何在 Terraform 中使用环境变量作为机密

rob*_*liv 4 terraform terraform-provider-aws

我正在尝试配置 Terraform,以便它使用 AWS Secrets 的环境变量。

terraform.tfvars:

access_key = "${var.TF_VAR_AWS_AK}"
secret_key = "${var.TF_VAR_AWS_SK}"
aws_region = "eu-north-1"
Run Code Online (Sandbox Code Playgroud)

主要.tf:

provider "aws" {
  region     = "${var.aws_region}"
  access_key = "${var.access_key}"
  secret_key = "${var.secret_key}"
}
Run Code Online (Sandbox Code Playgroud)

在控制台中(在 Windows 10 上):

set TF_VAR_AWS_AK = asd12345asd12345
set TF_VAR_AWS_SK = asd12345asd12345
terraform plan
Run Code Online (Sandbox Code Playgroud)

错误信息:

Error: Variables not allowed
  on terraform.tfvars line 1:
   1: access_key = "${var.TF_VAR_AWS_AK}"
Variables may not be used here.

Error: Variables not allowed
  on terraform.tfvars line 2:
  2: secret_key = "${var.TF_VAR_AWS_SK}"
Variables may not be used here.
Run Code Online (Sandbox Code Playgroud)

不确定问题出在哪里。TF 文档说可以使用环境变量来存储秘密。

Mar*_*ins 5

要使用环境变量配置提供程序后端,您根本不需要在配置中编写任何特殊内容。相反,您可以只设置与相关提供程序相关的常规环境变量。

例如,您似乎正在使用 AWS,在这种情况下,您可以使用AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY环境变量,也可以填充凭证文件,与 AWS SDK 相同。然后,您可以跳过所有变量声明,只需减少提供程序块,如下所示:

provider "aws" {
  region = "${var.aws_region}"
}
Run Code Online (Sandbox Code Playgroud)

Terraform 的 AWS 提供商支持与 AWS CLI 相同的一组凭证源,而无需任何 Terraform 特定的配置。这是为 AWS 提供商配置凭证的推荐方法,因为这样您只需设置一次 AWS 凭证,就可以使用 AWS SDK、Terraform 以及与 AWS 交互并支持其约定的任何其他软件。

AWS 提供商文档中提供了有关 AWS 提供商身份验证选项的更多信息。