我有一个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)根本无法接收任何传入流量,但Web服务(也在AWS上运行)仍然能够读取和写入RDS。有人能帮我更好地理解这一点吗?
对于您的第一个问题,您描述的步骤不应该导致任何问题,从而导致您的客户端突然无法连接到他的数据库。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中的服务器允许端口80上来自sg-003中任何服务器的传入流量。
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是您的弹性负载均衡器。在这种情况下,互联网上的任何计算机都可以访问ELB上的端口80和443。web服务器只接受来自负载均衡器的流量(即,您不能直接从服务器加载页面,必须通过ELB),数据库只接受来自web服务器的连接。