2012-04-02 159 views
7

我们正在建立Amazon EC2上的IT基础架构。 假设沿着线的设置: X生产服务器 Ÿ临时服务器 登录核对和监控服务器 生成服务器 显然,我们有必要有各种服务器相互交谈。需要将新版本升级到临时服务器。日志整理器需要从生产服务器提取日志。我们很快意识到我们在管理访问密钥方面遇到了麻烦。每个服务器都有自己的密钥对,可能还有自己的安全组。我们最终将* .pem文件从服务器复制到服务器,这种做法对安全性做出了嘲弄。构建服务器具有登台服务器的访问密钥,以便通过ssh进行连接并推送新的构建版本。该临时服务器同样具有生产实例的访问密钥(一饮而尽!) 我做了一些广泛的搜索在网络上,但想不出真正找到任何人谈论来管理这个问题一个明智的方式。与我们处理这个问题类似的设置的人怎么样?我们知道我们目前的工作方式是错误的。问题是 - 什么是正确的方式? 感谢您的帮助! 谢谢管理EC2上的实例间访问

[更新] 我们的情况很复杂,至少构建服务器需要从外部服务器(特别是github)访问。我们正在使用Jenkins,并且post commit钩子需要一个可公开访问的URL。 @rook建议的堡垒方法在这种情况下失败。

+1

+1好问题。 – rook 2012-04-03 02:14:58

回答

5

的处理,以EC2实例的集合访问使用Bastion Host一个很好的方法。

您在EC2上使用的所有机器应禁止向互联网开放SSH访问,除了堡垒主机。创建一个名为“Bastion Host”的新安全策略,并且只允许从堡垒到其他所有EC2实例的端口22进入。您的EC2集合使用的所有密钥都位于堡垒主机上。每个用户都有自己的帐户给堡垒主机。这些用户应该使用受密码保护的密钥文件对堡垒进行身份验证。一旦他们登录,他们应该可以访问他们需要的任何密钥来完成他们的工作。当某人被解雇时,您将他们的用户账户移到堡垒。如果用户从堡垒复制密钥,那么它们将无关紧要,因为除非首先登录堡垒,否则他们无法登录。

+0

谢谢。请参阅我的问题 – anand 2012-04-10 11:06:01

+1

的更新@anand - 这仍然有两种工作方式:1)GitHub提交挂钩使用HTTPS,因此不受所有SSH的影响,如果您只是选择打开端口443詹金斯(但继续阅读)。 2)更好的是坚持Rook对此的建议,这需要为堡垒主机上的构建服务器设置反向代理服务器;这可能是易于还是有点根据环境有关,但GitHub的插件准备为此,参见[防火墙内詹金斯(https://wiki.jenkins-ci.org/display/JENKINS/Github+Plugin #GithubPlugin-Jenkinsinsideafirewall)。 – 2012-04-10 13:45:44

+0

优秀。我目前在我的Jenkins服务器上有反向代理 - 没有想到将它推入堡垒。谢谢! – anand 2012-04-12 09:39:04

0

创建两个组密钥对,一个用于您的临时服务器,一个用于生产服务器。您可以为开发人员提供登台密钥并将生产密钥保密。

我会把新的基础上,以S3和对机器上运行,从您的S3桶拉最新的代码和安装他们各自的服务器中perl脚本。这样,您不必每次都手动将所有构建资源分配给它。您还可以使用某种连续的构建自动化工具来自动执行此过程,这些工具将构建并分别将构建转储到您的S3存储桶。希望这会有所帮助..

+0

谢谢 - 我们已经在将从构建机推出到分段环境(S3或其他)的自动化过程中。由于各种原因,我们希望避免在生产机器上运行轮询脚本。此外,您的方法仍然意味着将登台服务器密钥推送到每个生产实例。创建一个嵌入SSH密钥的AMI会让我们感到不舒服。所以密钥问题的多个副本没有解决 – anand 2012-04-10 11:12:29