Elasticsearch中的身份验证


Answers:


63

不再积极支持此答案中提到的插件。


elasticsearch中没有内置的访问控制。因此,您需要设置一个反向代理(这是一个博客文章,介绍如何设置nginx),使用第三方的Elasticsearch插件之一,例如https://github.com/Asquera/elasticsearch-http-basic或使用官方安全插件Shield


非常感谢您的提示。有任何关于Elasticsearch-http-basic的经验吗?是好是坏?
罗伯特·雷兹

诸如nginx之类的反向代理将为您提供更多安全选项,包括SSL支持。
Andrew

4
这也是ElasticSearch的厨师食谱,它提供了一种使用Nginx通过反向代理安装ElasticSearch的简便方法。github.com/elasticsearch/cookbook-elasticsearch
Tom Rogers

6.8.07.1.0版本开始,某些安全功能是免费的。阅读更多:elastic.co/blog/security-for-elasticsearch-is-free
Aaron_ab

11

<shamelessPlug>

抱歉,我对所有这些仅尝试使用HTTP级别的正则表达式捕获查询的插件和代理感到严重怀疑。

您是否会正则表达式执行写操作的所有可能的ES语法?您如何按索引过滤?索引别名如何?多索引查询?

进行访问控制的唯一干净方法是在ElasticSearch解析查询之后。毕竟,这正是Shield所做的!

我写了一个MIT许可的插件(readonly-rest-plugin)来做到这一点。

您可以通过以下方式匹配请求:

  • ✔️主机名,IP和带网络掩码的IP

  • ✔️索引(支持通配符)和索引别名已解决

  • ✔️HTTP基本身份验证

它还具有对Kibana身份验证的一流支持:)

</shamelessPlug>



6

更新:这项工作效果很好,并且(对于大多数功能)是免费和开源的:https : //github.com/floragunncom/search-guard

注意:本文中提到的插件不再被维护


也许这会有所帮助:https : //github.com/salyh/elasticsearch-security-plugin

该插件通过单独的模块为Elasticsearch添加了http / rest安全功能。代替Netty,使用嵌入式Tomcat 7处理http / rest请求。

当前,用于基于用户的身份验证和授权通过第三方库waffle(仅在Windows服务器上)支持Kerberos和NTLM。对于UNIX服务器,通过第三方库tomcatspnegoad支持Kerberos(适用于任何kerberos实现。对于授权,支持Active Directory和通用LDAP)。

您也可以在没有Kerberos / NTLM的情况下使用此插件,但是只有基于主机的身份验证才可用。





3

我是ElasticSearch的新手,但我觉得X-Pack插件应在此处显示为答案:https ://www.elastic.co/guide/zh-cn/x-pack/current/index.html

据我了解,X-Pack现在已成为确保ElasticSearch(以及更多)(包括身份验证)安全的事实上的标准。


1
X-Pack许可证每个节点的费用为数千美元。Elastic Cloud包含X-Pack,而且价格便宜。另一个选择是第三方插件。
Marek Toman

2

关于此问题的特定解决方案,我遇到了以下内容,它是反向代理方法的简单实现,如其他答案中所述:

https://gist.github.com/jpluscplusm/9227777

需要警告的是,至少在Elasticsearch上似乎有些人不认为nginx是最佳解决方案,但是我认为这取决于身份验证要求的具体情况(RBAC,用户数,索引数,访问列表修改的频率) )。对于某些用户(包括我自己),第一个示例就足够了。

http://www.elasticsearch.org/blog/restricting-users-kibana-filtered-aliases/

如果您发现nginx满足了您的特定要求,那么类似的方法可能会起作用:https : //github.com/lukas-vlcek/node.es


2

由于ElasticSearch是一种数据库服务,因此您可能不希望它公开公开。

我不相信插件能为我做到这一点,所以我使用了nginx代理。

本教程非常有帮助:

http://www.minvolai.com/blog/2014/08/Setting-up-a-Secure-Single-Node-Elasticsearch-server-behind-Nginx/Setting-up-a-Secure-Single-Node-Elasticsearch-服务器后台Nginx /


2
我知道您不信任他们,但是如果您无法访问内部ElasticSearch解析器,则无法确定是否进行真正的索引隔离:)这就是为什么我这样写:github.com/sscarduzio/
elasticsearch

2

6.8Elastic版开始,一些安全功能变为免费(请阅读:https : //www.elastic.co/blog/security-for-elasticsearch-is-now-free

基本身份验证的一些基本步骤

  1. 要设置的最基本的配置参数是: "xpack.security.enabled=true"

例如,如果您正在使用docker-compose.yml文件,则在下面添加行environment

elasticsearch:
    image: elastic:6.8.0
    environment:
      - "xpack.security.enabled=true"
  1. 接下来,您必须指定默认用户(称为“弹性”)应接受elasic哪个密码进行身份验证。您可以使用ELASTIC_PASSWORD环境变量来执行此操作。在我们的示例中:

elasticsearch:
    image: elastic:6.8.0
    environment:
      - "xpack.security.enabled=true"
      - "ELASTIC_PASSWORD=123456"

现在,您可以开始了。当您进行弹性运动时:

docker run --rm --name elastic -p 9200:9200 -v ELASTIC_PASSWORD=123456 -v xpack.security.enabled=true elastic:6.8.0

并执行:curl localhost:9200,您会得到一个错误:

{“错误”:{“ root_cause”:[{“类型”:“ security_exception”,“原因”:“缺少REST请求的认证令牌[/]”,“标头”:{“ WWW-Authenticate”:“基本领域= \“ security \” charset = \“ UTF-8 \”“}}],” type“:” security_exception“,” reason“:”缺少REST请求[/]的身份验证令牌“,” header“:{” WWW-Authenticate“:”基本领域= \“安全\”字符集= \“ UTF-8 \”“}},”状态“:401}

正是您想要的(没有用户名和密码,因此不允许访问)

请记住非常重要的一点

  1. Elastic启动时,它预制件Bootstrap checkshttps://www.elastic.co/guide/en/elasticsearch/reference/6.8/bootstrap-checks.html)。

  2. 执行这些检查时Elastic“开发”“生产”模式之间有所不同。

  3. 如果elasticproduction模式运行,则这些配置是不够的(引导检查将失败,并且数据库将无法工作)。您还必须在节点之间添加ssl加密配置。了解更多:https//www.elastic.co/guide/en/elasticsearch/reference/6.8/security-settings.html

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.