使用 Amazon RDS Proxy 和 AWS PrivateLink 跨 AWS 组织访问亚马

  • 2026-01-27 12:44:11

使用 Amazon RDS Proxy 和 AWS PrivateLink 访问 Amazon RDS 数据库

关键要点

企业解决方案:American Family Insurance Group 需要一个可私有共享的解决方案,以便不同业务线能访问集中存储的信息。技术结合:通过将 Amazon RDS Proxy 和 AWS PrivateLink 结合使用,实现跨 AWS 账户和组织的安全数据库访问。架构:该解决方案允许在不同 VPC 中通过 PrivateLink 访问 RDS 数据库,即使它们具有重叠的 CIDR 范围。

American Family Insurance Group美国家庭保险集团包含了多个子公司,包括 American Family Insurance、CONNECT由 American Family Insurance 提供支持、The General、Homesite 和 Main Street America Insurance。该公司是美国第十二大财产与意外保险集团,在《财富》500 强中排名第 301,拥有近 13000 名员工。

该集团需要一个企业级的解决方案,以便私密地共享集中存储的信息。这些信息存储在 Amazon Relational Database ServiceAmazon RDS中,需要多个业务线访问。这些信息用于推动组织的流程自动化、为市场营销活动汇总点击流数据,以及满足分析或运营报告的需求。

为了遵循最佳实践,该公司决定将工作负载隔离在各自的 AWS 账户和网络边界内。然而,他们仍然需要在具有重叠 CIDR 范围的不同 AWS 账户和 VPC 之间共享信息。

在本文中,我们将介绍该组织如何创建一个高度可用的集中数据库访问解决方案。他们通过结合使用 Amazon RDS Proxy 和 AWS PrivateLink,实现了对 RDS 数据库的安全私密访问,使来自不同 AWS 组织和账户的客户端能够通过 PrivateLink 连接到数据库,即使它们的数据 CIDR 范围重叠。

共享 Amazon RDS 连接性

在本文中,我们将使用“消费者账户”和“数据库账户”来说明连接性。数据库账户包括一个 RDS 数据库或 Amazon Aurora 集群、RDS Proxy 和 PrivateLink 端点服务。消费者账户则包含一个使用数据库账户 PrivateLink 端点服务的接口 VPC 端点。

拥有多个组织、VPC 之间重叠 CIDR 范围或集中管理数据库策略的客户,可能需要共享访问一个公共 RDS 数据库实例或 Aurora 集群。这些情境可以是由于并购造成的,或者是设计上的需要,提供特定数据库资源的集中入口点。

通过重叠的 CIDR 范围,您可以使用 PrivateLink 在数据库账户中创建一个端点服务,AWS 主体可以访问如其他 AWS 账户。PrivateLink 端点服务通过网络负载均衡器NLB与目标组相连接。一种选择是创建一个目标组,其中目标类型为 IP 地址,指向 RDS 实例或 Aurora 集群 IP,详细描述请参见相关文章 通过 AWS PrivateLink 和网络负载均衡器访问 Amazon RDS。但 IP 地址可能因多个可用区故障转移或数据库维护活动而变化。使用支持的数据库引擎时,RDS Proxy 会创建连接池,并在发生故障转移时自动连接到新的底层 RDS 数据库实例或 Aurora 集群实例。通过在多个可用区中创建 RDS Proxy 端点,为端点的生命周期提供静态 IP 地址,可以设置为 NLB 的 IP 地址目标。

在数据库账户中创建 PrivateLink 端点后,被允许的主体在消费者账户中创建接口 VPC 端点,以便私密连接到 RDS 数据库实例或 Aurora 集群。

使用 Amazon RDS Proxy 和 AWS PrivateLink 跨 AWS 组织访问亚马

如果是跨 AWS 账户连接到 RDS 数据库,但账户位于没有重叠 CIDR 范围的 VPC 中,并通过 AWS Transit Gateway 连接,则请参考 使用 Amazon RDS Proxy 提供跨 AWS 账户的 RDS 数据库访问。

