Elasticsearch 认证插件选择
官方资料:
https://www.elastic.co/guide/en/elasticsearch/plugins/current/security.html
官方插件 X-Pack
X-Pack 插件在 docker 镜像中默认已安装,不过 X-Pack 中的 Security 模块需要付费才能使用,所以弃用这个插件。
- 付费用户相关资料: Security Settings in Elasticsearch
社区插件 Readonly REST
Readonly REST 是 Elasticsearch 原生 REST API 的高性能权限控制插件。
- 官网地址:https://readonlyrest.com/
- Github 地址:https://github.com/sscarduzio/elasticsearch-readonlyrest-plugin
- 文档地址:https://github.com/beshu-tech/readonlyrest-docs/blob/master/elasticsearch.md
构建带 readonlyrest 插件的 Elasticsearch 镜像
1、下载合适版本的 readonlyrest 插件 => https://readonlyrest.com/download/
注意:下载地址会发送到你的邮箱
2、编辑 Dockerfile
,此处注意修改 readonlyrest 版本号
FROM elasticsearch:6.6.2
COPY readonlyrest-1.17.3_es6.6.2.zip /plugins/readonlyrest-1.17.3_es6.6.2.zip
RUN sh -c 'echo -e "y" | /usr/share/elasticsearch/bin/elasticsearch-plugin install file:///plugins/readonlyrest-1.17.3_es6.6.2.zip'
3、构建镜像
docker build -t elasticsearch:security-6.6.2 .
部署 Elasticsearch
参考官方文档: https://www.elastic.co/guide/en/elasticsearch/reference/6.6/docker.html
1、修改文件 /etc/sysctl.conf
中的 vm.max_map_count
参数,添加一行:
vm.max_map_count=262144
使其实时生效:sysctl -w vm.max_map_count=262144
2、创建用于持久化存储的文件夹 /data/elasticsearch
mkdir /data/elasticsearch
chmod g+rwx /data/elasticsearch
chgrp 1000 /data/elasticsearch
3、 编辑 readonlyrest 的配置文件 readonlyrest.yml
,内容如下
readonlyrest:
access_control_rules:
- name: "Require HTTP Basic Auth"
type: allow
auth_key: admin:Passw0rd
4、启动 Elasticsearch
docker run -d \
--name elasticsearch \
-u 1000:1000 \
-v /data/elasticsearch:/usr/share/elasticsearch/data \
-v `pwd`/readonlyrest.yml:/usr/share/elasticsearch/config/readonlyrest.yml \
-e "discovery.type=single-node" \
-e "xpack.security.enabled=false" \
-e "TZ=Asia/Shanghai" \
-p 9200:9200 \
elasticsearch:security-6.6.2
验证权限
1、不使用账号密码请求 API,请求失败
$ curl 127.0.0.1:9200/_cat/nodes
{"error":{"root_cause":[{"reason":"forbidden"}],"reason":"forbidden"},"status":401}
2、使用账号密码请求 API,请求成功
$ curl -u admin:Passw0rd 127.0.0.1:9200/_cat/nodes
ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
172.17.0.3 30 96 0 0.02 0.11 0.09 mdi * gF6EDqD
补充知识点
1、Kibana 连接 Elasticsearch
docker run -d \
--name kibana \
--link elasticsearch:elasticsearch \
-e "ELASTICSEARCH_USERNAME=admin" \
-e "ELASTICSEARCH_PASSWORD=Passw0rd" \
-e "TZ=Asia/Shanghai" \
-p 5601:5601 \
kibana:6.6.2
- Kibana Docker 部署文档:https://www.elastic.co/guide/en/kibana/current/docker.html
- Kibana 配置文档:https://www.elastic.co/guide/en/kibana/current/settings.html