【发布时间】:2020-02-09 23:45:01
【问题描述】:
我知道您可以通过 terraform 变量将一般机密传递给资源。有没有办法配置在资源级别更改的机密?
具体来说,我使用 terraform 作为应用程序的后端,该应用程序允许用户使用密码设置服务器。每个服务器的密码都不同。有没有办法为单个实例设置类似self.password 的东西,以便它:
- 在我跟踪 terraform 文件的 github 存储库中不可见
和
- 可以针对每个单独的实例进行更改
现在我将创建像 password=var.{unique_id}_password 这样的 terraform 文件,但如果感觉应该有更好的方法
有关用例的更多详细信息:
我有一个 Web 应用程序来为运行另一个 Web 应用程序的用户配置服务器。该服务器的密码由我的应用程序设置。密码现在使用我想移植到 terraform 的设置脚本进行配置。
每个服务器的密码都会更改,因为用户只能为其服务器设置密码,并且该变量不应影响其他资源
这是用户尝试配置服务器时预期输出的超级简化版本
# new-server.tf
resource "digitalocean_droplet" "new_server" {
name = "new_server"
password = "${var.get_the_password_somehow}"
provisioner "remote-exec" {
inline = [
"set-password ${self.password}"
]
}
}
【问题讨论】:
-
您能否阐明可以针对每个单独的实例进行更改 的含义?我对你的最终目标感到困惑。也许可以更多地说明秘密数据当前来自哪里以及如何将它们分配给资源。
-
当然:简而言之,基础设施是从 Web 应用程序动态配置的,用户可以通过 Web 表单设置密码。然后在配置资源时在设置脚本中使用该密码。立即更新帖子以提供更多详细信息
-
FWIW:我知道另一个可能的解决方案是拥有一些服务器端机密,然后通过 API 调用将密码发送到另一台服务器,并通过该机密进行身份验证。但如果可能的话,更愿意使用 terraform
-
您将如何调用 Terraform 配置?如果它是由您的 Web 应用程序执行的服务器端脚本,您应该能够向用户询问密码,然后在执行时使用 var="password=
" 将其传递给配置 -
不能使用变量
terraform apply -var="password=abcd123"?
标签: terraform