• 售前

  • 售后

热门帖子
入门百科

Elasticsearch7.x配置xpack实战

[复制链接]
秋天一且 显示全部楼层 发表于 2022-1-12 17:23:44 |阅读模式 打印 上一主题 下一主题
2019年5月21日,Elastic官方发布消息: Elastic Stack 新版本6.8.0 和7.1.0的核心安全功能现免费提供。
这意味着用户现在能够对网络流量进行加密、创建和管理用户、定义能够保护索引和集群级别访问权限的角色,并且使用 Spaces 为 Kibana
提供全面保护。 免费提供的核心安全功能如下:
1)TLS 功能。 可对通信进行加密;
2)文件和原生 Realm。 可用于创建和管理用户;
3)基于角色的访问控制。 可用于控制用户对集群 API 和索引的访问权限;
通过针对 Kibana Spaces 的安全功能,还可允许在Kibana 中实现多租户。
  目录
0.xpack演变:
安全部分免费之前,大家怎么保证基础安全?
1.ES集群配置(非集群可以跳过1.1生成证书步骤)
1.1生成证书
1.2修改elasticsearch.yml(位于安装目录config下)
1.3重启ES服务器
1.4设置ES账号密码
2.Kibana配置
2.1修改kibana.yml
2.2设置账户密码(密文配置)
2.3重启Kibana
3.Logstash配置
3.1修改logstash.yml
3.2设置账户密码
3.3修改conf文件
3.4重启Logstash
4.验证集群状态
5.Java代码修改配置
5.1RestHighClient配置
5.2springboot自带的ES连接客户端

0.xpack演变:


  • 5.X版本之前:没有x-pack,是独立的:security安全,watch查看,alert警告等独立单元。
  • 5.X版本:对原本的安全,警告,监视,图形和报告做了一个封装,形成了x-pack。
  • 6.3 版本之前:需要额外安装。
  • 6.3版本及之后:已经集成在一起发布,无需额外安装,基础安全属于付费黄金版内容。 7 .1版本:基础安全免费。
安全部分免费之前,大家怎么保证基础安全?

场景一:全部“裸奔”,相信这在国内占据了非常大的比重。
内网部署,不对外提供服务。或者ES作为业务基础支撑,不公网开放9200等常用端口,开放的是业务的服务端口。
可能暴露问题:公司或团队内部开放9200、5601端口,基本head插件、kibana都能连接,极易导致线上索引或数据可能被误删。
场景二:加了简单防护。
一般使用Nginx身份认证+防火墙策略控制。
场景三:整合使用了第三方安全认证方案。
比如:SearchGuard、ReadonlyREST。
场景四:付费购买了Elastic-Xpack黄金版或白金版服务。
一般是银行等土豪大客户,对安全、预警、机器学习等付费功能需求迫切,如:宁波银行付费购买白金服务。
以上内容摘自:https://blog.caogenba.net/laoyang360/article/details/90554761
1.ES集群配置(非集群可以跳过1.1生成证书步骤)

1.1生成证书

        以3台服务器的集群为例。在服务器1(任选一台服务器生成证书就行)bin目录下执行以下命令生成两个证书:
  1. <code>./elasticsearch-certutil ca
  2. ./elasticsearch-certutil cert --ca elastic-stack-ca.p12
复制代码
两条命令一路回车即可,不需要给秘钥再添加密码。执行完以后会生成两个证书,证书在安装目录bin目录的上一级;
将两个证书移动到安装目录的config目录下(非config目录会报错);
将服务器1上的两个证书复制到另外两个ES服务器的config目录下;
其实生成证书这个步骤很好理解,ES集群之间需要进行数据同步,当给ES集群设置密码以后,ES集群的各服务器之间互相认可对方,证书就是这个作用。
1.2修改elasticsearch.yml(位于安装目录config下)

在elasticsearch.yml中新增如下配置:
  1. <code>xpack.security.enabled: true
  2. xpack.license.self_generated.type: basic
  3. xpack.security.transport.ssl.enabled: true
  4. # 非集群不用增加下面三行
  5. xpack.security.transport.ssl.verification_mode: certificate
  6. xpack.security.transport.ssl.keystore.path: /xxxx/xxxx/config/elastic-certificates.p12
  7. xpack.security.transport.ssl.truststore.path: /xxxx/xxxx/elasticsearch-7.6.2/config/elastic-certificates.p12
复制代码
1.3重启ES服务器

依次重启3台服务器,生产环境ES集群不能停止服务,所以我们采用每次重启一台,切不可全部停止。
步骤1.3重启服务器一定要在步骤1.4设置ES账号密码之前。要不然1.4设置密码会失败。
1.4设置ES账号密码

