Elasticsearch:保护你的 Elasticsearch 实例 - 如何使用带有内置证书的 Docker 镜像

news2024/9/25 3:19:01

使用 docker 来构建 Elasticsearch 集群为开发者们带来了极大的方便。在我之前的文章中:

  • Elasticsearch:使用 Docker compose 来一键部署 Elastic Stack 8.x

  • Elasticsearch:如何在 Docker 上运行 Elasticsearch 8.x 进行本地开发

  • Elastic:使用 docker 来安装 Elastic Stack 8.0

我详细地描述了如何使用 Elastic 所提供的 docker 镜像来安装 Elasticsearch。在今天的文章中,我来详述如何来构建一个带有安全配置的 docker 镜像。希望这对你的开发有帮助。

Elasticsearch 是一个功能强大且流行的搜索引擎,被许多公司所使用。 但是,如果 Elasticsearch 实例没有得到适当的保护,它们可能容易受到安全威胁。 确保 Elasticsearch 实例安全的一种方法是使用证书。 在本文中,我们将讨论如何使用带有证书的 Elasticsearch Docker Image 来保护您的 Elasticsearch 实例。

第 1 部分:使用证书设置 Elasticsearch

首先,我们将使用已经包含证书的 Elasticsearch Docker 镜像。 我们将使用的 Docker Image 是最新的 Elasticsearch 8.6.2 版本,它预装了 Elasticsearch-certutil 工具。 该工具使我们能够为我们的 Elasticsearch 实例创建证书。

创建 Dockerfile:

我们使用如下的代码来创建一个 Dockerfile:

Dockerfile

FROM docker.elastic.co/elasticsearch/elasticsearch:8.6.2
RUN bin/elasticsearch-certutil ca --out config/elastic-stack-ca.p12 --pass ""
RUN bin/elasticsearch-certutil cert --pass "" --days 1825 --ca config/elastic-stack-ca.p12 --ca-pass "" --out config/elastic-certificates.p12
$ pwd
/Users/liuxg/data/sec_elasticsearch
$ ls
Dockerfile

构建 Docker 镜像

我们使用如下的命令来构建 Docker 镜像:

docker build -t elasticsearch-with-certs .

我们可以打开 Docker Desktop 来进行查看:

 

我们创建了一个名字称作为 elasticsearch-with-certs 的镜像。

运行 Docker 容器 

我们使用如下的命令来启动 docker 容器:

docker run -p 9200:9200 -p 9300:9300 -it --name elasticsearch elasticsearch-with-certs

在启动的过程中,我们可以看到 elastic 用户的密码及其他信息:

 我们可以通过如下的命令来查看正在运行的容器:

docker ps
$ docker ps
CONTAINER ID   IMAGE                      COMMAND                  CREATED              STATUS              PORTS                                            NAMES
2dbc39f48668   elasticsearch-with-certs   "/bin/tini -- /usr/l…"   About a minute ago   Up About a minute   0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp   elasticsearch

我们可以通过如下的命令来查看 elasticsearch 容器的日志信息:

docker logs -f elasticsearch

这个命令也可以让我们查看到 elastic 用户的密码:

 

在浏览器中验证 Elasticsearch 的运行

我们在 浏览器中输入 https://localhost:9200,并以上面所提供的 elastic 用户密码进行登录:

显然我们的登录是成功的。我们也可以使用如下的命令来进行验证:

curl -k -u elastic:v35KytDBs_2BLB4NSz2B https://localhost:9200
$ curl -k -u elastic:v35KytDBs_2BLB4NSz2B https://localhost:9200
{
  "name" : "2dbc39f48668",
  "cluster_name" : "docker-cluster",
  "cluster_uuid" : "4WtDSp8AQROd3lxNGjkEiQ",
  "version" : {
    "number" : "8.3.3",
    "build_flavor" : "default",
    "build_type" : "docker",
    "build_hash" : "801fed82df74dbe537f89b71b098ccaff88d2c56",
    "build_date" : "2022-07-23T19:30:09.227964828Z",
    "build_snapshot" : false,
    "lucene_version" : "9.2.0",
    "minimum_wire_compatibility_version" : "7.17.0",
    "minimum_index_compatibility_version" : "7.0.0"
  },
  "tagline" : "You Know, for Search"
}

