elk权限控制_7. ELK安全配置(上)

> ##### [感谢江榕分享](https://www.tuicool.com/articles/6fyU7bU)

> ##### [感谢chenzanlong123](http://blog.csdn.net/chenzanlong123/article/details/11784143 "关于truststore和kenstore的区别") 关于truststore和kenstore的区别

### Search Guard基础知识

SearchGuard®是Elasticsearch的开源安全套件,提供加密,身份验证,授权,审计日志记录和多租户的整个ELK堆栈。开源版本核心功能:

- 节点之间的RPC流量通过 SSL/TLS 传输(强制性);

- 索引级别访问控制(重点!);

- 权限配置基本与shield保持一致;

- 支持restful接口流量加密(可选);

#### 个人理解

- Search Guard会将ES包裹起来,其他程序连接ES时,实际是Search Guard在做验证和权限控制。

- ES的Master/Node节点间的SSL/TLS通讯加密必须配置,但客户端(Kibana、Logstash、ES-Head等)访问ES的HTTPS可不配置

- 证书的生成需要使用 Search Guard SSL程序包,需要单独下载,但该程序无需放在ES的服务器中执行,只使用生成后的证书

- keystore可以看成一个放key的库,key就是公钥,私钥,数字签名等组成的一个信息。truststore和keystore的性质是一样的,都是存放key的一个仓库,区别在于,truststore里存放的是只包含公钥的数字证书,代表了可以信任的证书,而keystore是包含私钥的

- Search Guard有Demo脚本,为了更好的理解原理,不要使用

##### Search Guard部署过程

- 第一阶段:实现访问ES需要用户名密码

- 第二节点:Kibana实现用户名密码登录

##### 涉及插件

