控制台输出中的Terraform掩码变量可以输出吗?

时间:2018-12-18 17:15:07

标签: terraform hashicorp-vault

我想将其发布为功能请求,但我想在发布之前查看是否有人找到了某种巧妙的方法。也许Hashicorp的某人可以告诉我,这将是即将到来的功能

在运行terraform apply/show时,我想通过某种方式掩盖控制台中的变量。最好在将变量传递到脚本时尝试使用 local-exec 配置程序掩盖变量。

我唯一能找到一种名为 Terrahelp 的工具来执行此操作,但它仅适用于tfvars文件中的变量,该文件不允许插值。这无济于事,因为我们正在尝试使用Vault将机密文件中的秘密信息排除在外。

Current Versions
Terraform v0.11.7
provider.null v1.0.0
provider.template v1.0.0
provider.vault v1.3.1
provider.vsphere v1.8.1

用例

provisioner "local-exec" {
    command = "&'${path.module}\\scripts\\script.ps1' -name ${var.node_name} -pass '${var.pass}' -user ${var.user} -server ${var.server}"
    interpreter = ["Powershell", "-Command"]
  }  

尝试的解决方案 我正在使用保管库将机密信息隐藏在Terraform文件中,因此我正在使用保管库提供程序并从中调用数据。我尝试创建一个模块并输出带有sensitive = true值的机密信息,然后调用该模块以使用机密信息,但是仍然在控制台中显示。

提案

允许某种敏感值,就像输出到Terraform中的变量一样。因此,如果在控制台中调用了上述脚本,它们将不会显示敏感的变量信息。

参考 https://github.com/hashicorp/terraform/issues/16114 https://github.com/hashicorp/terraform/issues/16643

6 个答案:

答案 0 :(得分:1)

自提出此问题以来,Terraform 13已发布,它允许将变量标记为sensitive,并且不会在控制台中显示。

https://www.terraform.io/docs/configuration/outputs.html#sensitive-suppressing-values-in-cli-output

答案 1 :(得分:0)

感谢您的反馈,不能一次性设置密码,因为其中一些是AD中的服务帐户,这些帐户执行其他操作,这些应用程序无法处理不断更改的密码。

我们确实找到了另一产品Azure / Azure DevOps的解决方案。我们将凭据存储在Azure DevOps可以访问的Azure关键保管库中,并使用Azure DevOps管道将terraform代码发送到Build Server。 Azure DevOps似乎充当了一个外壳,可隐藏控制台中的所有秘密,并且效果很好。我会向所有希望从terraform文件/命令行中隐藏秘密的人推荐它。

答案 2 :(得分:0)

这是我为一些本地服务执行的操作:

1-var.password实际上并不存储密码。而是存储环境变量的名称。

2-我的脚本从那些环境变量获取密码。

3-我有一个小程序,可以将机密加载到环境中并为terraform apply清除它们。

所以最后我只是绕过Terraform来获取脚本使用的秘密。不理想,但我也找不到更好的解决方案。

答案 3 :(得分:0)

我认为https://github.com/cloudposse/tfmask可能是您想要的:

  

命令行实用程序可掩盖来自转换计划或地形的敏感输出。

首先,您需要设置一个环境变量来过滤屏蔽键(诚然,这里涉及到一些手动工作):

export TFMASK_VALUES_REGEX="(?i)^.*(secret|password|oauth|token|key).*$"

然后通过tfmask传递terraform命令,导致输出被屏蔽:

terraform plan | tfmask

答案 4 :(得分:0)

这是自我宣传,但是我创建了一个名为terramask的工具,可与Terraform 0.12一起使用。

欢迎

Issues?

答案 5 :(得分:0)

我不太清楚这是否是您的用例,但是我们用于敏感变量的一种策略是利用默认的Terraform行为来使用environment variables to set TF variables,例如,

variable "sensitive_variable" {
  type = "string"
}
sensitive_var=$(curl url/with/remote/value)
export TF_VAR_sensitive_variable=$sensitive_var
terraform apply