请注意:针对你的情况,你需要修改上面的 elastic 用户密码进行验证。

现在我们已经启动并运行了带有证书的 Elasticsearch 实例,让我们更深入地了解证书的工作原理以及为什么它们对 Elasticsearch 安全很重要。

证书是验证服务器或客户端身份的数字文档。 在 Elasticsearch 中,证书用于在客户端和 Elasticsearch 集群之间建立安全连接。 通过使用证书,我们可以保证客户端和 Elasticsearch 集群之间传输的数据是加密的和安全的。

第 2 部分:了解 Elasticsearch 证书

证书在保护 Elasticsearch 实例方面起着至关重要的作用。 在本节中,我们将讨论与 Elasticsearch 证书相关的一些关键概念。

  • 证书颁发机构 (CA):证书颁发机构负责颁发和管理证书。 在 Elasticsearch 中,我们使用 CA 创建根证书,用于签署和验证其他证书。
  • 根证书:根证书是验证服务器或客户端身份的数字文档。 在 Elasticsearch 中,我们使用根证书在客户端和 Elasticsearch 集群之间建立信任。
  • 服务器证书:服务器证书是验证 Elasticsearch 节点身份的数字文档。 在 Elasticsearch 中,我们使用服务器证书在客户端和 Elasticsearch 集群之间建立安全连接。
  • 客户端证书:客户端证书是一种数字文档,用于验证连接到 Elasticsearch 集群的客户端的身份。 在 Elasticsearch 中,我们使用客户端证书在客户端和 Elasticsearch 集群之间建立安全连接。

第 3 部分:创建 Elasticsearch 证书

现在我们了解了与 Elasticsearch 证书相关的关键概念,让我们使用 Elasticsearch-certutil 工具创建我们自己的证书。

创建 CA 证书

第一步是通过运行以下命令创建 CA 证书:

bin/elasticsearch-certutil ca --out config/elastic-stack-ca.p12 --pass "”

此命令在 config/elastic-stack-ca.p12 文件中创建一个 CA 证书。 --pass 标志用于为 CA 证书指定空密码。 不建议在生产环境中这样做,但在测试和开发环境中是可以接受的。

创建服务器及客户端证书

下一步是通过运行以下命令创建服务器和客户端证书:

bin/elasticsearch-certutil cert --pass "" --days 1825 --ca config/elastic-stack-ca.p12 --ca-pass "" --out config/elastic-certificates.p12

此命令创建两个证书:服务器证书和客户端证书。 --days 标志用于指定证书的有效期,设置为1825天(5年)。 --ca 标志用于指定 CA 证书文件的位置,--ca-pass 标志用于指定 CA 证书的密码。 最后,--out 标志用于指定包含服务器和客户端证书的输出文件的位置和名称。

第 4 部分:将 Elasticsearch 与证书结合使用

现在我们已经创建了我们的证书,我们可以使用它们来保护我们的 Elasticsearch 实例。 要使用证书,我们需要配置 Elasticsearch 以使用它们。 这可以通过将以下行添加到 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: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12

xpack.security.transport.ssl.enabled 设置启用 Elasticsearch 中的安全功能,xpack.security.transport.ssl.enabled 设置启用传输层通信的 SSL/TLS 加密。

xpack.security.transport.ssl.verification_mode 设置指定 Elasticsearch 应验证客户端提供的证书。 xpack.security.transport.ssl.keystore.path 设置指定服务器证书的位置,xpack.security.transport.ssl.truststore.path 设置指定 CA 证书的位置。

我们可以通过如下的命令登录正在运行的 Elasticsearch 容器,并查看 elasticsearch.yml 文件:

