如何在Elasticsearch中定义安全性访问?我有elasticsearch-head插件,但您的访问不需要任何安全性。
Answers:
不再积极支持此答案中提到的插件。
elasticsearch中没有内置的访问控制。因此,您需要设置一个反向代理(这是一个博客文章,介绍如何设置nginx),使用第三方的Elasticsearch插件之一,例如https://github.com/Asquera/elasticsearch-http-basic或使用官方安全插件Shield。
<shamelessPlug>
抱歉,我对所有这些仅尝试使用HTTP级别的正则表达式捕获查询的插件和代理感到严重怀疑。
您是否会正则表达式执行写操作的所有可能的ES语法?您如何按索引过滤?索引别名如何?多索引查询?
进行访问控制的唯一干净方法是在ElasticSearch解析查询之后。毕竟,这正是Shield所做的!
我写了一个MIT许可的插件(readonly-rest-plugin)来做到这一点。
您可以通过以下方式匹配请求:
✔️主机名,IP和带网络掩码的IP
✔️索引(支持通配符)和索引别名已解决
✔️HTTP基本身份验证
它还具有对Kibana身份验证的一流支持:)
</shamelessPlug>
Elasticsearch现在具有安全性插件http://www.elasticsearch.org/blog/shield-know-security-coming-soon/
更新:这项工作效果很好,并且(对于大多数功能)是免费和开源的: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的情况下使用此插件,但是只有基于主机的身份验证才可用。
在Elasticsearch中启用安全性的唯一首选方法是通过插件X-Pack。
https://www.elastic.co/guide/zh-CN/x-pack/current/xpack-introduction.html
这是一个多用途插件,非常适合于安全目的,因为您还可以根据需要使用监视功能并配置警报和通知。
因为它已经得到高度认可,所以我相信Elasticsearch将继续使用此进行登录。
如果要对Kibana3使用基本身份验证,这是我的解决方案:
https://github.com/fangli/kibana-authentication-proxy
不仅支持basicAuth ES后端,还支持客户端的GoogleOAuth和BasicAuth。如果可以,请给个星星,谢谢。
我是ElasticSearch的新手,但我觉得X-Pack插件应在此处显示为答案:https ://www.elastic.co/guide/zh-cn/x-pack/current/index.html
据我了解,X-Pack现在已成为确保ElasticSearch(以及更多)(包括身份验证)安全的事实上的标准。
关于此问题的特定解决方案,我遇到了以下内容,它是反向代理方法的简单实现,如其他答案中所述:
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
由于ElasticSearch是一种数据库服务,因此您可能不希望它公开公开。
我不相信插件能为我做到这一点,所以我使用了nginx代理。
本教程非常有帮助:
从6.8Elastic
版开始,一些安全功能变为免费(请阅读:https : //www.elastic.co/blog/security-for-elasticsearch-is-now-free)
"xpack.security.enabled=true"
。例如,如果您正在使用docker-compose.yml
文件,则在下面添加行environment
:
elasticsearch:
image: elastic:6.8.0
environment:
- "xpack.security.enabled=true"
接下来,您必须指定默认用户(称为“弹性”)应接受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}
正是您想要的(没有用户名和密码,因此不允许访问)
请记住非常重要的一点:
当Elastic
启动时,它预制件Bootstrap checks
(https://www.elastic.co/guide/en/elasticsearch/reference/6.8/bootstrap-checks.html)。
执行这些检查时Elastic
,“开发”和“生产”模式之间有所不同。
如果elastic
以production
模式运行,则这些配置是不够的(引导检查将失败,并且数据库将无法工作)。您还必须在节点之间添加ssl加密配置。了解更多:https://www.elastic.co/guide/en/elasticsearch/reference/6.8/security-settings.html