elasticsearch,amazon-cloudfront,Http,Rest,Amazon Web Services,elasticsearch,Amazon Cloudfront" /> elasticsearch,amazon-cloudfront,Http,Rest,Amazon Web Services,elasticsearch,Amazon Cloudfront" />

Http 使用Cloudfront以只读方式公开ElasticSearch REST API(GET/HEAD)

Http 使用Cloudfront以只读方式公开ElasticSearch REST API(GET/HEAD),http,rest,amazon-web-services,elasticsearch,amazon-cloudfront,Http,Rest,Amazon Web Services,elasticsearch,Amazon Cloudfront,我想让我的客户直接与ElasticSearchRESTAPI对话,显然可以防止他们执行任何数据或配置更改 我查看了ElasticSearch REST界面,注意到了模式:非常安全(无害查询和集群状态) 所以我认为我可以使用Cloudfront作为CDN/代理,它只允许GET/HEAD方法(您可以在主配置中对其进行限制) 到目前为止一切都准备好了。但事情并不顺利,因为我需要向世界开放我的EC2安全组,以便从Cloudfront访问!我真的不想要这个 当我将EC2与RDS一起使用时,我可以简单地允许

我想让我的客户直接与ElasticSearchRESTAPI对话,显然可以防止他们执行任何数据或配置更改

我查看了ElasticSearch REST界面,注意到了模式:非常安全(无害查询和集群状态)

所以我认为我可以使用Cloudfront作为CDN/代理,它只允许GET/HEAD方法(您可以在主配置中对其进行限制)

到目前为止一切都准备好了。但事情并不顺利,因为我需要向世界开放我的EC2安全组,以便从Cloudfront访问!我真的不想要这个

当我将EC2与RDS一起使用时,我可以简单地允许访问RDS安全组中的EC2安全组。为什么我不能用CloudFront做这个?或者我可以吗

想法

编辑:它没有文档记录,但ES接受facets查询,该查询涉及一个(JSON)主体,不仅包含POST,还包含GET。这只是通过不忽略GET请求()的主体来打破HTTP建议(对于RFC3616)。 这是因为,正如所指出的,直接公开ES REST接口可能导致使用复杂查询的简单DOS攻击。我仍然相信,少一个代理仍然是值得的


编辑:我的另一个选择是跳过CloudFront并添加一个安全层作为ElasticSearch插件,如图所示

注意,即使GET请求在ElasticSearch中也可能有害。一个只会占用太多资源而无法计算的查询会导致集群崩溃。面是一种很好的方法


我建议您在ES前面编写一个简单的RESTAPI,这样您就可以更好地控制搜索集群中的内容。如果这不是一个选项,你可以考虑在你的ES盒上运行NGIX作为本地反向代理,这将给你与CyrdFrand一样的控制(以及更多的)。那么你只需要向世界开放Nginx,而不是ES。

我用自己的插件结束了编码。令人惊讶的是,周围没有这样的东西。 没有代理,没有码头,没有雄猫

只有一个原始的ES rest模块和我的RestFilter。使用最少的反射来获取请求的远程地址

享受:


在AWS中实现这一点的方法是:

  • 在ES群集前面设置应用程序负载平衡器。为ALB创建TLS证书并提供https。向ALB打开ES安全组

  • 设置CloudFront并使用ALB作为原点。传递带有秘密值的自定义标头(有关WAF,请参阅下一点)

  • 在ALB上设置WAF,以仅允许包含具有机密值的自定义标头的请求。现在所有请求都必须通过CloudFront

  • 建立一个Lambda@Edge在CloudFront发行版上的函数可以从GET请求中删除主体,也可以拒绝此类请求

这是相当多的工作,但与插件相比有一些优势,例如:

  • CloudFront提供免费的网络DDOS保护

  • 由于快速的CloudFront网络和全球PoP,CloudFront为您的用户提供了较低的ES延迟

  • 打开许多选项以使用CloudFront、WAF和Lamba@Edge以进一步保护您的ES群集


我正在CDK中编写示例代码来设置所有这些。准备好后会回来报告。

谢谢Victor,这正是我的B计划。Nginx或Varnish。我不愿意这样做,因为这会增加一个移动部件的技术堆栈。另一个移动部件始终是一个合理的关注点,但您确实需要一些您真正控制的东西来调解并对这些请求应用健全的规则。我会添加haproxy作为nginx或清漆的潜在替代品。。。它可以基于内容匹配进行拒绝,还可以进行一些简单的速率限制和并发限制。NGINX从v0.7.21开始就支持。这可能更多的是你已经知道哪个工具的问题。谢谢,伙计,我在官方ES文档中引用了这个插件,但是后来他们重新组织了,我再也找不到了。我应该提出一个拉取请求。@sscarduzio,仍然在那里,这就是我如何找到这个genius插件的!干得好!总共20分钟,我被设置好并运行:)呃,很高兴听到,pandaadb!顺便说一句,非常欢迎捐款!从文档到LDAP连接器、测试等等@sscarduzio,我很快就安装了它。我正试图让它运行与Kibana,但面临一些问题。我一定错过了什么。你介意看一下吗@sscarduzio你能看看我的问题吗好东西@Otto期待看到这个:)