$ docker ps
CONTAINER ID   IMAGE                      COMMAND                  CREATED          STATUS          PORTS                                            NAMES
2dbc39f48668   elasticsearch-with-certs   "/bin/tini -- /usr/l…"   22 minutes ago   Up 22 minutes   0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp   elasticsearch
$ docker exec -it elasticsearch /bin/bash
elasticsearch@2dbc39f48668:~$ pwd
/usr/share/elasticsearch
elasticsearch@2dbc39f48668:~$ cat config/elasticsearch.yml 
cluster.name: "docker-cluster"
network.host: 0.0.0.0

#----------------------- BEGIN SECURITY AUTO CONFIGURATION -----------------------
#
# The following settings, TLS certificates, and keys have been automatically      
# generated to configure Elasticsearch security features on 27-02-2023 05:34:22
#
# --------------------------------------------------------------------------------

# Enable security features
xpack.security.enabled: true

xpack.security.enrollment.enabled: true

# Enable encryption for HTTP API client connections, such as Kibana, Logstash, and Agents
xpack.security.http.ssl:
  enabled: true
  keystore.path: certs/http.p12

# Enable encryption and mutual authentication between cluster nodes
xpack.security.transport.ssl:
  enabled: true
  verification_mode: certificate
  keystore.path: certs/transport.p12
  truststore.path: certs/transport.p12
# Create a new cluster with the current node only
# Additional nodes can still join the cluster later
cluster.initial_master_nodes: ["2dbc39f48668"]

#----------------------- END SECURITY AUTO CONFIGURATION -------------------------

你也可以直接使用如下的命令来进行查看:

$ docker ps
CONTAINER ID   IMAGE                      COMMAND                  CREATED          STATUS          PORTS                                            NAMES
2dbc39f48668   elasticsearch-with-certs   "/bin/tini -- /usr/l…"   26 minutes ago   Up 25 minutes   0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp   elasticsearch
$ docker exec elasticsearch cat /usr/share/elasticsearch/config/elasticsearch.yml
cluster.name: "docker-cluster"
network.host: 0.0.0.0

#----------------------- BEGIN SECURITY AUTO CONFIGURATION -----------------------
#
# The following settings, TLS certificates, and keys have been automatically      
# generated to configure Elasticsearch security features on 27-02-2023 05:34:22
#
# --------------------------------------------------------------------------------

# Enable security features
xpack.security.enabled: true

xpack.security.enrollment.enabled: true

# Enable encryption for HTTP API client connections, such as Kibana, Logstash, and Agents
xpack.security.http.ssl:
  enabled: true
  keystore.path: certs/http.p12

# Enable encryption and mutual authentication between cluster nodes
xpack.security.transport.ssl:
  enabled: true
  verification_mode: certificate
  keystore.path: certs/transport.p12
  truststore.path: certs/transport.p12
# Create a new cluster with the current node only
# Additional nodes can still join the cluster later
cluster.initial_master_nodes: ["2dbc39f48668"]

#----------------------- END SECURITY AUTO CONFIGURATION -------------------------

结论

Elasticsearch 是一个强大的搜索引擎,被许多公司广泛使用。 但是,保护 Elasticsearch 实例以防止安全威胁非常重要。 通过使用带有证书的 Elasticsearch Docker Image,我们可以轻松地保护我们的 Elasticsearch 实例。 证书在保护 Elasticsearch 实例方面起着至关重要的作用,我们已经讨论了与 Elasticsearch 证书相关的一些关键概念。 我们还介绍了如何使用 elasticsearch-certutil 工具创建证书以及如何使用它们来保护我们的 Elasticsearch 实例。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/376614.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaSE-线程池(5)- ThreadPoolExecutor常用方法

