安全组更改后数据库连接仍然存在

安全组更改后数据库连接仍然存在

我们设置了一个系统,当依赖项发生中断时,向 SQS 中的队列发送消息。为了模拟中断并测试系统,我阻止了安全组上数据库的出站端口,但发现 ec2 实例仍然能够通过 JDBC 连接从数据库检索数据即使在端口被封锁之后相当长一段时间(超过10分钟,不到两个小时)。

发生了什么事?安全组更改应该立即生效,但我认为这与不关闭实时连接有关?

有没有更好的方法来模拟中断,因为我们不想实际上关闭数据库?

答案1

安全组规则的更改几乎立即生效。

然而,规则允许的是建立连接。一旦连接建立,网络就会记住连接的三元组(协议、源/目标地址、源/目标端口),并且允许连接继续存在,因为它已经创建。

相比之下,网络 ACL 是无状态的。使用网络 ACL 阻止连接应该会产生您想要的效果,尽管可能不完全相同,因为数据库可能会以多种方式失败,并且表现形式可能不同。

当网络 ACL 拒绝流量(或安全组拒绝新连接)时,会导致超时 - 因为被拒绝的数据包会被直接丢弃,而不会向相反方向发送任何消息来表明网络中存在黑洞。

相比之下,现实世界中的故障可能会交替导致网络错误,如“目标主机无法访问”或“连接被拒绝”或“对等方重置连接”。这些故障中的每一个都应该比超时更快,并且没有办法在 VPC 基础设施内模拟它们。

但模拟超时故障应该是一个非常有价值的测试,并且网络 ACL 应该可以促进这一点。

当然,请注意,如果你仍然能够建立新的与据称阻止流量的安全组的连接,那么您的安全组行为就不是您所认为的那样。

相关内容