如何使用键内联定义terraform中的连接资源

时间:2017-05-31 11:47:03

标签: ibm-cloud terraform

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

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

我没有从文件中读取密钥,而是知道我们可以直接粘贴密钥内容但是密钥字符串中的换行符是什么。如何将内容粘贴到内联?

1 个答案:

答案 0 :(得分:2)

尽管将私钥信息直接保存在配置中并不是最佳实践,但可以使用" heredoc"包含多行字符串的多行字符串样式:

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

此处的EOK字符串是选择的任意标记,因为它在密钥中不存在,并且代表&#34;密钥结束&#34;。只要介绍人和结束标记匹配,您就可以选择任何您喜欢的标签。

如果正在连接的机器是在与其配置的Terraform配置相同的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 状态的一部分,而不是作为配置的一部分。这意味着配置不包含任何敏感信息,因此可以更自由地共享,但重要的是要确保安全地存储状态文件,以防止对创建的实例进行未经授权的访问。