使用 Amazon RDS Proxy 连接外部应用程序到 Amazon RDS 实例
关键要点
Amazon RDS Proxy 是一种完全托管的数据库代理,能提高应用程序的可扩展性和安全性。本文介绍如何通过 RDS Proxy 安全高效地连接外部应用程序到 RDS 实例或 Amazon Aurora 集群。解决方案包括使用 AWS Secrets Manager、网络负载均衡器、TLS/SSL 证书和 Amazon VPC 设置。Amazon RDS Proxy 是针对 Amazon RDS 关系数据库服务的完全托管、高可用性数据库代理,可以使应用程序更具可扩展性、提升对数据库故障的韧性并增强安全性。通过 RDS Proxy,您可以处理不可预测的数据库流量高峰,这些高峰可能会因连接超额订阅或迅速创建新连接而导致问题。
安全最佳实践 建议将数据库和代理放置在没有互联网入站访问的私有网络中。然而,SaaS 提供商和第三方集成通常依赖于通过互联网进行的安全通信。
在本文中,我们将展示如何使用 AWS Secrets Manager、RDS Proxy、网络负载均衡器、TLS/SSL 证书 和 Amazon 虚拟私有云 Amazon VPC等安全且高效地连接外部应用程序到单个 RDS 实例 或 Amazon Aurora 集群;配置 安全组 和 网络访问控制列表ACL;可选使用 AWS Shield 防止 DDoS 攻击。
解决方案概述
我们的解决方案包括一个配置为多可用区 (MultiAZ) 的 RDS 实例和一个位于私有子网中的可选只读副本。该实例的连接通过位于与数据库实例相同子网中的 RDS Proxy 管理。为了通过互联网访问 RDS Proxy,我们使用位于公共子网的网络负载均衡器提供连接到数据库的 URL 端点。为确保解决方案的安全,我们使用网络访问控制列表来限制 VPC 的进出访问,并使用安全组作为 RDS Proxy 和 RDS 实例的防火墙。可选地,Shield 可用于防止 DDoS 攻击。还建议使用 SSL/TLS 连接,通过加密客户端与数据库实例之间传输的数据,提供额外的安全层。
以下图表展示了解决方案架构。
该解决方案通过互联网开放了 RDS Proxy 的连接;为了安全起见,我们建议在隔离的 VPC 或沙盒环境上进行测试,以避免意外暴露。
前提条件
此示例解决方案要求您具备一组网络资源,如下所示:
VPC数据库安全组跳板机Bastion Host 和 pgAdmin 管理工具RDS 或 Amazon Aurora PostgreSQL 实例pgAdmin 或您选择的桌面工具在满足所有前提条件后,您就可以配置 RDS Proxy 以进行外部访问。
创建具有相应权限的数据库用户
请按照以下步骤创建一个新的数据库用户:
连接到您的跳板机Bastion Host。使用 pgAdmin 或您选择的工具连接到数据库。从 pgAdmin 打开一个新的查询窗口,使用查询工具或您选择的工具。使用以下代码创建一个读/写数据库用户并授予该用户在数据库内的有限权限:sqlCREATE ROLE rdsproxyrwuser WITH LOGINNOSUPERUSERINHERITNOCREATEDBNOCREATEROLENOREPLICATIONPASSWORD xxxxxx
GRANT pgreadalldata pgwritealldata TO rdsproxyrwuser
创建 Secrets Manager 密钥
RDS Proxy 使用密钥来验证并连接数据库。请完成以下步骤以创建新的密钥:
在 Secrets Manager 控制台中,从导航窗格中选择 Secrets。选择 Store a new secret。在 Secret Type 中,选择 Credentials for Amazon RDS database。在 Username 中,输入 rdsproxyrwuser您的数据库用户。在 Password 中,输入 rdsproxyrwuser 的密码。在 Encryption key 中,选择 aws/secretsmanager。在 Database 中,选择 postgresql02您的数据库实例。选择 Next。 在 Secret name 中,输入 rdsproxyrwuser。在 Description 中,输入可选的描述信息。选择 Next。 Rotation schedule,指定一个调度可选。选择 Next。审阅您的选项并选择 Store。创建代理
要 创建代理,请完成以下步骤:
vn加速器试用一小时在 Amazon RDS 控制台中,选择导航窗格中的 Proxies。选择 Create proxy。在 Engine family 中,选择 PostgreSQL。在 Proxy identifier 中,输入 rdsproxypostgresql02。将 Idle client connection timeout 设置为 30 分钟。在 Target group configuration 中,选择 postgresql02。在 Authentication 部分,指定以下内容:在 Identity and access manager (IAM) role 中,选择 Create IAM role。在 Secret Manager secrets 中,选择 rdsproxyrwuser。在 Client authentication type 中,选择 SCRAM SHA 256。在 IAM authentication 中,选择 Not Allowed。在 Connectivity 部分,指定以下内容:可选选择 Require Transport Layer Security (TLS)。在 Subnets 中,选择与数据库子网组相同的子网。在 Additional connectivity configuration 中,指定以下内容:在 VPC 中,选择您的 VPC。在 Existing VPC security groups 中,选择 databasesecuritygroup。选择 Create proxy。您还需要获取您的 RDS Proxy IP 地址。
转到您的 EC2 跳板机。打开终端或命令行,对您的 RDS Proxy 执行 nslookup例如,nslookup rdsproxypostgresql02proxyxxxxxxxxxxxxuseast1rdsamazonawscom。保存 IP 地址以备后用。创建网络负载均衡器
要 创建网络负载均衡器,请完成以下步骤:
在 Amazon EC2 控制台中,从导航窗格选择 Target groups。选择 Create target group。在 Basic configuration 中,指定以下内容:在 Target type 中,选择 IP addresses。在 Target group name 中,输入 rdsproxypostgresql01tg。在 Protocol 中,选择 TCP。在 Port 中,输入 5432。在 IP address type 中,选择 IPv4。 在 VPC 中,选择您的 VPC。在 Health check protocol 中,选择 TCP。选择 Next。 在 Register targets 页面,选择您目标 VPC 的 Choose a network。指定 IP 地址并定义端口对每个 RDS Proxy IP 重复此操作:在 IPV4 addresses 中,输入您的 RDS Proxy IP 地址。在 Port 中,输入 5432。选择 Include as pending below。在 Review targets 页面,选择 All 作为 Targets。选择 Create target group。在 Add listener 中,指定以下内容:在 Protocol 中,选择 TCP。在 Port 中,输入 5432。在 Default action 中,选择 rdsproxypostgresql01tg。选择 Add。在 Network mapping 选项卡中记下负载均衡器的 CIDR 范围。这将在下一步中使用。更新您的网络 ACL
完成以下步骤以更新您的网络 ACL:
在 Amazon VPC 控制台中,选择导航窗格中的 Network ACLs。在 Network ACL 中,选择 ltltNetwork ACL of your VPCgtgt。在 Inbound rules 选项卡中,选择 Edit inbound rules,然后 Add rule。添加以下规则:入站规则 1:在 Type 中,选择 All Traffic。在 Source 中,输入您的公共 IP例如,99555/32。入站规则 2:在 Type 中,选择 All Traffic。在 Source 中,输入需要访问 RDS Proxy 的子网组的内部 IPv4 CIDR 范围例如,10000/16。入站规则 3如未使用 Amazon Route 53:在 Type 中,选择 HTTP (80)。在 Source 中,输入 0000/0。入站规则 4如未使用 Route 53:在 Type 中,选择 HTTPS (443)。在 Source 中,输入 0000/0。
更新安全组
完成以下步骤以更新您的安全组:
在 Amazon VPC 控制台中,选择导航窗格中的 Security groups。选择安全组 databasesecuritygroup。在 Inbound rules 选项卡中,选择 Edit inbound rules,然后 Add rule。添加以下规则:入站规则 1:在 Type 中,选择 PostgreSQL。在 Source 中,选择您的数据库安全组sgxxxxxxxxx。入站规则 2:在 Type 中,选择 PostgreSQL。在 Source 中,输入网络负载均衡器的 IP 范围例如,10000/20。在 Description 中,输入 Internal IP AZ1 Network Load Balancer。入站规则 3:在 Type 中,选择 PostgreSQL。在 Source 中,输入网络负载均衡器的 IP 范围例如,100160/20。在 Description 中,输入 Internal IP AZ2 Network Load Balancer。根据需要继续添加入站规则以适应您的 IP 地址。测试连接性
从已授权的桌面在网络 ACL 上的允许 IP 范围启动 pgAdmin或您选择的工具,打开一个新的查询。使用网络负载均衡器端点作为主机名,连接到 RDS 实例,并使用为 RDS Proxy 配置的数据库用户和密码。
要加密连接,请遵循 使用 SSL/TLS 加密到数据库实例的连接。
注意:在此解决方案中,使用 SSL 模式:全方位验证或需要主机名验证将导致验证失败。
清理
为了避免将来产生费用,请删除您在本文章中创建的任何资源,例如:
VPC数据库安全组数据库子网组跳板机Bastion HostRDS for PostgreSQL 或 Aurora PostgreSQL 实例RDS Proxy网络负载均衡器pgAdmin 或用于查询数据库的其他工具结论
本文展示了如何通过 RDS Proxy 安全且高效地将外部应用程序连接到单个 RDS 实例。
经历数百或数千个互联网路由并发连接的工作负载可以受益于这样的架构。这一解决方案能够帮助您承受季节性高峰和不可预测的工作负载增加。
要了解更多关于何时或在哪里使用 RDS Proxy 的信息,请查阅 策划使用 RDS Proxy。
作者介绍
Jose A Ramirez 是 AWS 的数据库专家解决方案架构师。他在技术行业作为 DBA 和系统管理员拥有超过 25 年的经验。Jose 现在专注于为希望将应用程序和数据库现代化的客户架构解决方案。
John Scott 是一名数据库专家解决方案架构师,工作地点在亚特兰大。他在各类公司的 Linux 管理和 DBA 方面有多年的经验。John 喜欢的事物包括家庭、烧烤和 Amazon Aurora。
![Archana Sharma](https//d2908q01vomqb2cloudfrontnet/887309d048beef83ad3eabf2a79a64a389ab
CISA漏洞目录中新增加的缺陷略有下降 媒体
网络安全漏洞更新:2024年CISA最新数据分析关键要点2024年,CISA的新报告显示,给定的网络安全漏洞总数达185个,尽管2023年的统计为187个。自该漏洞目录成立以来,CISA已经记录了总共...
在 Amazon S3 目录存储桶中使用 S3 批量操作和 AWS Lambda 自动处理对象 存储
自动化处理 Amazon S3 目录存储桶中的对象通过 S3 批量操作和 AWS Lambda作者:Cheryl Joseph Aaron Langford Murali Sankar 发布日期:20...