我使用相同的AZ和相同的帐户创build了两个EC2实例。 他们使用不同的安全组。 我希望实例A只从实例B的某个端口接受连接。
我不认为这些实例是VPC,但不知道如何确认。 我无法改变使我认为他们不是VPC的安全组。
例如,在安全组中,AI为端口添加了一条规则,并使用实例B的公共IP / 32作为源。 然后我尝试使用实例A的公共IP从实例B进行连接,但连接尝试立即失败。
我尝试了与每个实例的私有IP相同的步骤。 我错过了什么?
下面是一篇回答类似问题的文章,但涉及VPC: 无法连接到VPC(Amazon AWS)中的EC2实例 。
两个实例具有相同的VPC ID和子网ID。
我也尝试将源设置为实例B的安全组,但是这也不起作用。
我正在尝试这与MySQL。 在实例B上运行的mysql客户端立即失败并出现此错误:
错误2003(HY000):无法连接到'54 .xx.xx.xx'(113)上的MySQL服务器
为了检查mysqld安装没有问题,我尝试了ICMP Echo Reply也没有问题。
编辑感谢最初的答案,我能够确认这两个实例在VPC中运行(通过转到VPC控制台)。 所以,我的问题是非常相似的链接文章。 但是,在这种情况下,问题是实例不是默认实例,所以没有创build正确的路由和子网。 以下是我的VPC设置方式:VPC是默认设置,并且具有与其关联的路由表。 路由表被隐式关联到与VPC关联的子网。 路由表中有一条路由,目标是“本地”。
这些都是默认创build的,据我所知文档应该允许两个实例相互连接。 我(还)失踪了什么?
我在AWS技术支持的帮助下解决了这个问题。 这是未来的新手像我这样的信息:
问题是iptables在实例B上运行,不允许任何stream量。 我了解到,EC2实例有两级防火墙:安全组(由AWS控制台pipe理)和iptables(在主机上pipe理)。 有理由使用iptables,例如https://wincent.com/wiki/Using_iptables_on_EC2_instances
在运行Amazon EC2时,大多数时候您不必担心使用主机级别的防火墙(如iptables),因为Amazon允许您在“安全组”中运行实例,这实际上是您使用的防火墙策略指定应允许来自外部世界的连接到达实例。 但是,这是一个“白名单”的方法,在运行的实例中将其用于“黑名单”目的并不简单。
在我的情况下,我不需要主机级别的防火墙,所以把iptablesclosures:
sudo service chkconfig stop sudo chkconfig iptables off
以下是我在这个问题上发表的评论的一些结果:
这个对我来说在另一个实例上工作的原因是,我在那个例子中使用的图像没有运行iptables – 每个图像是不同的。 我在这种情况下使用的图像使用iptables禁止所有连接,除了SSH。
有点题外话,但这是这个问题唯一的search结果。
我们有类似的问题,但我们现有的实例重新启动,突然间无法沟通。 事实certificate,安全团队中有太多的规则 – 只是删除一些允许的通信恢复。 在重新启动之前,它仍在工作,因为随着时间的推移,通过自动调用API来添加规则。
希望这有助于未来的人。
如果您不能修改正在运行的实例的安全设置,则不会将其启动到VPC中。
即使对于不在VPC中的实例,EC2也会将其发送到互连的专用networking中。 所以你应该在实例A的安全组中指定实例B的私有IP地址
(1)您可以通过AWS控制台查看您的实例是否在VPC中。 在EC2仪表板中,您可以select您的实例,然后在左侧列的“描述”选项卡中有一个VPC ID字段。 如果这是空白的,那么你在EC2-classic。
(2)除非该端口向世界开放,否则您不能从EC2的另一个实例中访问实例的公共IP。 你上面的错误使用IP 54.XXX告诉我你正在使用公共IP。 改变你的连接string来改用公有的DNS。 这将是以ec2-开头的主机名。 当您对该公共DNS名称执行DNS查找时,将parsing为PRIVATE IP而不是公共IP,如果您的安全组设置正确,则应该可以访问该IP。
总结:尝试使用实例的公共DNS连接到您的mysql实例。
如果仍然无法连接,请确认mysql正在eth0上进行侦听,而不仅仅是在loopback接口上进行侦听。
AWS为VPC和非VPC实例分别设置安全组,因此您需要以某种方式查明您是否在VPC上(只需转到VPC控制台并检查是否在您的实例中查看),然后确保您拥有的安全组创build在相同的上下文中。 然后,您可以将安全组A添加到安全组B作为可信任,并做相反的事情。 这样你就可以允许在一个端口上的两个主机之间的所有stream量(我认为这是你的意图)。