我们在 aws 上的 RDS 实例上有 sql db。EC2 上托管了一个可以访问 sql db 的 Web 应用程序。我们也从我们的办公室访问这个数据库。由于我们的办公室没有自己的静态 IP,因此我们必须使 RDS 实例可以从任何 IP 地址访问,以便我们可以连接到此实例进行工作。如果我们有静态 IP,我们将只允许访问我们的 IP。
问题是如何确保这个数据库是安全的并且不会受到安全威胁?有没有办法可以确保它安全而无需为我们的办公室购买静态 IP?显然,任何可从世界任何地方访问的数据库都容易受到攻击。
我们花了一周时间尝试在 Google 上寻找解决方案,但尚未成功。
答案1
无论你做什么,都不要将生产数据库暴露给互联网“0.0.0.0/0”。这样只会让自己面临数据泄露、盗窃、滥用等风险。
最简单的方法是让您的 RDS 实例“公开可访问”,但只能从一个非常短的固定 IP 地址列表中访问。
如果这对你的情况不起作用,那么你可以使用 SSH 隧道来保护你的 SQL 连接。如果你必须从“0.0.0.0/0”访问,那么 SSH 比 SQL 更好。
请执行下列操作:
- 将您的 RDS 实例放在私人的您的 VPC 的子网。这会将您的 RDS 实例隐藏在互联网之外。在这种情况下,您的 RDS 实例是不是可公开访问。
- 您的 Web 应用程序将通过其 DNS 名称访问 RDS 实例(该名称应解析为其私人的IP地址)。
- 在运行的公共子网中启动堡垒 EC2 实例
sshd
。 - 当您的用户需要从本地网络访问 SQL 数据库时,让他们通过 SSH 连接到堡垒 EC2 实例,并通过 SSH 连接将 SQL 连接隧道传输到 RDS 实例。
由于您的 Web 应用程序通过私有 IP 地址访问 SQL 服务器,因此您不会产生数据流量费用(如果您通过公共 IP 地址访问,则会产生费用)。
参考:
答案2
对于您的组织来说,最简单、最便宜的选择可能是看看您的 ISP 是否愿意向您提供静态 IP 地址(需额外收费),或者寻找能够提供此项服务的新 ISP。
否则,我建议在您的站点和 AWS VPC 之间设置 VPN,并通过 VPN 连接到 RDS 实例。此解决方案取决于您的组织是否具有一定的网络专业知识。不幸的是,这不是一个快速而简单的解决方案。这里是了解 AWS 提供的不同 VPN 选项的起点。
我见过的其他解决方案都是丑陋的变通方法。以下是两个:
找出您的 ISP 的 CIDR 并允许整个范围的访问。(这样至少可以限制使用您的 ISP 的其他人的访问,而不是整个互联网的访问。)
编写一个脚本来检测你的 IP 地址何时发生变化,并使用新的 IP 地址更新 RDS 安全组规则。
我假设您的 IP 地址经常更改。(否则,您只需在必要时手动更新安全组即可。虽然不方便,但比向全世界开放更安全。)
如果您想研究如何设置 VPN,可以从以下起点开始:AWS VPN 连接选项