【问题标题】:AWS EC2 security groups don't seem to apply for Public IPsAWS EC2 安全组似乎没有申请公共 IP
【发布时间】: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


    【解决方案1】:

    确实,推荐的配置是让您使用 RDS 数据库实例,将您的数据库安全组设置为仅接受来自相应 EC2 安全组的连接。在此配置中,您可以像 user@% 一样设置您的数据库用户,并且仍然强制对指定的 EC2 安全组访问数据库。

    通过这种方式,您可以将数据库访问控制的负担转移到 AWS 安全模型,而不是 MySQL 用户配置。当然,您仍然需要将 DB 用户配置为只能访问 DB 中那些适当的资源。

    【讨论】:

    • 添加了对原始帖子的编辑以进行澄清
    • @FadiBitar 你提到“万一”你想关闭一切。这是一个真实的用例(即您需要每晚关闭它),还是让您的设计受某些假设场景的驱动?
    • 很有可能。该应用程序基本上是一个我们将在需要时偶尔使用的工具,并且一直运行它的所有额外成本对我来说没有多大意义,所以显然我想让它尽可能简单在需要时将其离线并重新在线。
    • @FadiBitar 我认为在您的情况下,您需要将数据库帐户设置为 user@% 并依靠您的 AWS 安全组设置来控制对 MySQL 服务器主机上端口 3306 的访问正如你目前所做的那样。
    • 是的,这就是我正在做的事情。然而,问题在于托管数据库的服务器可以通过两个不同的 IP 访问:一个公共 IP(AWS 弹性 IP)和一个仅在 VPC 中可见的私有 IP。当工作实例尝试通过公共 IP 连接到数据库时,连接被拒绝,而通过私有 IP 连接可以正常工作。你看出问题出在哪里了吗?
    猜你喜欢
    • 2017-10-09
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-03
    相关资源
    最近更新 更多