使用 Docker 部署带权限认证的 Elasticsearch

作者: Anoyi

2019.03.11 16:05*

Elasticsearch 认证插件选择

官方资料:
https://www.elastic.co/guide/en/elasticsearch/plugins/current/security.html

官方插件 X-Pack

X-Pack 插件在 docker 镜像中默认已安装,不过 X-Pack 中的 Security 模块需要付费才能使用,所以弃用这个插件。

社区插件 Readonly REST

Readonly REST 是 Elasticsearch 原生 REST API 的高性能权限控制插件。

构建带 readonlyrest 插件的 Elasticsearch 镜像

1、下载合适版本的 readonlyrest 插件 => https://readonlyrest.com/download/

注意:下载地址会发送到你的邮箱

2、编辑 Dockerfile,此处注意修改 readonlyrest 版本号

FROM elasticsearch:6.6.1

ADD readonlyrest-1.17.0_es6.6.1.zip /plugins

RUN sh -c 'echo -e "y" | /usr/share/elasticsearch/bin/elasticsearch-plugin install file:///plugins/readonlyrest-1.17.0_es6.6.1.zip'

3、构建镜像

docker build -t elasticsearch:security-6.6.1 .

部署 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 的配置文件 /data/elasticsearch-config/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 /data/elasticsearch-config/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.1

验证权限

1、不使用账号密码请求 API,请求失败

$ curl 127.0.0.1:9200/_cat/nodes?v
{"error":{"root_cause":[{"reason":"forbidden"}],"reason":"forbidden"},"status":401}

2、使用账号密码请求 API,请求成功

$ curl -u admin:Passw0rd 127.0.0.1:9200/_cat/nodes?v
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.1
评论

评论

昵称
邮箱