Terraform可以屏蔽控制台输出中的变量吗



我想把它作为一个功能请求发布,但我想在发布之前看看是否有其他人找到了一些聪明的方法。或者,Hashicorp的某个人可以告诉我,这将是即将推出的的一个功能

在运行terraform apply/show时,我已经找到了一些从控制台屏蔽变量的方法。在将变量传递给脚本时,最好尝试使用本地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"]
}  

尝试的解决方案我使用Vault来保护Terraform文件的机密,因此我使用Vault提供程序并从中调用数据。我尝试创建一个模块并输出具有sensitive = true值的机密,然后调用该模块以使用机密,但该机密仍显示在控制台中。

建议书

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

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

Terraform 13是在提出此问题后发布的,它允许变量标记为sensitive,而不显示在控制台中。

https://www.terraform.io/docs/configuration/outputs.html#sensitive-抑制cli输出中的值

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

我们确实通过另一个产品找到了解决方案,即Azure/Azure DevOps。我们将凭据存储在Azure DevOps可以访问的Azure中的密钥保管库中,并使用Azure DevOpss管道将地形代码发送到我们的构建服务器。Azure DevOps似乎充当了一个外壳,可以向控制台隐藏任何秘密,而且效果很好。我会向任何想要从地形文件/命令行隐藏秘密的人推荐它。

以下是我为一些内部部署服务所做的操作:

1-var.password实际上并不存储密码。相反,它存储环境变量的名称。

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

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

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

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

命令行实用程序,用于屏蔽变换计划或地形应用的敏感输出。

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

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

然后通过tfmask管道传输地形命令,产生屏蔽输出:

terraform plan | tfmask

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

问题是受欢迎的

我不太清楚这是否是您的用例,但我们对敏感变量使用的一种策略是使用默认的Terraform行为来使用环境变量来设置TF变量,例如

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

最新更新