2017-05-31 24 views
1

我使用的連接資源在terraform模板如何定義連接資源在terraform與關鍵直列

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

而不是閱讀從我知道我們可以直接粘貼的關鍵內容的文件有關的關鍵,但什麼關鍵字符串中的換行符。如何粘貼內聯內容?

+0

爲什麼?你不想要光盤上的私鑰? – strongjz

+0

我正在使用Bluemix雲自動化管理器,我只能使用一個.tf文件。沒有文件夾結構,因此我可以放置文件。有沒有其他的方法可以在同一個.tf文件中加載.pem文件? – aaj

回答

2

雖然直接保存私鑰信息的內部配置是不是一個最佳實踐,可以使用「定界符」多行字符串風格,包括多行字符串:

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

EOK串這裏是一個任意選擇的標記,因爲它不存在於鍵中,並且意在表示「鍵的結束」。只要介紹人和結束標記匹配,您就可以選擇任何標籤。


如果被連接到在同一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 狀態的,而不是作爲配置的一部分的部分。這意味着配置不包含任何敏感信息,因此可以更自由地共享,但重要的是要確保安全地存儲狀態文件以防止未經授權訪問創建的實例。

+0

這有幫助。如果我有另一個不用於與服務器建立ssh連接但是需要對服務器軟件進行身份驗證的私鑰,該怎麼辦?對於例如:廚師提供者,我有一個關鍵'user_key =「$ {file(」chefserver.pem「)}」'在廚師客戶端安裝時向主廚服務器進行身份驗證。每當我安裝一個廚師客戶端時,這在運行時不能生成。我正在使用AWS供應商。 – aaj

+0

我的答案的第一部分中的「heredoc」語法可以用來填充_any_參數,因此您也可以使用它來向主廚配給器填充'user_key'參數。 –

+0

有什麼辦法可以跳過使用heredoc作爲私鑰。這可能是一個安全威脅。 – aaj