openEuler系统离线安装Elasticsearch 7.8版本,配置集群,设置账号密码(二)
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] ..."}} 的报错,证明写入和删除操作被成功拦截。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐
所有评论(0)