首页 > 解决方案 > Amazon RDS Aurora 主/副本访问限制

问题描述

我在Amazon RDS Aurora上运行一个带有两个实例的数据库集群。一个实例是实例,另一个实例是只读副本。副本的目的是允许第三方应用程序访问数据库的某些表以进行报告。因此,报告工具访问只读集群端点,它工作得非常好。为了实现零停机维护,AWS 随时将“副本”提升为“主”。这很酷,并且不会影响报告工具,因为它访问 cluster-ro 端点,该端点总是将流量路由到正确的(只读)副本。

但是,这意味着我必须在两个实例上启用“可公开访问:是”标志,以便报告工具(位于 VPC 外部)可以访问所有实例,因为我无法预测哪个实例成为主实例或复制品,对吗?

我更喜欢“主”实例(无论是什么实例)只能从 VPC 内部访问。我怎样才能做到这一点?

我的理解是,我在“主”实例上所做的每一项更改都是在副本上自动完成的,例如添加/删除安全组。因此,如果我打开防火墙以允许访问报告工具的副本,相同的 IP 地址也可以访问正常的集群端点和实例(不仅是 cluster-ro 端点)。我怎样才能防止这种情况?

标签: amazon-web-servicessecurityamazon-rdsamazon-aurora

解决方案


不幸的是,您将需要为此构建一些自定义的东西。从设计角度考虑的几个选项如下:

Aurora 集群在所有实例中共享安全组设置,就像您所说的那样。如果您想拥有自定义设置,那么您可以考虑只创建整个集群 VPC,然后让 ALB 或 EC2 代理将请求转发到您的数据库实例。然后,您可以拥有多个这样的“代理”并为每个代理关联单独的安全组。

这种架构的一个重要提示是您需要确保干净地处理故障转移。您的代理应始终与集群端点通信,而不是与实例端点通信,因为实例可以在幕后从 READER 更改为 WRITER。例如,ALB 不允许您创建将请求转发到 DNS 的侦听器,它们仅适用于 IP。这意味着您将需要额外的基础架构来监控读取器和写入器的 IP 并保持 ALB 更新。

EC2 代理绝对是这种设计的更好选择,但需要注意的是会增加成本。如果您对此设置有具体问题,我可以详细介绍。这绝对是该方法的总结,并没有准备好。

同样,为什么您不能使用读取受限的数据库用户并保持集群公开(当然启用了 ssl)?


推荐阅读