【发布时间】:2014-04-04 22:55:18
【问题描述】:
我有以下设置:
一个同时托管应用服务器和数据库 (mysql) 的 EC2 实例,属于一个安全组:我们称之为“AppServerSG”,并分配了一个弹性公共 IP(AWS 也为其分配了一个私有 IP)。
启动时需要连接到应用服务器数据库的各种 EC2 工作实例。这些工作实例属于另一个安全组:我们称之为“WorkerSG”。
安全组的入站规则如下所示。
对于 AppServerSG:
80 (HTTP) 0.0.0.0/0
3306 (MYSQL) WorkerSG
对于 WorkerSG
80 (HTTP) AppServerSG
所以基本上只有应用程序服务器应该可以从外部访问,并且工作人员和应用程序应该能够相互通信。
但是,只有当数据库主机设置为应用服务器的私有 IP,而不是公共弹性 IP 时,才能从工作实例连接到数据库。
使用应用程序服务器的公共 IP 从工作实例连接到数据库的唯一方法似乎需要更改 MYSQL 规则以允许 AppServerSG 上的所有连接 (0.0.0.0/0),这是我非常喜欢的出于安全考虑不愿做。
将私有 IP 硬编码到工作实例中也不是一个好主意,因为每次应用服务器实例停止/重新启动时,都会为其分配一个新的私有 IP,然后需要手动更改数据库地址每个工作实例都需要连接到。
我基本上想知道是否有人遇到了类似的麻烦,因为这似乎不是事情应该工作的方式,所以要么我在设置中做错了什么,要么有某种解决方法。
非常感谢您的帮助!
编辑:
此设置背后的动机是,如果我想使整个设备脱机,我可以安全地将其重新联机,而无需更改应用程序服务器和工作器的配置。
如果我使用 RDS,当再次使应用程序脱机/联机时,我将不得不拍摄数据库的快照并停止它,然后根据快照创建一个新的数据库,该数据库将具有不同的地址,然后让我回到更改配置的问题。
老实说,如果我每次重新启动应用程序时都必须编辑配置,我宁愿将数据库放在应用程序服务器上,并为自己节省与 RDS 相关的成本。
这里的主要问题是,我不明白为什么当我将公共弹性 IP 用于数据库地址时,安全组似乎不适用,这是 AWS 方面的设计,还是错误在我的某个地方的配置中?
【问题讨论】:
标签: mysql security amazon-web-services amazon-ec2