openEuler系统离线安装Elasticsearch 7.8版本,配置集群,设置账号密码(一)
接上文,生成环境中,出于安全考虑等原因,需要不同功能的账号,比如需要只读账号,此时需要定制化一个集群可用账号

设置步骤如下

1. 生成集群证书,所有集群都需要,有两个一个ca证书,一个密钥证书,放置到安装目录的config下面
2. 修改配置文件,增加证书路径等
3. 给默认账号设置密码,新增一个只读账号,只有读的功能

1.生成集群证书

生成ca证书

# 进入到bin目录,里面自带生成证书的工具
cd /home/mydata/elasticsearch-7.8.0/config/

../bin/elasticsearch-certutil ca --days 99999

不用设置证书密码,直接enter键跳过即可,会在elasticsearch-7.8.0目录下生成ca证书
在这里插入图片描述
进入到elasticsearch-7.8.0目录,ls查看当前执行命令目录会发现多了个 elastic-stack-ca.p12文件,这个就是ca颁发的证书。

cd /home/mydata/elasticsearch-7.8.0
ll

在这里插入图片描述
查看证书有效期

openssl pkcs12 -in elastic-stack-ca.p12 -nodes | openssl x509 -noout -enddate

在这里插入图片描述

生成密钥证书

不用设置密码,一直enter跳过就行

../bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12 --days 99999

在这里插入图片描述
在这里插入图片描述
此时,在elasticsearch-7.8.0目录有两个证书,都移动到config下面

mv elastic-certificates.p12 config/
mv elastic-stack-ca.p12 config/

在这里插入图片描述
在这里插入图片描述

2.修改配置文件,增加证书路径

进入到config文件夹,修改elasticsearch.yml配置,新增配置

# 开启 X-Pack 安全功能(这是必须的)
xpack.security.enabled: true
# 加密节点间通信-每个节点容器都要添加
xpack.security.transport.ssl.enabled: true
# 只验证证书是否受信任,不执行主机名验证。还可以设置成 full(还要验证主机名)、none(不验证证书)
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.client_authentication: required
# 指定证书
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
# 将密钥存储库也用做信任存储库
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12

在这里插入图片描述
关闭后重启第一个节点,第二个节点也需要同样配置

关键点,所有节点的elastic-certificates.p12和elastic-stack-ca.p12必须用同一个,否则报错(将第一个节点生成的证书和密钥也放到第二个节点上(多个就放所有节点上)),操作完成后都重启一遍,查看是否形成集群

http :ip1:9200/_cluster/health?pretty,查看集群

避坑:如果启动报错,就是权限问题,赋予权限后重新启动
在这里插入图片描述

chown -R es:es /home/mydata/elasticsearch-7.8.0

3.设置账号密码

预制账号设置密码

集群启动好的状态下,直接进入任意节点的安装目录,设置预置的一些账号密码,密码记得,不然无法登录

./bin/elasticsearch-setup-passwords interactive

在这里插入图片描述
预制账号密码弄完了,那么可以新增自定义账号了。我这里需要设置一个只读账号

自定义账号设置密码

直接在linux下执行,将以下命令中的 密码占位符 替换为你实际要设置的密码,并将 elastic:your_elastic_password 替换为当前管理员账号的密码,我这里创建一个esReader账号,分两步,创建角色和账号,然后新账号关联角色。

1. 创建角色 es_reader_role
# 角色
curl -u elastic:your_elastic_password -X PUT "http://ip1:9200/_security/role/es_reader_role" -H 'Content-Type: application/json' -d'
{
  "cluster": ["monitor"],
  "indices": [
    {
      "names": ["*", "-.*"],
      "privileges": ["read", "view_index_metadata", "monitor"]
    }
  ]
}'
2. 创建用户 esReader 并绑定该角色
# 用户
curl -u elastic:你的elastic密码 -X PUT "http://ip1:9200/_security/user/esReader" -H 'Content-Type: application/json' -d'
{
  "password": "你要设置的esReader密码",
  "roles": ["es_reader_role"],
  "full_name": "Read-Only Account",
  "email": "esReader@example.com"
}'

验证效果

执行完上述命令后,可以用新账号测试一下权限:

1. 查看集群健康(允许)

curl -u esReader:你设置的密码 "http://ip1:9200/_cluster/health?pretty"

应该能正常返回 JSON 数据。

2. 搜索索引数据(允许)

# 验证
curl -u esReader:你要设置的esReader密码 "http://ip1:9200/_cat/indices?h=index&pretty"

3. 尝试删除一个索引(禁止)

curl -u esReader:你设置的密码 -X DELETE "http://ip1:9200/任意索引名"

会返回类似 {"error":{"type":"security_exception","reason":"action [indices:admin/delete] is unauthorized for user [esReader] ..."}} 的报错,证明写入和删除操作被成功拦截。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