接下来,我们将深入探讨 American Family Insurance Group 部署的解决方案,以实现在拥有重叠 VPC CIDR 范围的组织之间安全地连接 Amazon RDS。

解决方案概述

我们使用两个 AWS 账户,每个账户都在不同的组织内。每个账户使用自己的 VPC,具有重叠的 CIDR 范围。

下面的图示说明了解决方案架构。

先决条件

在开始之前,必须满足以下先决条件:

选择两个在不同组织中的账户。这一步是可选的,独立账户也能够工作。在数据库账户中,创建一个 VPC,至少有两个置于不同可用区的私有子网。注意选择的可用区的可用区 ID例如,use1az1。可以在 Amazon 虚拟私有云Amazon VPC控制台的子网详情标签中找到。在消费者账户中,创建一个 VPC,至少有两个私有子网,使用数据库账户的相同可用区 ID。确保您要创建的 Amazon RDS 或 Aurora 的 地区、引擎和版本 是被 RDS Proxy 支持的。

在数据库账户中创建 RDS 数据库实例和 RDS Proxy

本文中我们使用 Amazon RDS for MySQL。创建 RDS for MySQL 数据库实例,请完成以下步骤:

在 Amazon RDS 控制台中,选择导航窗格中的 DB instances。选择 Create database。选择 Amazon RDS for MySQL。对于 Version,选择最新的可用版本。对于 Templates,选择生产模板。对于 Availability and durability,选择 MultiAZ DB instance。在 Settings 部分,选择一个数据库实例标识符,设置用户名和密码,并确认密码。对于 Instance configuration,选择一个数据库实例类别。对于 Connectivity,选择作为先决条件创建的 VPC。选择 Create an RDS Proxy。创造一个新的 DB 子网组。对于 Public access,选择 No。对于 VPC security group,创建一个新的安全组。修改安全组中自定义规则,允许来自您在下一步创建 RDS Proxy 时将使用的子网 CIDR 的数据实例的入站连接。对于其他配置,输入初始数据库名称。其余设置保持为默认。

下图显示了使用 dbt3micro 实例类别配置的 RDS for MySQL 数据库实例。确保在进入下一步之前状态为可用,这通常需要几分钟。

确认分配给 RDS Proxy 端点的 IP 地址

接下来,我们确定为 RDS Proxy 端点自动创建的 VPC 端点分配了哪些 IP 地址。

在 Amazon RDS 控制台中,选择导航窗格中的 Proxies。选择在上一步中创建的代理标识符名称。找到您希望共享的代理端点,并复制该端点的 DNS 名称。使用 DNS 查找工具如 Dig查询 RDS Proxy 端点 DNS 名称的 VPC 端点 ID。从 DNS 查找结果中复制 VPC 端点 ID。 VPC ID 由前缀 vpce 和一系列字符组成,直到但不包括下一个破折号。

在 Amazon VPC 控制台中,选择导航窗格中的 Endpoints。找到从 DNS 查找结果中复制的 VPC 端点 ID。选择 Subnets 标签并记录每个子网的 IP 地址。

您将在下一步创建 PrivateLink 端点服务时使用这些 IP 地址。

魔方加速器最新版

在数据库账户中创建 PrivateLink 端点服务

接下来,我们完成三个步骤,使用 RDS Proxy IP 地址作为目标创建 PrivateLink 端点服务。

在数据库账户中创建目标组

完成以下步骤以使用 Amazon Elastic Compute Cloud (Amazon EC2) 创建目标组:

在 Amazon EC2 控制台中,选择导航窗格中的 Target groups。选择 Create target group。在 Basic configuration 中,选择 IP addresses。设置目标组名称。将 Protocol 改为 TCP,并将 Port 改为您的 RDS 实例端口MySQL 默认是 3306。选择之前用于 RDS Proxy 的 VPC。对于 Register targets IP addresses,指定您在上一步识别 RDS Proxy 端点时注意到的每个 IP 地址的目标条目。

