【问题标题】:Terraform: Add resource-specific secretsTerraform:添加资源特定的秘密
【发布时间】:2020-02-09 23:45:01
【问题描述】:

我知道您可以通过 terraform 变量将一般机密传递给资源。有没有办法配置在资源级别更改的机密?

具体来说,我使用 terraform 作为应用程序的后端,该应用程序允许用户使用密码设置服务器。每个服务器的密码都不同。有没有办法为单个实例设置类似self.password 的东西,以便它:

  1. 在我跟踪 terraform 文件的 github 存储库中不可见

  1. 可以针对每个单独的实例进行更改

现在我将创建像 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


【解决方案1】:

您可以使用 random_password 提供程序来生成随机字符串。 参考:https://www.terraform.io/docs/providers/random/r/password.html

不确定您的用例是否需要管理或存储密码,但根据您的需要,这也是可能的。我看到您正在使用 DO 来配置资源。

也许您可以使用 Hashicorp Vault 来管理随机生成的密码。我是 AWS 人,所以我会将密码粘贴在秘密管理器中。

【讨论】:

  • 嗯,不是我想要的,因为我希望用户能够提供密码。我可以为此集成保险库吗?
  • 我明白了,阅读 cmets,如果用户提供密码,您需要将其传递给您的自动化配置堆栈。您在网络表单中收集它,它是否存储在某个地方? Maybes 坚持 DynamoDB 并在 TF 中创建数据源以读取 Dynamo UID/Pass 信息。
猜你喜欢
  • 2022-11-02
  • 1970-01-01
  • 1970-01-01
  • 2021-07-17
  • 2021-10-26
  • 2021-06-14
  • 2021-09-21
  • 2018-03-27
  • 2018-05-29
相关资源
最近更新 更多