如何使用键内联在 Terraform 中定义连接资源

How to define connection resource in terraform with key inline

我正在使用 terraform 模板中的连接资源

connection {
        user = "ubuntu"
        private_key = "${file("test.pem")}"
        agent = "false" 
        timeout = "30s"
    }

我们可以直接粘贴密钥内容,而不是从文件中读取密钥,但是密钥字符串中的换行符呢?如何内联粘贴内容?

虽然将私钥信息直接保存在配置中并不是最佳做法,但可以使用 "heredoc" 多行字符串样式来包含多行字符串:

connection {
    user = "ubuntu"
    private_key = <<-EOK
-----BEGIN RSA PRIVATE KEY-----
....
-----END RSA PRIVATE KEY-----
EOK
    agent = "false" 
    timeout = "30s"
}

这里的EOK字符串是任意选择的标记,因为它不存在于密钥中,旨在代表"End of key"。只要introducer和end marker匹配,你可以选择任何你喜欢的标签。


如果连接到的机器是在与配置它的机器相同的 Terraform 配置中创建的(通常是这种情况),另一种方法是在创建时动态生成密钥,从而避免需要在配置中放置一个文字键。 The tls_private_key resource 可用于执行此操作:

resource "tls_private_key" "example" {
  algorithm = "RSA"
}

resource "some_compute_resource" "example" {
  # question didn't specify which provider is in use, so this is a generalized example
  public_key = "${tls_private_key.example.public_key_openssh}"

  connection {
    user        = "ubuntu"
    private_key = "${tls_private_key.example.private_key_pem}"
    agent       = false
    timeout     = "30s"
  }
}

在这种情况下,生成的私钥保存为 Terraform state 的一部分,而不是配置的一部分。这意味着配置不包含任何敏感信息,因此可以更自由地共享,但重要的是要确保安全存储状态文件以防止对创建的实例进行未经授权的访问。