当配置的健康检查完成后,目标健康状态将变为 Healthy。

选择 Create target group。

确保所有目标都健康,如下图所示的目标组。

在数据库账户中创建网络负载均衡器

完成以下步骤以创建网络负载均衡器:

在 Amazon EC2 控制台中,选择导航窗格中的 Load balancers。选择 Create load balancer。在 Network Load Balancer 下,选择 Create。在 Basic configuration 中,提供一个 NLB 名称。将方案设置为 Internal。对于 Network mapping,选择之前用于 RDS Proxy 的 VPC。选择之前用于 RDS Proxy 的每个子网。在 Listeners and routing 中,将 Protocol 改为 TCP,并将 Port 改为您的 RDS 实例端口MySQL 默认是 3306。在 Default action 中,选择在上一步中创建的目标组。

在数据库账户中创建 VPC 端点服务

完成以下步骤以在数据库账户中创建 VPC 端点:

在 Amazon VPC 控制台中,选择导航窗格中的 Endpoint services。选择 Create endpoint service。在 Endpoint service settings 部分,提供一个名称。在 Available load balancers 中,选择之前创建的 NLB。选择 Create。在 Allow principals 标签下,选择 Allow principals。

输入消费者账户的 ARN,格式为 arnawsltawsaccountidgtroot。 这将允许消费者账户中的任何用户或角色使用 PrivateLink。主体可以进一步限制为特定用户或角色。

在 Details for the Endpoint Service 下,复制服务名称并保存以备后用。

在下一步中,将接受消费者账户的端点连接。

此时,我们已经创建了一个 RDS DB 实例与 RDS Proxy,以及一个 VPC PrivateLink 端点服务。接下来,我们登录到消费者账户创建 VPC 端点,以使用在数据库账户中创建的 VPC 端点服务。

在消费者账户中创建 VPC 端点

完成以下步骤以在消费者账户中创建 VPC 端点:

登录到消费者账户。在 Amazon VPC 控制台中,选择导航窗格中的 Endpoints。选择 Create endpoint。在 Endpoint settings 中,提供一个名称。在 Service category 中,选择 Other endpoint services。输入从上一步复制的端点服务名称并验证服务。对于 VPC,选择至少有两个子网的 VPC。对于 Subnets,选择至少两个子网。对于 Security group,选择一个允许 TCP 访问 RDS 实例端口MySQL 默认是 3306的安全组。选择 Create endpoint。在数据库账户的 VPC 端点服务 Endpoint connections 标签中,选择新的端点连接请求。在 Actions 菜单中,选择 Accept endpoint connection request。输入接受以确认,然后选择 Accept。

几分钟后,状态将从 Pending 更改为 Available。

测试连接

现在可以测试连接了。使用客户端例如安装了 MySQL 客户端的 EC2 实例在消费者账户中,可以使用 VPC 端点 DNS 作为 RDS 实例或集群的主机。

以下屏幕截图显示了使用 PrivateLink 成功进行 MySQL 客户端连接测试的情况。

清理

完成后,如果您创建的资源不再需要,请删除 VPC 端点服务、网络负载均衡器和目标组,然后再删除 RDS Proxy 和 RDS 数据库实例,以防止产生额外费用。

结论

在本文中,我们展示了 American Family Insurance Group 如何成功实施一个高可用性解决方案,以共享存储在 RDS 数据库中的集中信息,跨不同的 AWS 账户和具有重叠 CIDR 范围的 VPC。通过将 RDS Proxy 与 PrivateLink 结合,他们能够获得对数据库的安全和私密访问,使来自不同组织的客户端能够利用记录系统中的信息用于客户应用和分析应用。

想了解有关 American Family Insurance Group 的更多信息,请访问 amfamcom 网站。在评论区留下您的反馈,以帮助进一步改善本文。

关于作者

Jarrid Kleinfelter 是 AWS 的高级解决方案架构师。

Charles Timmons 是 American Family Insurance Group 的云平台工程师。