如何在Terraform中将环境变量用于机密

时间:2019-12-16 13:46:19

标签: 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"

main.tf:

provider "aws" {
  region     = "${var.aws_region}"
  access_key = "${var.access_key}"
  secret_key = "${var.secret_key}"
}

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

set TF_VAR_AWS_AK = asd12345asd12345
set TF_VAR_AWS_SK = asd12345asd12345
terraform plan

错误消息:

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.

不确定问题出在哪里。 TF文档说可以使用env vars作为秘密。

2 个答案:

答案 0 :(得分:2)

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

例如,您似乎正在使用AWS,在这种情况下,您可以使用AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY环境变量,也可以填充凭证文件,与AWS开发工具包相同。然后,您可以跳过所有变量声明,而只需减少您的provider块,如下所示:

provider "aws" {
  region = "${var.aws_region}"
}

Terraform的AWS提供程序支持与AWS CLI相同的一组凭据源,而无需任何特定于Terraform的配置。这是为AWS提供程序配置凭据的推荐方法,因为您只需要设置一次AWS凭据,即可使用AWS开发工具包,Terraform以及与AWS交互并支持其约定的任何其他软件。

有关AWS提供程序身份验证选项in the AWS provider documentation的更多信息。

答案 1 :(得分:-1)

如文档此处所述:https://www.terraform.io/docs/configuration/variables.html#environment-variables

环境变量名称必须为TF_VAR_<yourtfvariablename>

具有这样的地形变量:

variable "aws_region" {
  type = string
}

您的环境变量名称必须为TF_VARS_aws_region


  

实际上没有办法直接在Terraform中使用环境变量。 (例如:region = env.AWS_REGION),您必须使用TF_VAR来使用环境变量。