我们正在Amazon EC2上设置我们的IT基础架构。 假设设置如下: X生产服务器 Y登台服务器 日志排序规则和监控服务器 构建服务器 显然,我们需要让各种服务器相互通信。需要将新构建scp到staging服务器。 Log collator需要从生产服务器提取日志。我们很快意识到我们在管理访问密钥时遇到了麻烦。每个服务器都有自己的密钥对,可能还有自己的安全组。我们最终将* .pem文件从服务器复制到服务器类型,这是对安全性的嘲弄。构建服务器具有登台服务器的访问密钥,以便通过ssh连接并推送新的构建。登台服务器同样具有生产实例的访问密钥(gulp!) 我在网上做了一些广泛的搜索,但真的找不到任何人谈论一个明智的方法来管理这个问题。设置与我们相似的人如何处理此问题?我们知道我们目前的工作方式是错误的。问题是 - 什么是正确的方法? 感谢您的帮助! 感谢
[更新] 我们的情况很复杂,因为至少需要从外部服务器(特别是github)访问构建服务器。我们使用Jenkins,post commit hook需要一个可公开访问的URL。 @rook建议的堡垒方法在这种情况下失败了。
答案 0 :(得分:5)
处理对EC2实例集合的访问的一种非常好的方法是使用Bastion Host。
您在EC2上使用的所有计算机都应禁止SSH访问开放式互联网,但Bastion Host除外。创建一个名为“Bastion Host”的新安全策略,并且只允许从堡垒传入的端口22到所有其他EC2实例。 EC2集合使用的所有密钥都位于堡垒主机上。每个用户都有自己的帐户到堡垒主机。这些用户应使用受密码保护的密钥文件对堡垒进行身份验证。一旦他们登录,他们应该可以访问他们完成工作所需的任何密钥。当某人被解雇时,您将其用户帐户移至堡垒。如果用户从堡垒复制密钥,则无关紧要,因为除非他们首次登录堡垒,否则无法登录。
答案 1 :(得分:0)
创建两组密钥对,一组用于登台服务器,另一组用于生产服务器。您可以为开发人员提供登台密钥并将生产密钥保密。
我会将新版本放到S3上并在框上运行perl脚本,从S3存储桶中提取最新代码并将它们安装到相应的服务器上。这样,您不必每次都手动将所有构建scp到其中。您还可以使用某种连续构建自动化工具自动执行此过程,这些工具将分别构建和转储构建到您的S3存储桶。希望这会有所帮助..