AWS 安全组难题

Posted

技术标签:

【中文标题】AWS 安全组难题【英文标题】:AWS Security Group Puzzle 【发布时间】:2021-11-03 21:23:00 【问题描述】:

我有一个用于我的 RDS 实例的 AWS 安全组。

我还有一个用于我的 EC2 实例的 AWS 安全组。

我已经设置好了,所以 EC2 实例的安全组用作我用于 RDS 实例的安全组的入口。

从我的 EC2 实例中,我可以使用 mysql 命令毫无问题地访问 RDS 实例。

但是,如果我尝试使用带有 MySQLi 的 php 脚本来访问 RDS 实例,它会无法连接。

如果我将 EC2 实例的实际 AWS IP 地址作为入口添加到 RDS 安全组,则使用 MySQLi 的 PHP 脚本可以正常工作。

知道为什么会这样吗?

更多细节:

    RDS 和 EC2 安全组位于同一个 VPC 上。 添加 EC2 私有地址且未进行其他更改时,软件连接正常。

这就是行为令人费解的原因

【问题讨论】:

如果没有任何相反的证据,我会将其归结为配置错误。安全组是地址和端口级别的东西 - 他们不知道哪个程序正在建立连接。 当您说“EC2 实例的实际 AWS IP 地址”时,您指的是公共 IP 还是私有 IP? 我指的是私有IP地址(AWS) EC2实例和RDS数据库是否在同一个VPC中?通过mysql和MySQLi连接数据库时,RDS数据库是如何被引用的(例如IP地址或DNS名称)? 【参考方案1】:

典型的安全配置是:

Amazon EC2 实例 (App-SG) 上的安全组,具有所需的入站权限和默认的“全部允许”出站权限 Amazon RDS 数据库 (DB-SG) 上的一个安全组,允许从 App-SG 对端口 3306 (MySQL) 进行入站访问

也就是说,DB-SG 在其入站规则中专门引用了App-SG

EC2 实例上的软件应通过其 DNS 名称引用 RDS 数据库,该名称将解析为私有 IP 地址(假设 EC2 实例和 RDS 数据库位于同一 VPC 中)。

如果您的配置适用于 EC2 实例上的 mysql 命令,那么它也应该适用于 MySQLi 访问,因为它们都将连接到同一端口 (3306) 上的同一目标 DNS 名称。

【讨论】:

以上是关于AWS 安全组难题的主要内容,如果未能解决你的问题,请参考以下文章

使用 Terraform (AWS) 将安全组添加到另一个安全组的入站规则作为源

AWS 清理安全组

AWS 安全组设置指南

入站流量的 AWS 安全组

自引用 aws 安全组

更改 AWS ECS 服务的安全组