【问题标题】:Connect to RDS in a different region from EC2 instance连接到与 EC2 实例不同的区域中的 RDS
【发布时间】:2020-04-12 10:48:32
【问题描述】:

所以我在 us-east-1 中有一个主 RDS,在 us-west-1 中有一个副本。两者都在各自区域的 VPC 内。我想让us-east-1 中的一个 EC2 实例连接到副本实例。

一个简单的解决方案是为RDS副本启用公共访问并将EC2的IP添加到其安全组中并且它可以工作。

但我不想允许静态 IP,而是希望允许访问我的 us-east-1 VPC 的整个 CIDR 范围,而且我不希望我的实例可以公开访问。

为此,我在两个区域之间建立了一个 VPC 对等连接,并在两个 VPC 的路由表中添加了条目,以将到彼此的 CIDR 范围的流量转发到对等连接。

EC2 实例的 CIRD 范围是 172.31.0.0/16,我已将其添加到 us-west-1 区域中的 RDS 副本的安全组中。但由于某种原因,我的 EC2 无法访问 RDS。

我还有什么遗漏吗?谢谢!

总结一下我的设置:

美国东部

  • VPC CIDR:172.31.0.0/16
  • 路由表条目:目标10.0.0.0/16 路由到us-west-1 VPC 的对等连接。
  • EC2 IP:172.31.5.234

美国西部

  • VPC CIDR:10.0.0.0/16

  • 路由表条目:目标172.31.0.0/16 路由到us-east-1 VPC 的对等连接。

  • RDS:

    • 可公开访问:是
    • 安全组:允许来自172.31.0.0/16 的连接

【问题讨论】:

  • 您可以通过将 EC2 的安全组设置为 RDS 安全组上的入站规则的源来执行此操作。这将通过安全组打开您的 RDS 和 EC2 之间的通信,无需 IP
  • 为清楚起见,您将应用程序安全组的组 ID,例如:sg-4e2fcf31 添加到数据库 (RDS) 安全组的入站源。这是我在生产中使用的设置,应该可以满足您的要求。
  • 即使VPC位于不同的区域,这是否有效?
  • @RyanCharmley 不,只是试过它说“无法更新您的安全组规则(未进行任何更改):安全组不存在”
  • 是的,我认为如果您不允许公共连接,那么您的应用程序和数据库服务器需要存在于同一个 VPC 上。也有兴趣知道是否有其他方法..

标签: amazon-web-services amazon-rds vpc aws-security-group


【解决方案1】:

为了重现您的情况,我做了以下操作:

us-east-1:

  • 使用“具有公共和私有子网的 VPC”VPC 向导在us-east-1 中创建了一个具有172.31.0.0/16 的 CIDR 的 VPC
  • 公共子网中启动了一个Amazon EC2 Linux 实例

us-west-1:

  • us-west-1 中使用“具有公共和私有子网的VPC”VPC 向导创建了一个VPC,CIDR 为10.0.0.0/16
  • 添加了额外的私有子网以允许创建使用多个可用区的 Amazon RDS 子网组
  • 跨两个私有子网创建了一个RDS 子网组
  • 私有 子网中使用 Publicly accessible = No 启动了一个 Amazon RDS MySQL 数据库

设置对等:

  • us-east-1 中,向us-west-1 中的VPC 创建了对等连接请求
  • us-west-1接受对等请求

配置路由:

  • us-east-1 中,配置公共路由表(由EC2 实例使用)将10.0.0.0/16 流量路由到对等VPC
  • us-west-1 中,配置私有路由表(由RDS 实例使用)将172.31.0.0/16 流量路由到对等VPC

安全组:

  • us-east-1 中,创建了一个安全组(App-SG),允许来自0.0.0.0/0 的入站端口22 连接。将其关联到 EC2 实例。
  • us-west-1 中,创建了一个安全组(RDS-SG),允许来自10.0.0.0/16(对等连接的另一端)的入站端口3306 连接。将其关联到 RDS 实例。

测试:

  • 使用ssh连接us-east-1中的EC2实例
  • 已安装mysql客户端(sudo yum install mysql)
  • 通过以下方式连接到 mysql:
mysql -u master -p -h xxx.yyy.us-west-1.rds.amazonaws.com

成功连接通过对等连接到 RDS 数据库。

仅供参考,数据库的 DNS 名称解析为 10.0.2.40(位于 us-west-1 VPC 的 CIDR 范围内)。此 DNS 解析适用于两个 VPC。

总而言之,重要的一点是:

  • 建立双向对等连接
  • 在 RDS 实例上配置安全组以允许来自对等 VPC 的 CIDR 的入站连接
  • 无需公开数据库

【讨论】:

  • 非常感谢伙计!!因此,在 RDS-SG 中,我打开了与 EC2 VPC 的 CIDR 块的连接。 (东方)。我将其更改为西 CIDR(运行 RDS 的 CIDR)。但我不明白这是如何工作的:/ 由于我的 EC2 的 IP 类似于 172.1.31.23,那不应该是 SG 中的条目吗?我对对等的理解有误吗?
  • 糟糕。我开枪了,我的 RDS SG 的 CIDR 块为 172.31.0.0/16,这是 us-east-1 VPC。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-03
相关资源
最近更新 更多