JavaSE-线程池(5)- ThreadPoolExecutor常用方法 invokeAll ExecutorService 接口中定义的方法,给定一组任务,在所有任务执行完成时返回一个 Futures 列表,其中包含它们的状态和结果。 /*** Executes the given task…

Java基础:常见API(Math,System,Runtime,Object,BigInteger,BigDecima)

1.常见API 1.1 Math类 向上取整是向着数轴右边走的意思, 负数也是. 也可以叫进一法, 不论正数负数都会往右走一. 向下取整是向着数轴左边走. 也可以叫去尾法, 不论正负数都会将小数点后的数字去掉. 1.1.2 练习 // 判断有多少水仙花数int count 0;for (int i 100; i < 1…

代码随想录算法训练营九期第十三天 | 239. 滑动窗口最大值、347.前 K 个高频元素、总结

打卡第十三天&#xff0c;昨天休息&#xff0c;今天继续栈和队列&#xff0c;重新复习了单调队列&#xff0c;上次看ACwing的视频学了单调队列&#xff0c;没有完全学明白&#xff0c;重学之后比之前清晰多了 今日任务 滑动窗口最大值 347.前 K 个高频元素总结 239. 滑动窗口最…

【Ap AutoSAR入门与实战开发02】-【Ap_s2s模块01】: s2s的背景

总目录链接==>> AutoSAR入门和实战系列总目录 文章目录 1 s2s的背景?2 AUTOSAR 方法应支持车辆的无缝开发2.1 面向服务的ECU的解读2.2 面向信号的ECU的解读2.3 通过网关ECU实现转换1 s2s的背景? Cp AutoSAR基于传统的can,lin,flexray总线的通信,一般是面向信号设…

汽车网络安全需求分析方法综述

引言&#xff1a; 近年来&#xff0c;汽车的网络安全问题逐渐被重视&#xff0c;在汽车产品的全生命周期中&#xff0c;需要进行网络安全风险管理&#xff0c;其主要活动包括网络安全需求分析、安全策略设计与实施、运营阶段安全监控与应急响应等。 安全需求分析工作作为系统安…

信息安全概论之《密码编码学与网络安全----原理与实践(第八版)》

前言&#xff1a;在信息安全概论课程的学习中&#xff0c;参考了《密码编码学与网络安全----原理与实践&#xff08;第八版&#xff09;》一书。以下内容为以课件为主要参考&#xff0c;课本内容与网络资源为辅助参考&#xff0c;学习该课程后作出的总结。 一、信息安全概述 1…

【蓝桥杯集训9】单调栈、单调队列(模拟栈、模拟队列)专题(3 / 3)

目录 单调栈模板 1、模拟栈 单调队列模板 1、模拟队列 2、双端队列 135. 最大子序和 - 前缀和滑动窗口单调队列 单调栈模板 什么时候用单调栈&#xff1f; 求序列中每一个数左边或右边第一个比它大或小的数 1、单调递增栈 在保持栈内元素单调递增前提下&#xff08;如果…

Redis 主从库如何实现数据一致?

目录 1、主从库间如何进行第一次同步&#xff1f; 2、主从级联模式分担全量复制时的主库压力 3、主从库间网络断了怎么办&#xff1f; 总结 // 好的文章&#xff0c;值得反复去读 Redis 具有高可靠性&#xff0c;这里有两层含义&#xff1a;一是数据尽量少丢失&#xff0c;…

2023JAVA面试题全集超全面超系统超实用!早做准备早上岸

2022年我凭借一份《Java面试核心知识点》成功拿下了阿里、字节、小米等大厂的offer&#xff0c;两年的时间&#xff0c;为了完成我给自己立的flag&#xff08;拿下一线互联网企业offer大满贯&#xff09;&#xff0c;即使在职也一直在不断的学习与备战面试中&#xff01;——或…

【Spark分布式内存计算框架——Spark Streaming】6. DStream(下)流式应用状态 Kafka

3.3 流式应用状态 使用SparkStreaming处理实际实时应用业务时&#xff0c;针对不同业务需求&#xff0c;需要使用不同的函数。SparkStreaming流式计算框架&#xff0c;针对具体业务主要分为三类&#xff0c;使用不同函数进行处理&#xff1a; 业务一&#xff1a;无状态Statel…

【数电基础】——数制和码制

目录 1.概述 1.信号&#xff08;电路&#xff09;的功能 2.信号的分类&#xff1a; 3.数字信号的输入和输出的逻辑关系表示方法 2.数制 1.十进制&#xff08;D/d&#xff09; 2.二进制(B/b) 3.八进制&#xff08;O/o&#xff09; 4.十六进制&#xff08;H/h&#xff09;…

使用huggingface微调预训练模型

官方教程&#xff1a;https://huggingface.co/docs/transformers/training 准备数据集&#xff08;基于datasets库&#xff09; train.json 数据格式&#xff1a; {"source":"你是谁&#xff1f;", "target":"我是恁爹"} {"so…

FSP:Flow of Solution Procedure (CVPR 2017) 原理与代码解析

paper&#xff1a;A Gift From Knowledge Distillation: Fast Optimization, Network Minimization and Transfer Learningcode&#xff1a;https://github.com/HobbitLong/RepDistiller/blob/master/distiller_zoo/FSP.py背景深度神经网络DNN逐层生成特征。更高层的特征更接近…

内存数据库的设计与实现(已在大型项目中应用)

一、概况 1、设计总图 组成,由Redis集群缓存,普通缓存,传统数据库,各类数据驱动 2、内存数据库的增删改查,分页查询 组成,由数据查询,分页查询,数据存储,数据修改,数据删除 3、内存数据库的驱动 组成,由驱动适配器,普通缓存驱动,Redis缓存驱动 4、内存数据库与…

C++常见类型及占用内存表

GPS生产厂家在定义数据的时候都会有一定的数据类型&#xff0c;例如double、int、float等&#xff0c;我们知道它们在内存中都对应了一定的字节大小&#xff0c;而我在实际使用时涉及到了端序的问题&#xff08;大端序高字节在前&#xff0c;小端序低字节在前&#xff09;&…

redis主从同步:如何实现数据一致

Redis 提供了主从库模式&#xff0c;以保证数据副本的一致&#xff0c;主从库之间采用的是读写分离的方式。读操作&#xff1a;主库、从库都可以接收&#xff1b;写操作&#xff1a;首先到主库执行&#xff0c;然后&#xff0c;主库将写操作同步给从库。和mysql差不多。但是同步…

自动驾驶专题介绍 ———— 毫米波雷达

文章目录介绍工作原理特点性能参数应用厂家介绍 毫米波雷达是工作在毫米波波段探测的雷达&#xff0c;与普通雷达相似&#xff0c;是通过发射无线电信号并接收反射信号来测量物体间的距离。毫米波雷达工作频率为30~300GHz(波长为1 - 10mm)&#xff0c;波长介于厘米波和光波之间…

【数据挖掘实战】——家用电器用户行为分析及事件识别(BP神经网络)

项目地址&#xff1a;Datamining_project: 数据挖掘实战项目代码 目录 一、背景和挖掘目标 1、问题背景 2、原始数据 3、挖掘目标 二、分析方法与过程 1、初步分析 2、总体流程 第一步&#xff1a;数据抽取 第二步&#xff1a;探索分析 第三步&#xff1a;数据的预处…

为什么负责任的技术始于数据治理

每个组织都处理数据&#xff0c;但并非每个组织都将其数据用作业务资产。但是&#xff0c;随着数据继续呈指数级增长&#xff0c;将数据视为业务资产正在成为竞争优势。 埃森哲的一项研究发现&#xff0c;只有 33% 的公司“足够信任他们的数据&#xff0c;能够有效地使用它并从…

色环电阻的阻值如何识别

这种是色环电阻&#xff0c;其外表有一圈圈不同颜色的色环&#xff0c;现在在一些电器和电源电路中还有使用。下面的两种色环电阻它颜色还不一样&#xff0c;一个蓝色&#xff0c;一个土黄色&#xff0c;其实这个蓝色的属于金属膜色环电阻&#xff0c;外表涂的是一层金属膜&…