您的位置:

解决elasticsearch无权限访问问题的方法

Elasticsearch是一个快速和分布式的搜索和分析引擎,它可以完成实时的数据查询和分析。但在使用过程中,经常会遇到无权限访问的问题。这篇文章将讲解elasticsearch无权限访问问题的原因以及解决方法。我们将从如下几个方面详细阐述。

一、检查elasticsearch的基本设置

在使用elasticsearch时,第一个需要检查的是elasticsearch的基本设置。请确保以下列出的elasticsearch的配置项与您当前环境的配置项匹配。

1. 检查elasticsearch's IP地址

请确保elasticsearch的IP地址与您当前环境的IP地址匹配。为此,请打开elasticsearch.yml文件并检查network.host配置项。
network.host: 192.168.0.1
如果好比你的IP地址为192.168.0.2,那么你必须在这里定义你的IP地址,否则你将无法连接elasticsearch实例。

2. 检查elasticsearch's hostname

如果没有定义主机名,那么elasticsearch将不正确地解析它的地址。为此,请检查以下配置项。
node.name: mynode
network.host: 192.168.0.1
请注意,上面的配置中是确保节点有一个my node的主机名已分配,并且elasticsearch实例的IP地址被设置为192.168.0.1。现在,您已经准备好开始使用elasticsearch。

二、确保您有正确的用户验证信息

默认情况下,elasticsearch没有密码,这是因为当elasticsearch使用于内部用途时,身份验证选项是可选的。但是,当你使用一个在外网可访问的elasticsearch实例时,最好使用密码进行身份验证。在这种情况下,您需要使用基本身份验证来确保安全连接。以下是一些基本身份验证选项可供选择。

1. 角色-Based 全新的形式

这种形式的身份验证要求用户退出elasticsearch并重新进入,以使用新的认证信息。这种身份验证形式主要需要使用的是Elasticsearch自带的用户角色,可授权各种操作权限。

2. OpenID身份验证

这是一种使用外部身份验证服务器的身份验证形式。它可以让用户使用各种其它服务上的身份验证信息来登录elasticsearch。

3. LDAP 认证

LDAP身份验证是一种使用Elasticsearch 身份验证模块的身份验证形式。当用户登录时,通过检查LDAP服务器来验证用户或组。 当您在elasticsearch中使用安全身份验证时,许多客户端将指定一个证书文件来判断是否允许登录。如果是这种情况,请确保您已经将证书放在正确的位置并配置了适当的权限。

三、创建和分离角色

Elasticsearch还支持角色的创建和分配。例如,您可以创建一个名为admin的角色,并允许它访问所有的数据并进行用户管理。此外,您可以创建一个名为guest的用户角色,并允许它只读您的全部数据。

1. 创建一个角色并指定访问权限

要创建一个角色,请使用以下API来定义所需的权限。
PUT _security/role/admin_role
{
    "cluster": ["manage"],
    "indices": [
        {
            "names": ["*"],
            "privileges": ["all"]
        }
    ]
}
上面的代码创建了一个名为admin_role的角色,并为此角色分配了所有的集群管理权限以及对所有索引的读取和写入的所有权。现在您可以为新用户分配此角色。

2. 将一个角色分配给一个用户

在创建用户时,您可以在指定密码的情况下,将角色分配给该用户。
PUT _security/user/new_user
{
  "password" : "mypassword",
  "roles" : [ "admin_role", "user_role" ],
  "full_name" : "Mary Major",
  "email" : "mary.major@test.com",
  "metadata" : {
    "intelligence" : 7
  }
}
以上代码创建了用户名为new_user的用户,并将“admin_role” 和 “user_role” 角色分配给它,以及指定了用户的其他附加信息。现在,您已经准备好在elasticsearch中使用基于角色的身份验证。

四、启用SSL加密以保护访问数据

在elasticsearch中,您可以启用SSL/TLS功能以加密传输数据。启用此功能后,您的数据在传输时将不会被其他人阅读或更改,从而保护您的数据免遭黑客攻击。以下是如何在elasticsearch中启用SSL/TLS的步骤。

1. 定义证书和安全配置

要启用SSL/TLS,您需要为elasticsearch生成证书。使用openSSL等工具创建新证书后,您可以将其上传到elasticsearch服务器。
curl --cert client.crt --key client.key -XPOST https://localhost:9200/_search
指定证书文件后,您还需要更新elasticsearch.yml文件以启用SSL/TLS。请注意,从elasticsearch 6.8版开始,推荐使用Https。
xpack.security.transport.ssl.enabled:true
xpack.security.http.ssl.enabled:true
xpack.security.http.ssl.keystore.path: elastic-certificates.p12
在指定elasticsearch SSL/TLS的配置时,您还需要注意端口设置。如果您正在使用非默认端口,您可能需要更新elasticsearch配置文件中的直接端口信息。

五、使用HTTPS进行身份验证

另一个安全防护措施是在elasticsearch中使用HTTPS进行身份验证以获得更高级别的加密和数据安全。与基本身份验证相比,HTTPS是更加安全和更加优秀的安全选择。以下是如何在elasticsearch中启用HTTPS的步骤。

1. 定义证书和安全配置

与启用SSL/TLS一样,您需要为elasticsearch生成证书。接下来,修改elasticsearch的配置文件,更新文件的一些属性以启用HTTPS。
xpack.security.http.ssl.enabled:true
xpack.security.http.ssl.keystore.path: elastic-certificates.p12
在配置完elasticsearch的HTTPS后,您可以使用elasticsearch的API或CLI命令测试HTTPs的连接:
curl https://user:password@localhost:9200/
如果您无法使用curl curl命令,则可以使用浏览器产品测试HTTPS。 经过上述的步骤,您应该可以在您的elasticsearch环境中启用数据安全和身份验证措施,使您的信息更加的安全可靠。

六、小结

本篇文章介绍了如何通过基本设置、身份验证、角色创建和分配以及启用SSL/TLS和HTTPS等技术来保护和安全访问您的elasticsearch服务器。如果您遵循了上述建议,并在您的elasticsearch环境中实现了安全性,那么您的信息将更加安全可靠,不易受到黑客攻击。同时,我们也希望您可以参考本文提供的示例代码来进行您的集群设置。