在服务器1(挑一台服务器执行即可,不需要每台服务器都执行)上ES的bin目录下执行如下命令设置密码:
ES内置elastic、apm_system、logstash_system、kibana等内置用户,需要分别为这些账户设置密码,密码中不要包含@符号,有坑。需要记住自己设置的密码,后续过程需要使用。
  1. <code># interactiv手动设置密码
  2. ./elasticsearch-setup-passwords interactive
复制代码
也可使用:
  1. <code># 自动生成密码
  2. ./elasticsearch-setup-passwords auto
复制代码
如果在设置密码的过程中报错,重新执行此命令再设置一次即可,不可跳过报错。
设置完账号密码以后,在命令行中执行如下命令验证一下账号密码是否设置成功:
  1. <code>curl -XGET -u elastic ‘http://${ip}:9200/_xpack/security/user?pretty’
复制代码
若出现提示输入elastic账户的密码,则账号密码设置成功。
2.Kibana配置

2.1修改kibana.yml

在kibana.yml文件中新增配置:
  1. <code>xpack.reporting.encryptionKey: "a_random_string"
  2. xpack.security.encryptionKey: "something_at_least_32_characters"
  3. # 明文配置,则加上以下两行。推荐密文配置,参考步骤2.2
  4. elasticsearch.username: "kibana"
  5. elasticseacr.password: "kibana_passwd"
复制代码
2.2设置账户密码(密文配置)

在bin目录下执行:
  1. <code>   ./kibana-keystore create
  2.    ./kibana-keystore add elasticsearch.username
  3.    # 输入1.4中设置的账户:elastic
  4.    ./kibana-keystore add elasticsearch.password
  5.    # 输入1.4中设置的elastic账户的密码
复制代码
2.3重启Kibana

kibana进程查找命令:netstat -tunlp|grep 5601
启动命令: nohup ./kibana &
3.Logstash配置

3.1修改logstash.yml

logstash.yml(位于安装目录config下)文件中新增如下配置:
logstash_system为ES的内置账户,只有监控权限,用于心跳检测ES服务器的状态。此账户权限非常小,所以这里密码采用明文写在配置文件也不要紧。
  1. <code>xpack.monitoring.enabled: true
  2. # 步骤1.4中设置的账户logstash_system为ES的内置账户
  3. xpack.monitoring.elasticsearch.username: logstash_system
  4. # 设置的密码
  5. xpack.monitoring.elasticsearch.password: yourPassword
复制代码
3.2设置账户密码

在bin目录下执行:
  1. <code>./logstash-keystore create
  2. # 执行后 选Y
  3. ./logstash-keystore add ES_USER
  4. # 输入1.4中设置的账户:elastic,这里不要使用logstash_system这个账号,这个账号没有增删改索引的权限
  5. ./logstash-keystore add ES_PWD
  6. # 输入1.4中设置的elastic账户的密码
复制代码
3.3修改conf文件

修改logstash的配置文件,一般是自己新增的配置文件,位于config文件夹下。
在output模块中新增账号,密码
  1. <code>output {
  2.     elasticsearch {
  3.       action => "%{[@metadata][action]}"
  4.       hosts => ["ip1:9200", "ip2:9200", "ip3:9200"]
  5.       index => "demo_index"
  6.       document_id => "%{id}"
  7.       # 新增如下两行:采用密文配置,要使用明文可自行查看官方文档
  8.       user => ${ES_USER}
  9.       password => ${ES_PWD}
  10.     }
  11. }
复制代码
3.4重启Logstash

重启后观察启动日志,有无ERROR报错,无ERROR即正常。或者验证数据有没有通过Logstash同步到ES上面。到这里ELK就全部配置完成~
4.验证集群状态

在服务器中执行如下命令,验证ES集群状态:
  1. <code> curl -XGET -u ${username}:${pwd} http://${ip}:9200/_cluster/health?pretty
复制代码
集群状态为green就大功告成。如果为yellow就稍等一会,说明有副本分片还未恢复。如果集群状态为red,说明有主分片未恢复,需要去查看是否有ES服务器还未重启成功。
5.Java代码修改配置

5.1RestHighClient配置

  1. <code>final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
  2. /*设置账号密码*/
  3. credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("username","password"));
  4. /*创建rest client对象*/
  5. RestClientBuilder builder = RestClient.builder(new HttpHost(127.0.0.1, 9200))
  6.                 .setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
  7.                     @Override
  8.                     public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpAsyncClientBuilder) {
  9.                         return httpAsyncClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
  10.                     }
  11.                 });
  12.         client = new RestHighLevelClient(builder);
复制代码
5.2springboot自带的ES连接客户端

在项目配置文件中ES直接配置上username,password即可。

来源:https://blog.caogenba.net/Giggle1994/article/details/122439066
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作