Terraform:添加特定于资源的机密

Terraform:添加特定于资源的机密,terraform,Terraform,我知道你可以通过地形变量将一般秘密传递给资源。有没有办法配置在资源级别更改的机密 具体来说,我使用terraform作为应用程序的后端,允许用户使用密码设置服务器。每个服务器的密码都不同。是否有一些方法可以为单个实例设置类似于self.password的内容,以便: 在我跟踪地形文件的github repo中不可见 及 可以针对每个实例进行更改 现在我只想创建一些地形文件,比如password=var.{unique\u id}\u password,但是如果我觉得应该有更好的方法 有关用例的更

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

具体来说,我使用terraform作为应用程序的后端,允许用户使用密码设置服务器。每个服务器的密码都不同。是否有一些方法可以为单个实例设置类似于
self.password
的内容,以便:

  • 在我跟踪地形文件的github repo中不可见
  • 可以针对每个实例进行更改
  • 现在我只想创建一些地形文件,比如
    password=var.{unique\u id}\u password
    ,但是如果我觉得应该有更好的方法

    有关用例的更多详细信息: 我有一个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}"
        ]
      }
    }
    

    您可以使用random_密码提供程序生成随机字符串。 参考:

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


    也许您可以将Hashicorp Vault放置到位,以管理随机生成的密码。我是AWS的人,所以我会把密码放在机密管理器里

    你能澄清一下你所说的每个实例都可以改变的意思吗?我对你的最终目标感到困惑。也许可以进一步说明秘密数据当前来自何处以及如何将其分配给资源。当然:简短的版本是从web应用程序动态配置基础结构,用户可以通过web表单设置密码。然后,在设置资源时,在设置脚本中使用该密码。我知道另一个可能的解决方案是拥有一些服务器端机密,然后通过API调用将密码发送到另一台服务器,并通过该机密进行身份验证。但是如果可能的话,你更愿意使用地形。你将如何调用地形配置?如果它是由您的web应用程序执行的服务器端脚本,您应该能够向用户请求密码,然后在执行时使用var=“password=”您不能使用变量
    terraform apply-var=“password=abcd123”
    ?嗯,这不是我想要的,因为我希望用户能够提供密码。我可以为此集成vault吗?我明白了,请阅读注释,如果用户提供密码,则需要将其传递到自动化配置堆栈。您正在网络表单中收集它,它是否存储在某个地方?可能需要插入DynamoDB并在TF中创建一个数据源来读取Dynamo UID/Pass信息。