>[GitHub链接](https://github.com/floragunncom "github链接")

- search-guard-ssl(生成证书程序)

- search-guard(ES插件)

- search-guard-kibana-plugin(Kibana插件)

### 部署Search Guard SSL(任意机器)

仅生成证书,无需部署在生产节点,生成后部署到对应节点即可,该文件需备份!

不推荐使用样例脚本

> [具体版本对照](https://github.com/floragunncom/search-guard-ssl/wiki "版本对照")

脚本依赖openssl 和 keytool

```shell

git clone https://github.com/floragunncom/search-guard-ssl.git

cd search-guard-ssl/example-pki-scripts

```

#### 证书生成重要概念

因为我们要使用到生产环境,所以我们需要自定义创建证书

- ##### gen_client_node_cert.sh(生成admin-keystore.jks)

生成客户端和管理员证书,包含客户端证书的密钥库。此证书被配置为管理员证书,名字可以使用sgadmin/admin/ding均可,但名称要与ES中配置的前缀保持一致(下文中会提到),否则ES启动时,会报Search Guard密码错误

- ##### gen_node_cert.sh(生成 node-0-keystore.jks)

生成ES节点间通讯的证书,密钥库包含节点证书和中间证书。这些密钥库可以在所有Elasticsearch节点上使用。

- ##### gen_root_ca.sh(生成truststore.jks)

包含用于签署所有其他证书的根CA的信任库

##### 修改配置

```shell

example-pki-scripts/etc/root-ca.conf

example-pki-scripts/etc/signing-ca.conf

```

脚本会根据这两个配置生成证书,需要修改如下内容,暂时还不太理解作用,我并没有修改

```shell

[ ca_dn ]

0.domainComponent = "com"

1.domainComponent = "example"

organizationName = "Example Com Inc."

organizationalUnitName = "Example Com Inc. Root CA"

commonName = "Example Com Inc. Root CA"

```

#### 生成证书

##### 生成强密码

```shell

根CA密码:NhRxQ3dC3rJZuQFa

truststore密码:siCPVLDYN2BwuYKo

keystore密码:CNByuENniEtkHRfs

```

##### 生成truststore证书

```shell

#./gen_root_ca.sh capassword_use_a_strong_one truststorepassword

./gen_root_ca.sh NhRxQ3dC3rJZuQFa siCPVLDYN2BwuYKo

```

##### 生成ES节点通讯证书

> ##### 留下问题?是所有ES用一个,每个ES都用不同的证书

```shell

./gen_node_cert.sh nodenum keystorepassword capassword_use_a_strong_one

./gen_node_cert.sh 0 CNByuENniEtkHRfs NhRxQ3dC3rJZuQFa

```

##### 生成客户端(管理员)证书

```shell

./gen_client_node_cert.sh clientname keystorepassword capassword_use_a_strong_one

./gen_client_node_cert.sh admin CNByuENniEtkHRfs NhRxQ3dC3rJZuQFa

```

##### 生成的文件

```shell

#ll /opt/search-guard-ssl/example-pki-scripts/*.jks

-rw-r--r-- 1 root root 4164 Nov 10 16:38 admin-keystore.jks

-rw-r--r-- 1 root root 4233 Nov 10 16:38 node-0-keystore.jks

-rw-r--r-- 1 root root 956 Nov 10 16:37 truststore.jks

```

#### 分发证书

node和truststore证书分发到所有ES的/etc/elasticsearch/目录下

admin证书,放到管理机上,Search Guard会在Elasticsearch中建立searchguard的索引分片,内部存储的就是用户和权限的信息,这些信息只能通过sgadmin.sh脚本进行更新,Search Guard中的逻辑用户,是不具备查看权限的。具体请看下文

##### 注意备份整个目录,后期可能还会生成证书

### 所有ES节点安装Search Guard

#### 在线安装

>##### [版本对应关系](https://github.com/floragunncom/search-guard/wiki "版本对应关系")

```shell

cd /usr/share/elasticsearch/bin

./elasticsearch-plugin install com.floragunn:search-guard-5:5.6.4-16

```

search-guard-5:search-guard的版本

5.6.4-16:当前Elasticsearch对应的search-guard版本

#### 离线安装(推荐)

> ##### [zip包下载地址](http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22com.floragunn%22%20AND%20a%3A%22search-guard-5%22 "下载地址")

```shell

./elasticsearch-plugin install -b file:///tmp/search-guard-5-5.6.4-16.zip

```

#### 增加ES配置(所有ES)

配置结尾增加

```shell

searchguard.ssl.transport.keystore_filepath: node-0-keystore.jks

searchguard.ssl.transport.keystore_password: CNByuENniEtkHRfs

searchguard.ssl.transport.truststore_filepath: truststore.jks

searchguard.ssl.transport.truststore_password: siCPVLDYN2BwuYKo

#enforce_hostname_verification为不强制验证主机名

searchguard.ssl.transport.enforce_hostname_verification: false

#注意CN=admin,必须和admin-keystore.jks中的admin相同

searchguard.authcz.admin_dn:

- CN=admin,OU=client,O=client,L=Test, C=DE

```

重启ES服务器,如未设置,将无法加入到集群,建议所有ES全部停止后统一配置,避免脑裂

### 生成searchguard索引分片

> ##### [sgadmin相关参数](http://floragunncom.github.io/search-guard-docs/sgadmin.html "1")

```shell

sh /usr/share/elasticsearch/plugins/search-guard-5/tools/sgadmin.sh -h 192.168.0.230 -p 9300 -tspass siCPVLDYN2BwuYKo -kspass CNByuENniEtkHRfs -cd /usr/share/elasticsearch/plugins/search-guard-5/sgconfig -ks /etc/elasticsearch/admin-keystore.jks -ts /etc/elasticsearch/truststore.jks -nhnv -cn es-cluster

```

- 默认要求ES集群状态至少要为YELLOW,可以使用-arc,–accept-red-cluster跳过

- 早期版本的Search guard是允许使用node证书的,但是新版本已经禁止了,这里的ks需要指定为管理用户的证书(admin-keystore.jks)

- es-cluster为集群名称

- -nhnv 禁用主机名称验证,不要验证主机名

```shell

###################################

Contacting elasticsearch cluster 'es-cluster' and wait for YELLOW clusterstate ...

Clustername: es-cluster

Clusterstate: YELLOW

Number of nodes: 1

Number of data nodes: 1

searchguard index already exists, so we do not need to create one.

Populate config from /usr/share/elasticsearch/plugins/search-guard-5/sgconfig/

Will update 'config' with /usr/share/elasticsearch/plugins/search-guard-5/sgconfig/sg_config.yml

SUCC: Configuration for 'config' created or updated

Will update 'roles' with /usr/share/elasticsearch/plugins/search-guard-5/sgconfig/sg_roles.yml

SUCC: Configuration for 'roles' created or updated

Will update 'rolesmapping' with /usr/share/elasticsearch/plugins/search-guard-5/sgconfig/sg_roles_mapping.yml

SUCC: Configuration for 'rolesmapping' created or updated

Will update 'internalusers' with /usr/share/elasticsearch/plugins/search-guard-5/sgconfig/sg_internal_users.yml

SUCC: Configuration for 'internalusers' created or updated

Will update 'actiongroups' with /usr/share/elasticsearch/plugins/search-guard-5/sgconfig/sg_action_groups.yml

SUCC: Configuration for 'actiongroups' created or updated

Done with success

```

SUCC代表更新成功

#### 截至目前,ES各个节点间通讯已经加密;Search Guard已经开始守护ES集群了。但由于Search Guard默认设置了一些用户,都是弱口令用户,下一步,我们要进行权限设置以及客户端(Logstash、Kibana、Head)的访问设置

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值