Elasticsearch 的认证

我如何定义 Elasticsearch 的安全访问? 我有 Elasticsearch-head 插件,但是你的访问不需要任何安全性。

64857 次浏览

这个答案中提到的插件不再被积极支持。


There is no built-in access control in elasticsearch. So, you would need to setup a reverse proxy (here is a 博客文章 how to setup nginx), use one of the 3rd party elasticsearch plugins such as https://github.com/Asquera/elasticsearch-http-basic or use the official security plugin 盾牌.

更新 : 这个工作非常好,(对于大多数功能)是免费和开源的: < a href = “ https://github.com/floragunncom/search-Guard”rel = “ nofollow noReferrer”> https://github.com/floragunncom/search-guard

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


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

这个插件将 http/rest 安全功能以独立模块的形式添加到 Elasticsearch。嵌入式 Tomcat 7用于处理 http/rest 请求,而不是 Netty。

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

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

如果您想使用 Kibana3的基本身份验证,以下是我的解决方案:

Https://github.com/fangli/kibana-authentication-proxy

不仅支持 basicAuth ES 后端,还支持 GoogleOAuth 和客户端的 BasicAuth。如果你觉得可以,请给我一颗星,谢谢。

关于这个问题的具体解决方案,我遇到了以下问题,这是一个反向代理方法的简单实现,正如其他答案中提到的:

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

As a caveat, it seems at least some at Elasticsearch proper don't consider nginx to be the optimal solution, but I think that depends on the specifics of your authentication requirements (RBAC, user count, number of indexes, frequency of access list modifications). For some users (including myself) the first example is sufficient.

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

如果您发现 nginx 不能满足您的需求细节,那么可以使用以下方法: https://github.com/lukas-vlcek/node.es

试试 盾牌。它有认证和授权。现在它需要一个许可证。用不了多久,人们就会创建类似的开源插件。

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

I don't trust plugins to do that for me, so I did with a nginx proxy.

这个教程非常有帮助:

Http://www.minvolai.com/blog/2014/08/setting-up-a-secure-single-node-elasticsearch-server-behind-nginx/setting-up-a-secure-single-node-elasticsearch-server-behind-nginx/

<shamelessPlug>

对不起,但我对所有这些插件和代理有严重的怀疑,这些插件和代理只是试图在 HTTP 级别用邋遢的正则表达式捕获查询。

你会正则化所有可能执行写的 ES 语法吗?如何根据索引进行过滤?索引化名呢?多索引查询?

完成访问控制的唯一干净的方法是 AFTERElasticSearch 解析查询,这正是神盾局所做的!

我写了一个 MIT 许可的插件(Readonly-rest-plugin) ,正是这样做的。

你可透过以下途径提出要求:

  • Something 主机名称,IP 和 IP 与网络掩码

  • Something 解析索引(支持通配符)和索引别名

  • Something HTTP 基本认证

它还支持 Kibana 身份验证:)

</shamelessPlug>

我是 ElasticSearch 的新手,但我觉得 X-Pack 插件应该出现在这里作为一个答案: Https://www.elastic.co/guide/en/x-pack/current/index.html

据我所知,X-Pack 现在是保护 ElasticSearch (以及更多)的实际标准,包括身份验证。

在 Elasticsearch 启用安全性的唯一更好的方法是通过插件 x-Pack。

Https://www.elastic.co/guide/en/x-pack/current/xpack-introduction.html

这是一个多用途的插件,非常适合用于安全目的,因为您还可以根据需要使用监视和配置警报和通知。

因为它已经被高度认可,我确信 Elasticsearch 将继续这个登录。

Elastic版本 6.8开始,一些安全特性变得免费(阅读: 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. 接下来,您必须指定默认用户(称为“橡皮”)应该接受哪个 密码来进行身份验证。你用的是 ABc1环境变量。在我们的例子中:

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

And do: curl localhost:9200, You'll get an error:

{“ error”: {“ root _ cause”: [{“ type”: “ security _ eption”,“ reason”: “ miss entication token for REST request [/]”,“ header”: {“ WWW-Authenticate”: “ Basic domain = “ security”charset = “ UTF-8”}}}] ,“ type”: “ security _ eption”,“ reason”: “ miss entication token for REST request [/]”,“ header”: {“ WWW-Authenticate”: “ Basic domain = “ security”charset = “ UTF-8”}} ,“ status”: 401}

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

记住非常重要的一点 :

  1. Elastic启动时,它预先形成 Bootstrap checks(https://www.elastic.co/guide/en/elasticsearch/reference/6.8/bootstrap-checks.html)。

  2. 在进行这些检查时,“发展”"production"模式的 Elastic有所不同。

  3. 如果 elasticproduction模式下运行,那么这些配置 还不够(Bootstrap 检查将失败,数据库将无法工作)。还必须在节点之间添加 ssl 加密配置。阅读更多: https://www.elastic.co/guide/en/elasticsearch/reference/6.8/security-settings.html