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

标签 http rest amazon-web-services elasticsearch amazon-cloudfront

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

我查看了 ElasticSearch REST 界面,发现了以下模式:HTTP GET requests非常安全(无害查询和集群状态)。

所以我想我可以使用 Cloudfront 作为 CDN/代理,它只允许 GET/HEAD 方法(你可以在主配置中强加这样的限制)。

到目前为止一切顺利,一切就绪。但是事情不起作用,因为我需要向全世界开放我的 EC2 安全组才能从 Cloudfront 访问!我不想要这个,真的!

当我将 EC2 与 RDS 结合使用时,我可以简单地允许访问 RDS 安全组中的 EC2 安全组。为什么我不能使用 CloudFront 执行此操作?或者我可以吗?

想法?

编辑:没有记录,但是ES接受facets查询,它涉及一个(JSON)主体,不仅有POST,还有GET。这通过不忽略 GET 请求 ( source ) 的正文来简单地破坏 HTTP 推荐(对于 RFC3616)。 这是因为,正如所指出的,直接暴露 ES REST 接口(interface)可能导致使用复杂查询的简单 DOS 攻击。不过,我仍然坚信,少一个代理仍然是值得的。

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

最佳答案

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

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

享受:

https://github.com/sscarduzio/elasticsearch-readonlyrest-plugin

关于http - 使用 Cloudfront 以只读方式公开 ElasticSearch REST API (GET/HEAD),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20406707/

相关文章:

java - 使用 Java 发送 HTTP 请求 GET/POST 以形成表单?

node.js - 如何在 Mongoose 多对多关系中建模和保存?

amazon-web-services - CloudFormation 和私有(private)子网

apache - htaccess 将所有流量从 http 重定向到 https,但也重定向到在 https 上隐藏一次的 index.php

http - ECS不会启动实例, "unable to place a task because the resources could not be found."

mongodb - meteor restivus 端点配置

java - 从服务响应中获取不需要的字符

java - 如何将 REST 参数映射到复杂对象?

java - Jackson JsonNode 序列化

amazon-web-services - AWS Amplify 身份验证错误