Ibm cloud 如何使用内联键在terraform中定义连接资源

Ibm cloud 如何使用内联键在terraform中定义连接资源,ibm-cloud,terraform,Ibm Cloud,Terraform,我正在使用terraform模板中的连接资源 connection { user = "ubuntu" private_key = "${file("test.pem")}" agent = "false" timeout = "30s" } 我知道我们可以直接粘贴密钥内容,而不是从文件中读取密钥,但是如何处理密钥字符串中的换行符呢。如何内联粘贴内容?尽管将私钥信息直接保存在配置中不是最佳做法,但可以使用“herdoc”

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

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

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

尽管将私钥信息直接保存在配置中不是最佳做法,但可以使用“herdoc”多行字符串样式来包含多行字符串:

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

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

为什么?您不想将私钥放在光盘上吗?我使用的是Bluemix cloud automation manager,其中我只能使用一个.tf文件。没有这样的文件夹结构,我可以把文件放在那里。有没有其他方法可以在同一个.tf文件中加载.pem文件?这很有帮助。如果我有另一个私钥,它不是用来与服务器建立ssh连接,而是用来对服务器软件进行身份验证,该怎么办。例如:Chef provisioner,其中我有一个密钥
user_key=“${file(“chefserver.pem”)}”
,用于在执行Chef客户端安装时对Chef服务器进行身份验证。无论何时安装chef客户机,都无法在运行时生成此消息。我正在使用AWS provisioner。我的答案第一部分中的“herdeoc”语法可用于填充任何参数,因此您也可以使用它来填充chef provisioner的
user\u key
参数。有什么方法可以跳过将herdeoc用作私钥。这可能是一个安全威胁。Bluemix限制只允许有一个文件是这里的限制问题。Terraform通常会很好地支持这一点。您可以通过将资源分解成单独的模块,然后使bluemux中的根模块成为引用它的
模块
块来实现这一点,尽管我对bluemix不够熟悉,不知道是否支持它,事实上,发布一个包含敏感密钥的模块可能会有问题。我当时正计划使用vault。因为我不认为我可以在任何地方上传私钥。但同样,这需要我自己填充vault,可能需要手动。
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"
  }
}