AWS RDS MySQL 如何限制对单个 EC2 实例的数据库访问

AWS RDS MySQL How to restrict db access to a single EC2 instance

我最近继承了一个 AWS 账户的维护工作,并注意到数据库访问对任何网络、任何地方都是开放的!所以我决定它必须像我们使用自己的虚拟机那样简单。除了 Amazon AWS EC2 实例有一个内部 IP 和一个 public IP,有时还有一个弹性 IP。所以我想好吧,我会搜索 google 并找到一篇简单的快速文章,但似乎没有。那么有人可以在这里提供有关如何执行此操作的简单文章。我了解 RDS 安全性等方面存在三种方法。如果您没有时间或不想涵盖所有这三个,请只选择您喜欢的一个并用作示例。如果我在一天左右的时间内没有得到很好的回应,我会点击文档并自己拼凑起来,提前谢谢你!

好吧,我稍微修改了一下。文档并不太具有暗示性。我发现在分配了弹性 IP 的 EC2 实例上,我必须使用我应用于 RDS MySQL 数据库的安全组中允许的私有 IP。分配或未分配的弹性 IP 不影响连接。在没有分配弹性 IP 的 EC2 实例上,我必须使用安全组中允许的 Public IP。私有 IP 无关紧要。这对我来说有点奇怪。

Amazon 关系数据库服务 (RDS) 实例通常应保密以防止从 Internet 访问。只有在极少数情况下,RDS 实例才能在 Internet 上访问。

可以通过多种方式保护 RDS 实例:

1.在私有子网中启动它 虚拟私有云 (VPC) 可以配置 public 和私有子网。在私有子网中启动 RDS 实例将阻止来自 Internet 的访问。如果仍然需要通过 Internet 进行访问(例如访问您的公司网络),请在 VPC 和您的公司网络之间创建安全的 VPN 连接。

2。使用安全组 安全组像防火墙一样围绕每个单独的 EC2 实例运行。它们定义允许入站和出站访问的端口和 IP 地址范围。默认情况下,允许出站访问但不允许入站访问。

3。无 Public IP 地址 如果 RDS 实例没有 Public IP 地址,则无法直接从 Internet 访问它。

4.网络访问控制列表 这些类似于安全组,但它们在子网级别运行。适用于控制哪些应用层可以相互通信,但不适用于保护特定 EC2 或 RDS 实例。

因此,要使 RDS 实例 public 可以访问,它必须具备以下所有条件:

  • 一个public IP地址
  • 允许入站访问的安全组
  • 位于 public 子网中
  • 打开网络 ACL 规则

针对你的情况,我建议:

  • 修改RDS实例,设置PubliclyAccessible为False。这将删除 public IP 地址。
  • 创建一个新的安全组(我将其称为 "SG1")并将其分配给您希望允许与 RDS 实例通信的单个 EC2 实例
  • 修改与 RDS 实例关联的安全组并允许来自 SG1 的入站通信(允许来自 EC2 实例的通信)。请注意,这是指 SG1 安全组本身,而不是指任何特定的 IP 地址。