是否可以使负载均衡器 (ELB) 仅由 SNS 访问?



我正在 AWS 中创建一个内部应用程序负载均衡器。我希望它只能通过SNS可用/访问,并阻止所有其他请求。

我尝试查找AWS使用的SNS IP(因此我只能将其列入白名单),但没有可靠的范围。

有什么办法可以做到这一点吗?

附言。 我正在使用云形成

您可以将HTTP 终端节点订阅到 Amazon SNS 主题。

您可以使用负载均衡器的 DNS 名称作为终端节点,以便将消息发送到负载均衡器。负载均衡器需要位于公有子网中,因为 Amazon SNS 位于互联网上。

您还需要通过 SNS 发送到终端节点的链接确认订阅。(请参阅使用 Amazon SNS 进行系统到系统消息收发,并将 HTTP/S 终端节点作为订阅者)

要"限制"向负载均衡器发送流量的能力,以便只有 Amazon SNS 可以发送请求,您可以在负载均衡器上配置安全组。但是,Amazon SNS列在 AWS IP 地址范围的ip-ranges.json文件中,因此您不知道允许哪些 IP 地址作为入站流量。

您可以进行一些实验,看看 SNS 似乎使用了哪些 IP 地址,然后分配更大的 CIDR 范围,但这并不能保证您将知道所有可能的 IP 地址。因此,您唯一的其他希望是不限制访问,而是冒着其他系统/人员将流量发送到负载均衡器的可能性。

替代设计

您可以重新设计应用程序以使用 Amazon SQS 队列,而不是通过负载均衡器将消息从 Amazon SNS 发送到您的应用程序(大概在 Amazon EC2 实例上运行):

  • 将 Amazon SQS 队列订阅到 Amazon SNS 主题
  • 让您的应用程序轮询 SQS 队列中的消息(而不是等待通过 HTTP 和负载均衡器接收消息)

最新更新