AWS RDS 实例上的静态 IP/向 DNS 端点开放端口 3306?

AWS RDS 实例上的静态 IP/向 DNS 端点开放端口 3306?

所以我之前在 stackoverflow 上问过这个问题,但我被告知我也应该在这里问,因为这似乎更像是一个基于网络的问题。我确实在 serverfault 上搜索过类似的问题,并遇到了这个从 2014 年开始,但我想进一步扩大它。

因此,对于我在办公室正在开展的一个项目,我有一个 .NET 应用程序,它将存储和检索我已设置的 AWS RDS MySQL 服务器中的数据。我遇到的问题是,我的工作网络上的端口 3306 未打开。当我不在公司网络上时,它运行良好,所以我知道这不是 AWS RDS 服务器的问题。(例如,如果我从手机热点,它就可以工作)

我联系了网络部门,想看看他们能做些什么来打开这个端口。他们问我是否有办法为这个 AWS RDS 实例设置一个静态 IP,这样他们就可以添加防火墙规则,只允许这个静态 IP 使用端口 3306。他们说,出于安全原因,他们只想根据服务器的 IP 地址打开端口,而不是完全打开端口 3306。他们说,如果他们打开端口 3306,它将对整个办公网络开放,他们不能只对我的电脑 IP 打开它。

我在 AWS 仪表板上没有看到任何有关为我的 RDS 实例设置静态 IP 的信息。IT 表示需要静态 IP 的原因是,当与他们提供的端点 DNS 关联的 IP 发生变化时,他们不需要调整防火墙设置来适应此变化。

1) 是否可以在 RDS 实例上将 IP 设置为静态?(根据上面的链接,这似乎不可能,但我想问一下,万一有些事情发生了变化,现在这是可能的,因为上一篇文章是 2014 年的)

2) 是否可以只为 AWS 提供的这个特定 DNS 端点打开端口?我的 IT 团队说他们不可能将端口打开到 URL,并且必须是 IP(静态的,这样就不会改变)。这是真的吗?或者有办法解决这个问题?基于回复从我的 stackoverflow 帖子中,他提到可以通过以下方式实现:

您可以告诉您的 IT 团队在端口 3306 中为 RDS 实例 URL 创建防火墙规则,它将正常工作。

如果真的有可能的话,我是否可以向我的 IT 网络团队提供任何额外的信息,以帮助他们朝着正确的方向发展?考虑到云托管 MySQL 服务器的普及,我觉得这必须是一项非常常见的任务,而且我不可能是唯一遇到此问题的人?

谢谢你!

答案1

听起来您的网络环境相当封闭,不允许发往端口 3306 的出站连接。“传统”防火墙只允许针对 IP 的 ACL,而不允许 DNS 名称,因此听起来 RDS URL 对您不起作用。这些防火墙在第 3 层和第 4 层运行,因此它们没有 DNS 名称的概念,而 DNS 名称是第 7 层的概念。

如果您的公司专门阻止与 3306 的连接(因为这是一个众所周知的端口),他们可能会允许您打开与不同端口的连接。然后您可以重新创建实例以使用该端口而不是默认端口。

如果封锁是在第 3 层和第 4 层实施的一项一揽子政策,那么你暂时可能运气不佳。你可以对实例的 IP 地址进行 DNS 查找,并将其用于 ACL,但该地址可能会发生变化。

通常我会建议他们只为您的客户端系统的 IP 地址打开连接,但正如您所说,他们已经拒绝了。我认为这是因为使用 DHCP 为您的系统分配地址,而不是静态 IP。也许您可以为您的系统请求静态 IP,或者您可以在具有静态 IP 的公司服务器上运行您的应用程序。这将允许他们完成他们可能认为可以接受的一对多 ACL。

答案2

RDS 实例没有固定的 IP 地址,因为这允许它为其他实例提供故障转移。

您可以将 EC2 代理服务器放入 VPC 中,放在您喜欢的任何端口上,以将流量发送到 RDS 实例。这将是一个纯粹传递数据包的 TCP 代理,Nginx 可以做到这一点。我还没有尝试过,但它应该可以工作。为 EC2 实例提供一个静态 IP(AWS 术语中的弹性 IP),Nginx 可以通过主机名代理到 RDS 实例。t2.nano 可能就是您所需要的,但如果流量很大,更大的服务器和更多的网络带宽可以提供更好的性能。

别忘了获取临时端口范围也已打开。基本上,入站端口 32768 至 61000 需要允许从 AWS 返回的流量。

我很好奇为什么你们会有一个带有云数据库的本地应用程序。如果你们可以在本地运行应用程序,为什么不在本地运行数据库?或者在 AWS 中同时运行应用程序和数据库?多个应用程序可能会导致数据库不一致、死锁或竞争条件。

如何

您可以阅读更多有关如何将 Nginx 设置为 TCP 代理的信息在他们的网站上。有一个关于如何在 AWS 上设置 Tiny Proxy(我以前从未听说过)的指南这里

最好聘请一位 AWS 顾问来短期内帮助您解决此问题,因为您还需要考虑安全性。

答案3

告诉您的网络人员,出于故障转移的原因,AWS 使用 DNS 名称而不是 IP。他们在公司环境中使用的任何防火墙都能够引用 DNS 名称而不是 IP,因此他们应该能够引用端点 DNS 名称而不是 IP。

如果没有,您可以在具有弹性 IP 的 ec2 实例上使用 haproxy,但如果这具有合法的业务用例,我建议尝试推动他们使用 dns 名称。Haproxy 只会增加一个故障点。

相关内容