从 VPC 中的 Elastic Beanstalk 实例访问 RDS
Posted
技术标签:
【中文标题】从 VPC 中的 Elastic Beanstalk 实例访问 RDS【英文标题】:Access RDS from Elastic Beanstalk Instance in VPC 【发布时间】:2016-12-19 06:44:33 【问题描述】:我正在尝试配置从 Elastic Beanstalk 环境中的实例访问我们的 RDS。
RDS 和 EB 环境在同一个 VPC 中。
复杂之处在于 EB 实例的安全组是在环境创建时动态生成的。我不确定如何配置 RDS 安全组以允许动态安全组。
我尝试将 CIDR 用于 VPC,但这似乎不起作用。
有推荐的方法吗?
【问题讨论】:
您是说您在不断创建新的 Elastic Beanstalk 环境吗? 【参考方案1】:EC2 安全组不仅可以用于允许传入和传出流量。它们也可以用于 EC2 实例的纯识别。
在创建 Elastic Beanstalk 应用程序时,EB 将始终为 EC2 实例创建一个安全组,但您也可以向您的 EC2 实例添加另一个安全组。
使用这两条信息,您可以执行以下操作:
-
为您的 EC2 实例创建一个安全组。不要给安全组任何传入或传出规则。
允许此安全组访问您的 RDS 实例,方法是向您的 RDS 安全组添加一条规则,允许您的安全组在端口 3306 上进行传入连接。
当您创建 EB 应用程序时,当系统要求您为 EC2 实例提供安全组时,请选择您的安全组。或者,您可以编辑现有 EB 应用程序的配置并将您的安全组添加到安全组列表中。这是一个逗号分隔的列表。
完成此操作后,您的 EC2 实例应该可以访问您的 RDS 实例。
顺便说一句,在 RDS 安全组的传入规则中为您的 VPC 使用 CIDR 应该也可以。
【讨论】:
谢谢,这很好用。出于某种原因,当我之前尝试它时,当我在我的配置中明确列出我的实例的附加 SG 时它失败了。【参考方案2】:默认情况下,ElasticBeanstalk 将在 Outbound 选项卡中的所有端口上创建一个与实例关联的安全组,其地址为 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 方面取得了不同程度的成功,尤其是在自动缩放实例方面。
【讨论】:
我在 RDS 端受到限制。它未配置为允许来自私有子网内的所有请求。我需要一种方便的方法来仅允许访问我的弹性 beanstalk 实例,而无需通常对 RDS 开放安全性。为 EB 实例分配一个额外的空白 SG,然后在 RDS 允许该组就可以了。 你知道,我想我并没有尝试打开 3306 端口……那真是漫长的一天。我试试看!以上是关于从 VPC 中的 Elastic Beanstalk 实例访问 RDS的主要内容,如果未能解决你的问题,请参考以下文章
没有 NAT 的私有 VPC 中的 Elastic Beanstalk 应用程序
AWS Elastic Beanstalk VPC - 从 ELB 到实例的 HTTPS