【发布时间】:2016-12-11 12:43:35
【问题描述】:
我想从 SNS 向托管在 Node.js 服务器上的公共 API 端点发送 HTTP 请求。但是,我想将该 API 配置为仅接受来自该 SNS 主题的 POST 请求,不接受其他请求。我可以在 SNS 消息中插入一个令牌,但我不控制 SNS 消息。它来自 SES,以防退回电子邮件。是否可以查看请求的域,并且仅在来自受信任域(在本例中为 AWS)时才允许?
【问题讨论】:
-
您可以查看给定 HTTP 请求来自哪个 IP 地址。如果您可以建立一个 IP 地址范围来代表来自 SNS 的请求的可能地址,那么您可以根据该范围进行过滤。
-
传入请求不会告诉您它来自哪个域。您可以对 IP 地址进行反向查找,以尝试确定谁拥有该 IP 地址。
-
感谢您的建议,但我想我可能需要比这更具体的东西。因为任何人都可以通过从 AWS EC2 服务器发送 curl 请求来利用这一点。我应该看看如何限制它只能从 SNS 服务访问。因为只有在 HTTP 端点订阅了主题时才能发送 SNS 通知
-
现在我在想,我可以采取另一种方法,即 SNS 将消息发送到 SQS 队列,然后我可以更改 API 以定期从 SQS 读取。我不需要它是实时的,所以这种方法应该可以工作
-
实际上,您可以过滤掉来自 EC2 实例的请求。采用 JSON 格式的官方 AWS IP 范围,它包括 EC2 IP 范围:ip-ranges.amazonaws.com/ip-ranges.json
标签: node.js amazon-web-services