es集群安全
-
es在默认安装后,不提供任何形式的安全防护
- 错误的配置信息导致公网可以访问es集群(在es配置文件中server.host设置为0.0.0.0)
es数据安全性的基本需求
- 身份认证
- 用户鉴权
- 传输加密
- 日志审计
执行方案
- nginx反代
-
免费的security插件
- search guard
- readonly REST
- X-Pack
1、开启并配置X-Pack的认证和授权
(1)修改配置文件
xpack.security.enabled=true #启动x-pack
重启ES,可能会报错提示xpack.security.transport.ssl.enabled为false,只需在elasticsearch.yml文件添加
xpack.security.transport.ssl.enabled: true
(2)创建默认的用户和分组
bin/elasticsearch-setup-passwords interactive
根据提示,设置用户密码
(3)为kibana设置访问es的用户密码
elasticsearch.username: "kibana"
elasticsearch.password: "changeme"
(4)登陆验证
2、集群内部安全通信
es集群内部节点通过9300端口通信
- 加密数据-避免数据抓包,敏感信息泄露
- 验证身份-避免impostor node
为ES集群内部节点之间安全通信进行加密,他的原理就是为为每一个节点添加一个CA证书,只有持有相同CA证书的节点才能加入集群中
(1)为节点创建证书颁发机构(CA)
bin/elasticsearch-certuil ca
根据提示回车操作,会在es目录下生成elastic-stack-ca.p12文件
(2)根据生成文件,为每个节点生成证书和私钥
bin/ealsticsearch-certuil cert --ca elastic-stack-ca.p12
根据提示回车操作,会在es目录下生成elastic-certificates-ca.p12文件
(3)在es config目录下创建certs目录,将elastic-certificates-ca.p12文件移动到certs下
mkdir config/certs
mv elastic-certificates-ca.p12 config/certs
(4)各节点es配置
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: certs/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: certs/elastic-certificates.p12
重启es,没有证书的es节点无法加入集群
注:为节点生成的证书、密钥等需修改文件的用户权限
3、集群与外部安全通信
es集群与外部通过9200端口通信
当kibana、logstash、浏览器等访问ES时,他们之间的数据传输是走的明文,非常不安全,所以要添加https加密
(1)配置es
xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.keystore.path: certs/elastic-certificates.p12
xpack.security.http.ssl.truststore.path: certs/elastic-certificates.p12
(2)为kibana访问es进行配置(给kinbana生成pem)
openssl pkcs12 -in elastic-certificates.p12 -cacerts -nokeys -out elastic-ca.pem
(3)将生成的证书移动到kibnana的config/certs目录下(需创建certs目录)
(4)配置kibana
elasticsearch.hosts: ["https://localhost:9200"]
elasticsearch.ssl.certificateAuthorities: [ "/opt/kibana/config/certs/elastic-ca.pem" ]
elasticsearch.ssl.verificationMode: certificate
(5)为kibana配置https,生成elastic-stack-ca.zip
bin/elasticsearch-certutil ca --pem
(6)对生成的elastic-stack-ca.zip进行解压,生成ca.crt 和 ca.key
(7)配置kibana
server.ssl.enabled: true
server.ssl.certificate: config/certs/instance.crt
server.ssl.key: config/certs/instance.key