我们直接安装的ES默认是没有账号与密码的,输入ES服务器的ip:端口,直接就能返回结果,非常不安全,因此选择设置密码
1.1 在ES节点上设置用户密码
1.1.1 在其中一个节点上生成认证文件
1.1.1.1 生成CA证书
$ cd /home/admin/local/elasticsearch
##生成 ca 证书
$ ./bin/elasticsearch-certutil ca
全部回车不用管密码
##用 ca 证书签发节点证书
$ ./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
全部回车不用管密码
/*
在上面生成证书的时候设置了密码,会导致无法启动ES,报错:
ElasticsearchSecurityException[failed to load SSL configuration [xpack.security.transport.ssl]]; nested: ElasticsearchException[failed to create trust manager]; nested: ElasticsearchException[failed to initialize SSL TrustManager]; nested: IOException[keystore password was incorrect]; nested: UnrecoverableKeyException[failed to decrypt safe contents entry: javax.crypto.BadPaddingException: Given final block not properly padded. Such issues can arise if a bad key is used during decryption.];
Likely root cause: java.security.UnrecoverableKeyException: failed to decrypt safe contents entry: javax.crypto.BadPaddingException: Given final block not properly padded. Such issues can arise if a bad key is used during decryption.
*/
$ cd /home/admin/local/elasticsearch/config/
$ mkdir certs
$ mv /home/admin/local/elasticsearch/elastic-certificates.p12 config/certs/
$ mv /home/admin/local/elasticsearch/elastic-stack-ca.p12 config/certs/
并且将certs目录也复制到其他节点的对应目录里(所有节点都用同一份)
1.1.2 修改所有ES节点的配置文件
vi /usr/local/ElasticSearch/config/elasticsearch.yml
添加:
xpack.security.enabled: true
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
1.1.3 重启各ES节点
启动命令:elasticsearch -d
1.1.4 设置密码
必须确保集群状态正常才行,否则密码设置会失败。
在其中一个节点上设置密码即可:
$ ./elasticsearch-setup-passwords interactive
$ Please confirm that you would like to continue [y/N] 输入y
下面是输入对应用户的密码
1.1.5 验证
输入用户elastic 和之前设置的密码
1.2 配置kibana用户密码
由于ES设置了密码,kibana也无法无密码访问了,也需要对kibana进行相应设置。
2.2.1 修改配置文件
vi /usr/local/kibana/config/kibana.yml
添加:
elasticsearch.username: "kibana"
elasticsearch.password: "之前设置的密码"
2.2.2 重启kibana
#启动
/usr/local/kibana/bin/kibana &
2.2.3 登录验证
登录成功,但是,信息无法查看。权限没开通,返回如下信息。
{"statusCode":403,"error":"Forbidden","message":"Forbidden"}
用超级用户elastic用户可成功登录。
点击左下角的管理按钮->Security->Users,可以看到我们之前配置过密码的用户:
这些默认用户的角色无法修改,可自己新建角色和用户,来满足自己的使用需求。
2.3 在kibana里创建程序账号
想建一个有增删改查权限的程序账号,提供给程序使用。
2.3.1 创建角色
#给该角色授予操作所有索引的读写权限及创建索引的权限
点击下面的'create role'创建角色。
2.3.2 创建用户
需要赋予该用户kibana_admin权限,否则新用户没权限登录,报错:
{"statusCode":403,"error":"Forbidden","message":"Forbidden"}
#不在页面配置的话,也可以直接用命令创建角色及账号。
#创建角色
curl --user elastic:密码 -H "Content-Type: application/json" -XPUT http://172.18.252.101:10412/_security/role/DmlRole -d '{
"indices": [
{
"names": [
"*"
],
"privileges": [
"read",
"write",
"create_index"
]
}
]
}'
注释:names:指定索引
privileges:权限类别
#创建账号
curl --user elastic:密码 -H "Content-Type: application/json" -XPOST http://172.18.252.101:10412/_security/user/ProgramUser -d '{
"password" : "密码",
"roles" : ["DmlRole","kibana_admin"]
}'