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

Is it possible to make a Load balancer (ELB) only be accessed by SNS?

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

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

有什么办法吗?

PS。 我正在使用 cloudformation

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

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

您还需要通过 SNS 发送到端点的 link确认订阅。 (参见 Using Amazon SNS for System-to-System Messaging with an HTTP/S Endpoint as a Subscriber

要"limit"能够将流量发送到负载均衡器以便只有 Amazon SNS 可以发送请求,您可以在负载均衡器上配置一个安全组。但是,Amazon SNS 列在 AWS IP Address Rangesip-ranges.json 文件中,因此您不知道允许哪些 IP 地址作为入站流量。

您可以稍微试验一下,看看 SNS 似乎使用了哪些 IP 地址,然后分配更大的 CIDR 范围,但这并不能保证您会知道所有可能的 IP 地址。因此,您唯一的希望是 限制访问,但要冒其他 system/person 向负载均衡器发送流量的风险。

替代设计

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

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