美文网首页
elasticsearch基于RBAC认证和集群之间的TLS通讯

elasticsearch基于RBAC认证和集群之间的TLS通讯

作者: huan1993 | 来源:发表于2021-04-28 22:31 被阅读0次

    一、背景

    默认情况下,当我们搭建好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集群

    访问es集群

    此时可以看到访问es集群就需要用户名和密码了,那么我们这个用户名和密码从哪里获取呢?

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

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

    ./bin/elasticsearch-setup-passwords auto
    

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

    2、自动手动设置密码

    ./bin/elasticsearch-setup-passwords interactive
    
    自动手动设置密码

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

    注意⚠️:

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

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

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

    重新访问es集群,输入用户名和密码之后,就可以访问到集群的信息了。

    四、kibana连接到es集群

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

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

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

    2、访问kibana

    访问kibana

    此时可以看到,我们的kibana就需要用户名和密码访问了。

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

    通过kibana创建用户和角色

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

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

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

    在这里插入图片描述

    1、何为es的生产模式

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

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

    2、配置步骤

    1、生成证书(CA)

    # 生成证书
    bin/elasticsearch-certutil ca
    
    生成证书(CA)

    2、为每个节点签发证书

    # --ca 指定证书的路径
    ./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
    
    为每个节点签发证书

    3、查看证书的生成路径

    查看证书的生成路径

    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集群

    重启ES集群使TLS通讯生效

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

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

    使用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))
            );
        }
    }
    
    

    七、参考链接

    1、给es集群设置简单的用户名、密码访问

    2、配置集群之间TLS通讯

    3、es集群的开发模式和生产模式

    4、配置rest通过https访问

    相关文章

      网友评论

          本文标题:elasticsearch基于RBAC认证和集群之间的TLS通讯

          本文链接:https://www.haomeiwen.com/subject/duvbrltx.html