使用Elasticsearch进行AJAX通信的流量和访问控制解决方案?

Asc*_*iom 5 php ajax amazon-web-services elasticsearch

情况:

对于网上商店,我想使用Elasticsearch构建分页产品列表 - 以及这些列表上的过滤器.我想绕过完全运行应用程序的PHP/MySQL服务器,并通过AJAX调用直接从客户的浏览器与Elasticsearch进行通信.优点是:

  • PHP/MySQL服务器上的大部分负载将由ES集群处理
  • CDN机会(缩放!)

问题:

这种方法会对我们的后端服务器造成巨大负担,但会产生一些新问题.匿名用户将生成大量请求,但我们需要对这些请求进行一些控制:

交通管制:

  • 如何通过这种方式防范恶意用户拨打大量电话和扫描/下载我们的整个产品目录?(例如竞争刮价定价信息)
  • 如何阻止已经识别(以某种方式)表现不佳的IP?

访问控制:

  • 如何确保前端只能进行我们想要的查询?
  • 如何确保客户只看到结果字段的选择,并且无法从ES获取任何不适合他们的数据?

重要的是不要让一台机器在某个地方处理所有这些原因,这只会重新创建一台负责处理所有事情的机器.我想要真正利用ES集群,而不需要任何必须处理扩展问题的中间件.

我们不希望完全依赖第三方,我们正在寻找一种对我们正在合作的合作伙伴具有一定灵活性的解决方案(例如,在弹性和AWS之间切换).

可能的解决方案或部分解

我一直在寻找一些"Elasticsearch即服务"选项,但我对它们的质量没有信心,或者即使我能解决他们提到的问题:

  • www.elastic.co/found,他们的高级解决方案有一个'屏蔽'服务,似乎并不涵盖上面提到的所有情况(据我所知只有IP阻止),但有一个自定义插件(https: //github.com/floragunncom/search-guard)可以对结果字段进行过滤并提供一种方法来进行用户管理等.这似乎是一个合理的选择,但它很昂贵,并且将应用程序与"找到的"产品联系起来.我们应该能够在需要时切换合作伙伴.
  • Amazon AWS Elasticsearch服务具有基本的IAM支持,可以将CloudFront放在其前面,但不提供任何访问控制.
  • 安装单独的L7应用程序过滤解决方案,用于检测刮刀等

题:

有没有人有这种方法工作,并找到了解决所有这些问题的良好设置?

Chr*_*urd 0

我建议的第一件事是限制从安全组后面对 Elastic Search 实例的访问,并且仅允许应用程序服务器 IP 地址访问端口 22、80、9200 和 9300(ElasticSearch 使用的端口)。

至于防止报废,没有绝对的保护解决方案,但是如果您的目标只是限制这些报废程序对您的应用程序服务器和 ES 实例施加的负载,您可以查看https://github.com/davedevelopment/stiphle,其中针对速率受限的用户,他们在页面上使用的示例限制为每秒 5 个请求,这对于普通用户来说似乎非常合理,并且如果需要的话可以进一步降低,以使报废成为一项耗时的工作。