安全组

安全组

请注意:端口 22 只是一个示例端口,有时我尝试处理的不是端口 22。

安全组

"server-1" has a security group "group-1"
"server-2" has a security group "group-2"
"server-1" has an elastic ip address assigned to it i.e 111.222.333.444

"group-2" is allowed to connect to "group-1" via port 22

因此如果我从服务器-2服务器-1通过以下命令

ssh -iKEY.pem [email protected]

连接良好,工作如预期。

但是,如果我尝试通过此命令连接。

ssh -iKEY.pem [email protected]

我认为它不起作用的原因很明显

我已离开 AWS 网络以连接到服务器-1因此 aws 认为该连接来自服务器-2作为外部资源,不再是 aws 实例。这意味着它将不会使用以下安全组:

"group-2" is allowed to connect to "group-1" via port 22

实际问题

我想连接到服务器-1通过 ElasticIP 地址,这样我就可以愉快地重启服务器-1和/或服务器-2并且不必担心 aws 实例名称/ip 地址已更改,即第一个 ssh 示例中的域名将在重启/新实例接管时更改。

所以我的问题实际上是,什么是实现此目的的最佳实践方法。我目前能看到的选项是:

  1. 对 ElasticIP 地址进行反向 DNS 查找,并使用此域名形式进行连接服务器-2服务器-1 例如,弹性 IP 地址是 111.222.333.444,反向查找将返回

    ec2-111-222-333-444.eu-west-1.compute.amazonaws.com

    不能继续手动构建,因为我还需要知道实例位于哪个可用区域才能执行此操作(我非常不想关心它在哪里)。

  2. 我假设我可以执行 aws api 调用来获取附加到 ElasticIP 地址的当前实例名称。我不太热衷于知道应用程序位于 aws 服务器上,并且希望远离 api。

  3. 在 aws 中使用 vpc 实例。这样,我就可以始终将相同的私有 IP 地址附加到服务器-1即使在任一服务器重启后也能可靠地连接到它。然而,这似乎需要大量的配置和维护。

  4. 我可以手动更新指向服务器-1重新启动后(这不是系列建议)。

  5. 打开服务器-1端口 22 向外界开放(注意:我想开放其他端口,而不仅仅是 22),并担心应用程序进行身份验证。(这又不是一个明智的选择,就像我想开放端口 80 到服务器-2然后必须使用 .htaccess 或类似文件来验证连接,因此只是转移了这个问题而不是真正解决它)。

我对选项 1 和 2 的问题是,我必须始终进行这些查找,这会给应用程序带来巨大的开销,或者我将其缓存起来,并且必须接受这样的事实:如果服务器-1发生更改,即重新启动,然后有一段时间服务器-2将无法连接到服务器-1直到它取消缓存实例名称。

选项 3 可能是最好的解决方案,但是它的配置和维护非常耗时,并且需要我们公司具备额外的知识。

有人还有其他可行的建议吗?

答案1

考虑到您的要求,我同意使用 VPC 是最佳解决方案。听起来您已经做过研究,您知道 VPC 可以对子网和主机寻址进行更细粒度的控制。回答您的问题,这是“最佳实践”方法。

我要做的是创建两个私有子网,每个可用区一个,并在每个子网中放置一个具有静态私有 IP 地址的弹性网络接口。然后,您可以随意将 ENI 附加/分离到适当的实例。这允许一些很酷的东西和功能,例如在流量仍在流经服务器时在服务器之间热交换 NIC。是的,设置 VPC 有一个很大的学习曲线,但当使用需要相互通信的多个 EC2 实例时,其权衡是大大提高了安全性和灵活性。

值得注意的是,使用 AWS API(正如您所提到的)也是满足您当前需求的可行解决方案。但是,随着需求的增长,您越是沿着这条编写自定义解决方案的道路前进,维护起来就越耗时。

答案2

查找实例的公共 DNS 的 AWS api 方法如下:

http://169.254.169.254/latest/meta-data/public-hostname

(这是 AWS 内部 IP,而不是外部服务。)

但至于问题的根源,弹性 IP 的公共 DNS 应该永久与该弹性 IP 关联,无论它指向重新启动/新实例如何。我所有的弹性 IP 公共 DNS 看起来都像 ec2-11-22-33-44.compute-1.amazonaws.com。你怎么会在公共 DNS 中有一个区域?上面的 api 返回什么?

相关内容