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 安全组难题的主要内容,如果未能解决你的问题,请参考以下文章