可以在控制台输出中使用Terraform屏蔽变量吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了可以在控制台输出中使用Terraform屏蔽变量吗?相关的知识,希望对你有一定的参考价值。

我想将此作为功能请求发布,但我想看看是否有其他人在我发布之前找到了一些聪明的方法。或者也许来自Hashicorp的人可以告诉我这将成为即将到来的特色

在运行terraform apply/show时,我看起来有些方法可以从控制台屏蔽变量。最好在将变量传递给脚本时尝试使用local-exec配置器屏蔽变量。

一个名为Terrahelp的工具是我能找到的唯一能做到这一点的工具,但它只适用于tfvars文件中不允许插值的变量。这没有用,因为我们正在尝试使用Vault来保护terraform文件中的机密。

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/16114 https://github.com/hashicorp/terraform/issues/16643

答案

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

我们确实通过另一个Azure / Azure DevOps产品找到了解决方案。我们将凭据存储在Azure中的密钥保管库中,Azure DevOps可以访问Azure,并使用Azure DevOps管道将terraform代码发送到Build Server。 Azure DevOps似乎充当了一个shell,它隐藏了控制台的任何秘密,它运行良好。我会推荐给任何想要隐藏terraform文件/命令行秘密的人。

另一答案

以下是我为一些内部部署服务的方法:

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

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

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

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

以上是关于可以在控制台输出中使用Terraform屏蔽变量吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 terraform 中提取敏感的输出变量?

如何将 Terraform 输出变量保存到 Github Action 的环境变量中

Terraform 使用输出变量作为另一个资源中的输入

远程 terraform 模块的输出变量

Terraform 模块 - 输出变量作为另一个模块的输入

在 terraform 中禁用时默认启用 GKE 屏蔽节点