2014-12-03 61 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