2014-12-03 23 views
1

我有一個運行託管在私人git倉庫上的應用程序的EC2實例。將Git SSH密鑰捆綁到私有AMI中

我需要能夠從我的主服務器啓動這些許多。目前,我有5個固定的「工人」實例,我可以毫無問題地從主站啓動/停止。每個工作人員啓動,取回回購,並在啓動時啓動應用程序。這顯然不是一個好的解決方案,我想讓它更靈活(像我想要的那樣啓動儘可能多的實例等)。配置和軟件包是最終的,所以我覺得把它捆綁到一個AMI中是很好的。

有沒有辦法將我的git密鑰捆綁到AMI中,以便啓動許多類似的實例,並讓它們在啓動時啓動並啓動我的應用程序,而無需連接它們並輸入密碼?有沒有更好的辦法?我已經閱讀了關於雲初始化,用戶數據,puppet和其他許多事情,但我在這個問題上很新手,並且找不到使用ssh密鑰的正確示例。

回答

2

而是捆綁鍵進入AMI的,我建議你讓他們從AMI分開,因爲:

  1. 如果你改變你的git的鑰匙,你沒有建立一個新的AMI
  2. 擅自從AMI啓動實例的未授權用戶無法啓動您的應用程序

我建議使用用戶數據功能。如果需要,您可以選擇加密您的密鑰,並使用base64進行編碼。當您手動啓動實例或使用CLI/API啓動實例時,您可以傳遞可在實例啓動後訪問的密鑰。有多種訪問數據的方式(python,curl等等)。我建議您使用AWS元數據服務器,因爲您的實例不需要您的AWS憑據來獲取用戶數據。一旦您的實例啓動時,有您的應用程序進行下面的調用,拿到鑰匙,然後拉出回購:

curl http://169.254.169.254/latest/user-data 

回報您的元數據(不需要證書)。您可以選擇base64解碼和解密您的密鑰,並使用它來拉回購。如果你不想要額外的安全性,你可以繞過加密/ base64部分。

+0

感謝您的回答!總結起來,我需要:創建一個用戶數據腳本,它粘貼我的私鑰,公鑰和已知主機(所以我不必接受指紋),運行ssh-agent,然後克隆回購?那麼我需要的是在啓動時將其捲曲起來?對不起,我有點困惑 – xShirase 2014-12-03 19:59:34

+0

是的。製作一個自包含的腳本,將密鑰,已知主機複製到正確的位置,並克隆回購。在啓動實例時將內容複製到用戶數據字段之前,驗證本地計算機上的腳本。 – helloV 2014-12-03 23:36:47

+0

AWS預計使用base64編碼格式的用戶數據。如果您使用AWS儀表板,則可以選擇讓AWS將其編碼爲base64。如果您使用的是API/CLI,請從文檔中找出API/CLI是否希望您對數據進行編碼。如果啓動實例後,如果看不到所需的結果:'cd/var/lib/cloud/instance/scripts'。你應該在那裏看到你的劇本。嘗試運行腳本,調試,修復腳本並在啓動實例時將其用作用戶數據。我已經做了很多次,如果你沒有看到預期的結果,請隨時提問。 – helloV 2014-12-03 23:37:18