温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何实现elasticsearch基于RBAC认证和集群之间的TLS通讯

发布时间:2021-10-12 11:56:22 来源:亿速云 阅读:96 作者:iii 栏目:编程语言

本篇内容主要讲解“如何实现elasticsearch基于RBAC认证和集群之间的TLS通讯”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何实现elasticsearch基于RBAC认证和集群之间的TLS通讯”吧!

一、背景

默认情况下,当我们搭建好es集群后,我们通过http://localhost:9200就可以直接访问到es集群的一些信息,这显然是不安全的。在同一个局域网中,如果我们启动了多个es节点,且集群的名字相同,那么他们可能会自动加入集群,这显然是不安全的。因此我们要想个办法来解决它。es自带的插件x-pack就可以解决上述的要求。在高版本的es中,x-pack插件是默认就集成了。

二、需要解决的问题

1、给es增加用户名和密码访问。
2、集群之间的通讯采用TLS通讯。

三、给es增加用户名和密码访问

1、修改config/elasticsearch.yml

# 1、修改 ES_HOME/config/elasticsearch.yml
# 增加如下配置
vim config/elasticsearch.yml
xpack.security.enabled: true

2、访问es集群

如何实现elasticsearch基于RBAC认证和集群之间的TLS通讯 > 此时可以看到访问es集群就需要用户名和密码了,那么我们这个用户名和密码从哪里获取呢?

3、启用es集群内建的用户

1、让es自动设置初始化密码

./bin/elasticsearch-setup-passwords auto

如果执行上面这个语句,那么es会自动设置密码,我们需要自己把这个密码保存下来。

2、自动手动设置密码

./bin/elasticsearch-setup-passwords interactive

如何实现elasticsearch基于RBAC认证和集群之间的TLS通讯

此处为了简单,将每个用户的用户名和密码都设置成 123456,生产环境需要设置成一个复杂的接口。

注意⚠️:

当我们设置了elastic用户的密码后,就不可在执行elasticsearch-setup-passwords命令了。

3、重新访问es,输入用户名和密码

如何实现elasticsearch基于RBAC认证和集群之间的TLS通讯 重新访问es集群,输入用户名和密码之后,就可以访问到集群的信息了。

四、kibana连接到es集群

1、设置kibana的用户名和密码

# 设置用户名和密码
elasticsearch.username: "kibana_system"
elasticsearch.password: "123456"

该用户名和密码,是由上一步设置好的。

2、访问kibana

如何实现elasticsearch基于RBAC认证和集群之间的TLS通讯 此时可以看到,我们的kibana就需要用户名和密码访问了。

3、通过kibana创建用户和角色

如何实现elasticsearch基于RBAC认证和集群之间的TLS通讯

五、配置es集群之间的TLS通讯

1、在es集群的生产模式中,节点之间的通讯必须要使用TLS通讯,否则集群无法启动。

2、配置集群以TLS通讯,还可以防止不受信任的节点加入es集群。

如何实现elasticsearch基于RBAC认证和集群之间的TLS通讯

1、何为es的生产模式

  1. 集群之间的服务发现不可是 single-node discovery 服务发现。

  2. 节点之间可以使用非回环地址加入集群。

2、配置步骤

1、生成证书(CA)

# 生成证书
bin/elasticsearch-certutil ca

如何实现elasticsearch基于RBAC认证和集群之间的TLS通讯

2、为每个节点签发证书

# --ca 指定证书的路径
./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12

如何实现elasticsearch基于RBAC认证和集群之间的TLS通讯

3、查看证书的生成路径

如何实现elasticsearch基于RBAC认证和集群之间的TLS通讯

4、为集群中的每个节点配置证书

# 1、将证书拷贝到每个节点的 config 目录下
mv elastic-certificates.p12 config

# 2、修改elasticsearch.yml文件,增加如下配置
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.client_authentication: required
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12

5、重启es集群

如何实现elasticsearch基于RBAC认证和集群之间的TLS通讯

6、重新加载集群的证书、密钥等信息

如何实现elasticsearch基于RBAC认证和集群之间的TLS通讯

使用resource.reload.interval.high参数配置,默认是5s

六、java client中basic认证的写法

import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;

/**
 * @author huan.fu 2021/4/22 - 下午2:48
 */
public class AbstractEsApi {

    protected final RestHighLevelClient client;

    public AbstractEsApi() {
        final CredentialsProvider credentialsProvider =
                new BasicCredentialsProvider();
        credentialsProvider.setCredentials(AuthScope.ANY,
                new UsernamePasswordCredentials("elastic", "123456"));

        client = new RestHighLevelClient(
                RestClient.builder(
                        new HttpHost("localhost", 9200, "http"),
                        new HttpHost("localhost", 9201, "http"),
                        new HttpHost("localhost", 9202, "http")
                )
                .setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider))
        );
    }
}

到此,相信大家对“如何实现elasticsearch基于RBAC认证和集群之间的TLS通讯”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI