我想将其发布为功能请求,但我想在发布之前查看是否有人找到了某种巧妙的方法。也许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
答案 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)
答案 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