从 VPC 中的 Elastic Beanstalk 实例访问 RDS

Access RDS from Elastic Beanstalk Instance in VPC

我正在尝试配置从 Elastic Beanstalk 环境中的实例访问我们的 RDS。

RDS和EB环境在同一个VPC中

复杂的是 EB 实例的安全组是在环境创建时动态生成的。我不确定如何配置 RDS 安全组以允许动态安全组。

我试过为 VPC 使用 CIDR,但这似乎不起作用。

有推荐的方法吗?

默认情况下,ElasticBeanstalk 将在“出站”选项卡的所有端口上创建一个与实例关联的安全组,该实例具有 0.0.0.0/0。如果您没有更改它,那么您需要做的就是将 EC2 实例所在的子网添加到 RDS 安全组(即 3306 上的 10.10.10.0/24)。从实例中尝试 telnet,应该没问题。

或者,您可以使用 EB 通过 CloudFormation 执行此操作 - http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-beanstalk-environment.html

最后,也许可以使用 ebextensions 来做到这一点,但那将是我最后的选择,因为我在 ebextensions 方面取得了不同程度的成功,尤其是在自动缩放实例方面。

EC2 安全组不仅可以用于允许传入和传出流量。它们也可以用于 EC2 实例的纯标识。

创建 Elastic Beanstalk 应用程序时,EB 始终会为 EC2 实例创建一个安全组,但您也可以向您的 EC2 实例添加另一个安全组。

利用这两条信息,您可以进行以下操作:

  1. 为您的 EC2 实例创建一个安全组。不要给安全组任何传入或传出规则。
  2. 允许此安全组访问您的 RDS 实例,方法是向您的 RDS 安全组添加一条规则,允许您的安全组在端口 3306 上进行传入连接。
  3. 当您创建 EB 应用程序时,当系统要求您为 EC2 实例提供安全组时,select 您的安全组。或者,您可以编辑现有 EB 应用程序的配置并将您的安全组添加到安全组列表中。这是一个逗号分隔的列表。

完成后,您的 EC2 实例应该可以访问您的 RDS 实例。


顺便说一句,在 RDS 安全组的传入规则中为您的 VPC 使用 CIDR 也应该有效。