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

问题描述 投票:5回答:1

我想将此作为功能请求发布,但我想看看是否有其他人在我发布之前找到了一些聪明的方法。或者也许来自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

terraform hashicorp-vault
1个回答
0
投票

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

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


0
投票

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

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.