四、es6.3.1基于searchguard实现多租户

引言
  search-guard是Elasticsearch的一个安全权限plugin,权限控制粒度可以到indices、types,甚至可以到过滤field层次。同时也可以限制用户行为CRUD, admin权限等。search-guard可以实现用户访问es中日志需要登陆授权,不同用户访问不同索引,不授权的索引无法查看,从而实现分组控制不同用户查看各自的业务。
1、search-guard插件安装
相关es对应版本https://docs.search-guard.com/latest/search-guard-versions
安装https://github.com/floragunncom/search-guard/releases
./bin/elasticsearch-plugin install -b file://xxx
2、 在./search-guard-ssl-6.3.x/example-pki-scripts脚本说明
#清除已生成证书的相关文件
clean.sh
#证书生成配置:root-ca.conf 根证书配置 signing-ca.conf 签名证书配置
#生成所有相关证书的脚本
example.sh
#生成客户端证书的脚本
gen_client_node_cert.sh
gen_node_cert_openssl.sh
#生成节点证书的脚本
gen_node_cert.sh
gen_revoked_cert_openssl.sh
#生成ca根的脚本
gen_root_ca.sh
节点证书与客户端证书中的简写含义:
CN=commonName #通用名称(如主机名), 如: es.node-1.test.cn
OU=organizationalUnitName #组织单位名称, 如:bigdata
O=organizationName #组织名称, 如:test
L=localityName #地区名称, 如:chengdu
C=countryName # 国家名称,如:CN
3、配置说明
a、配置生成证书脚本example.sh
四、es6.3.1基于searchguard实现多租户_第1张图片
b、每台机器配置elasticsearch.yml
四、es6.3.1基于searchguard实现多租户_第2张图片
配置完成后重启es集群

4、search-guard权限配置
在./plugins/search-guard-6下两个目录sgcofig和tools
sgconfig下用户、角色、权限配置分别对应sg_internal_users.yml 、sg_roles_mapping.yml、sg_roles.yml
分别配置这三个文件
sg_internal_users.yml四、es6.3.1基于searchguard实现多租户_第3张图片
hash密码由tools/hash.sh -p xxx生成
sg_roles_mapping.yml配置
四、es6.3.1基于searchguard实现多租户_第4张图片
sg_roles.yml配置
四、es6.3.1基于searchguard实现多租户_第5张图片
配置完成后执行
./tools/sgadmin.sh -h xxx -cd …/sgconfig -ks /etc/elasticsearch/sgadmin-keystore.jks -kspass E#xsw2ZA -ts /etc/elasticsearch/truststore.jks -tspass E#xsw2ZA -nhnv -cn xxxxx 生效

3、searchguard开启java client的测试

public static void init(){
    set =Settings.builder()
            .put("path.home", ".")
            .put("cluster.name",CLUSTER)
            .put("client.transport.sniff", true) //自动嗅探整个集群的状态,把集群中其他ES节点的ip添加到本地的客户端列表中
            .put("searchguard.ssl.transport.keystore_filepath","D:\\Users\\yuh004\\IdeaProjects\\testELK\\src\\main\\resources\\sgadmin-keystore.jks")
           .put("searchguard.ssl.transport.keystore_password", "changeit")
            .put("searchguard.ssl.transport.truststore_filepath","D:\\Users\\yuh004\\IdeaProjects\\testELK\\src\\main\\resources\\truststore.jks")
            .put("searchguard.ssl.transport.truststore_password", "changeit")
            .put("searchguard.ssl.transport.enforce_hostname_verification", false)
            .put("searchguard.ssl.transport.resolve_hostname",false)
            .build();
    try {
        client = new PreBuiltTransportClient(set,SearchGuardPlugin.class)
                .addTransportAddress(new TransportAddress(InetAddress.getByName(HOST), PORT));
    }catch (Exception e){
        e.printStackTrace();
    }

由于java访问es集群是走的tcp协议,故需要传签名证书的,这点比较坑,传证书是能访问全部索引数据。
4、searchguard开启hive client对es的测试
在hive客户端执行
set es.net.http.auth.user=admin;
set es.net.http.auth.pass=123456;
CREATE EXTERNAL TABLE test_es_hive (
id STRING,
name STRING ,
text STRING)
STORED BY ‘org.elasticsearch.hadoop.hive.EsStorageHandler’
TBLPROPERTIES(‘es.resource’ = test_es_hive/a’,
‘es.nodes’=‘xxx’);
insert into test_es_hive values(‘1’,‘aa’,‘hello world’);
5、searchguard开启python client对es的操作
from datetime import datetime
from elasticsearch import Elasticsearch
es_servers = [{
“host”: “xxxxx”,
“port”: “9200”,
}]
es = Elasticsearch([‘http://admin:123456@xxxx:9200’])
res = es.get(index=“aa_cmft”, doc_type=‘msg’, id=‘166’)

你可能感兴趣的:(elasticsearch学习)