1. 开启认证
在elasticsearch.yml中添加:
xpack.security.enabled: true
2. 配置节点间通信互信
2.1 创建一个yml文件,例如cert.yml
添加集群中所有节点信息,例如
instances:
- name: "node01"
dns:
- "host-node01"
ip:
- "192.168.99.101"
- name: "node02"
dns:
- "host-node02"
ip:
- "192.168.99.102"
- name: "node03"
dns:
- "host-node03"
ip:
- "192.168.99.103"
instances中每一项代表集群中的一个节点
其中name为elasticsearch.yml中配置的 node.name
2.2 生成证书
./bin/elasticsearch-certutil cert --in cert.yml --keep-ca-key
根据提示输入产生的文件,直接回车即可
根据提示输入ca文件的密码 根据提示输入每个节点文件的密码
完成后会创建certificate-bundle.zip,将其解压后得到:
ca/ca.p12
node01/node01.p12
node02/node02.p12
node03/node03.p12
其中ca.p12是用来创建节点证书的,如果将来要增加节点,可以使用:
./bin/elasticsearch-certutil cert --ca ca.p12 --name node04 --dns host-node04 -ip 192.168.99.104
根据提示输入ca的密码,该密码就是创建ca.p12时输入的密码
2.3 节点添加配置
将产生的节点证书分别放置在各节点安装目录的config目录下,并且在elasticsearch.yml中添加:
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.keystore.path: ${node.name}.p12
xpack.security.transport.ssl.truststore.path: ${node.name}.p12
因为在cert.yml中的name字段设置为了 node.name,所以${node.name}.p12就是文件的名字
2.4 将${node.name}.p12密码保存在keystore中
./bin/elasticsearch-keystore create
创建keystore。因为默认config有elasticsearch.keystore文件因此可以不执行。
./bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
./bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password
根据提示输入p12文件密码
3. 启动ES
4. 给内建用户创建密码
在client节点上执行以下命令:
./bin/elasticsearch-setup-passwords interactive
根据提示给内建用户创建密码
5. 创建用户
5.1 native realm
该方式就是使用kibana进行用户管理。首先,安装kibana并在kibana.yml中配置kibana用户密码:
elasticsearch.username: "kibana"
elasticsearch.password: "your_password"
kibana是内建用户,其密码在第4步中设置的。 如果不希望密码显示配置在yml中配置密码,可以将用户名和密码写入keystore中,命令如下:
./bin/kibana-keystore create
./bin/kibana-keystore add elasticsearch.username
./bin/kibana-keystore add elasticsearch.password
启动kibana并在Management>Security>Users页面下创建用户
5.2 file realm
该方式是在es的config目录下的users和users_roles文件中增加了用户信息。该方法在特殊状况中会非常有用,例如集群故障,安全索引出问题或者忘记了用户名密码等。做法是在每台节点上执行以下命令:
./bin/elasticsearch-users useradd myusernamejjj
根据提示输入密码,在给myusernamejjj增加角色:
./bin/elasticsearch-users.bat roles myusernamejjj -a superuser
superuser为内建的超级用户。