我有一个RDS实例,我的客户坚持要求我不要触摸。他说可以创建一个副本,然后使用它来测试新功能,所以我继续从原版创建了一个只读副本,当它完成后,我将只读副本推广到一个独立的实例。然后,我创建了一个新的安全组(仅允许我的IP),并且在复制的实例上(仅我已经确认)已更改为使用该安全组。我的副本实例工作正常。
我的客户决定登录原始的MySQL RDS实例(因为他出于某种原因想要这样做)并向我抱怨说,8个月以来他第一次无法访问它。他无法与Error 60
联系。他责备我,他可能是这样做的。
首先首先,这个过程中的任何内容看起来都可能搞砸了原始RDS的安全组,或原始安全组的入站允许设置?
而第二次,当我查看安全组设置时,我并不完全了解其工作原理。它的设置如下:
RDS uses Security Group sg-001 [real ids changed for readability]
sg-001: Inbound TCP 3306 Source: sg-002
sg-002: Inbound TCP 80 Source: sg-003
sg-003: Inbound TCP 80 Source: 0.0.0.0/0
Inbound TCP 443 Source: 0.0.0.0/0
所以当我读到它时,在我看来RDS(使用sg-001)根本不能有任何传入流量,但webservice(也在AWS上运行)仍然能够读写RDS。有人能帮助我更好地理解这一点吗?
答案 0 :(得分:3)
对于您的第一个问题,您描述的步骤不应该导致任何导致客户端突然无法连接到其数据库的问题。 AWS账户是否启用了CloudTrail?如果是这样,您应该能够看到对RDS实例所做的每一项更改,以便准确解释发生了什么。
对于您的第二个问题,以下是您的每个安全组规则的含义:
sg-001: Inbound TCP 3306 Source: sg-002
sg-001中的服务器允许来自任何服务器的端口3306上的传入流量,该服务器是sg-002的成员。
sg-002: Inbound TCP 80 Source: sg-003
sg-002中的服务器允许来自sg-003中任何服务器的端口80上的传入流量。
sg-003: Inbound TCP 80 Source: 0.0.0.0/0
Inbound TCP 443 Source: 0.0.0.0/0
sg033g中的服务器允许来自任何地方的端口80和443上的传入流量。
我假设sg-001是您的数据库,sg-002是您的Web服务器,而sg-003是您的Elastic Load Balancer。在这种情况下,互联网上的任何计算机都可以命中ELB上的端口80和443。 Web服务器仅接受来自负载均衡器的流量(即,您无法直接从服务器加载页面,您必须通过ELB),并且数据库仅接受来自Web服务器的连接