Amazon RDS Aurora master/replica 访问限制
Amazon RDS Aurora master/replica access restrictions
我是 运行 一个数据库集群,在 Amazon RDS Aurora 上有两个实例。一个实例是 master,另一个实例是只读 replica。副本的目的是允许第三方应用程序访问数据库的某些表以进行报告。因此,报告工具访问只读集群端点,它工作得很好。 AWS为了实现零停机维护,随时将"replica"升级为"master"。这非常酷并且不会影响报告工具,因为它访问 cluster-ro 端点,它始终将流量路由到正确的(只读)副本。
但是,这意味着我必须在两个实例上启用 "Publicly accessible: Yes" 标志,以便报告工具(位于 VPC 外部)可以访问所有实例,因为我无法预测哪个实例成为主人或副本,对吗?
我希望 "master" 实例(无论是什么实例)只能从 VPC 内部访问。我怎样才能做到这一点?
我的理解是,我对 "master" 实例所做的每项更改都会自动在副本上完成,例如包括 adding/removing 安全组。因此,如果我打开防火墙以允许访问报告工具的副本,则相同的 IP 地址也可以访问正常的集群端点和实例(不仅是 cluster-ro 端点)。我怎样才能防止这种情况发生?
不幸的是,您需要为此定制一些东西。从设计角度考虑的几个选项如下:
Aurora 集群在所有实例之间共享安全组设置,就像您所说的那样。如果您想要自定义设置,那么您可以考虑只制作整个集群 VPC,然后使用 ALB 或 EC2 代理将请求转发到您的数据库实例。然后,您可以拥有多个 "proxies" 并为每个关联单独的安全组。
这种架构的一大亮点是您需要确保干净利落地处理故障转移。您的代理应该始终与集群端点通信,而不是与实例端点通信,因为实例可以在幕后从 READER 更改为 WRITER。例如,ALB 不允许您创建将请求转发到 DNS 的侦听器,它们仅适用于 IP。这意味着您将需要额外的基础设施来监控读取器和写入器的 IP 并保持 ALB 更新。
EC2 代理绝对是此类设计的更好选择,但需要注意的是会增加成本。如果您对此设置有具体问题,我可以详细介绍。这绝对是方法的总结,还没有准备好。
同理,为什么不能改用读取受限的数据库用户并保留集群 public(当然要启用 ssl)?
我是 运行 一个数据库集群,在 Amazon RDS Aurora 上有两个实例。一个实例是 master,另一个实例是只读 replica。副本的目的是允许第三方应用程序访问数据库的某些表以进行报告。因此,报告工具访问只读集群端点,它工作得很好。 AWS为了实现零停机维护,随时将"replica"升级为"master"。这非常酷并且不会影响报告工具,因为它访问 cluster-ro 端点,它始终将流量路由到正确的(只读)副本。
但是,这意味着我必须在两个实例上启用 "Publicly accessible: Yes" 标志,以便报告工具(位于 VPC 外部)可以访问所有实例,因为我无法预测哪个实例成为主人或副本,对吗?
我希望 "master" 实例(无论是什么实例)只能从 VPC 内部访问。我怎样才能做到这一点?
我的理解是,我对 "master" 实例所做的每项更改都会自动在副本上完成,例如包括 adding/removing 安全组。因此,如果我打开防火墙以允许访问报告工具的副本,则相同的 IP 地址也可以访问正常的集群端点和实例(不仅是 cluster-ro 端点)。我怎样才能防止这种情况发生?
不幸的是,您需要为此定制一些东西。从设计角度考虑的几个选项如下:
Aurora 集群在所有实例之间共享安全组设置,就像您所说的那样。如果您想要自定义设置,那么您可以考虑只制作整个集群 VPC,然后使用 ALB 或 EC2 代理将请求转发到您的数据库实例。然后,您可以拥有多个 "proxies" 并为每个关联单独的安全组。
这种架构的一大亮点是您需要确保干净利落地处理故障转移。您的代理应该始终与集群端点通信,而不是与实例端点通信,因为实例可以在幕后从 READER 更改为 WRITER。例如,ALB 不允许您创建将请求转发到 DNS 的侦听器,它们仅适用于 IP。这意味着您将需要额外的基础设施来监控读取器和写入器的 IP 并保持 ALB 更新。
EC2 代理绝对是此类设计的更好选择,但需要注意的是会增加成本。如果您对此设置有具体问题,我可以详细介绍。这绝对是方法的总结,还没有准备好。
同理,为什么不能改用读取受限的数据库用户并保留集群 public(当然要启用 ssl)?