4. Set up X-Pack(安装 X-Pack)

本贴最后更新于 2567 天前,其中的信息可能已经水流花落

该章节部分内容直接从谷歌翻译而来(比如 gold 版本的 x-pack 安装以及机器学习相关内容)

Set up X-Pack(安装 X-Pack)

X-Pack 是一个 Elastic Stack 扩展插件,将安全性,警报,监控,报告,机器学习和图形功能捆绑到一个易于安装的软件包中。要访问此功能,您必须 在 Elasticsearch 中安装 X-Pack

在 Elasticsearch 中安装 X-Pack

安装 Elasticsearch 之后,您可以选择获取并安装 X-Pack。有关如何获取 X-Pack 的更多信息,请参阅 https://www.elastic.co/products/x-pack

您必须安装与您正在运行的 Elasticsearch 版本相匹配的 X-Pack 版本。 有关产品兼容性的更多信息,请参阅 Elastic Support Matrix

如果您是在现有群集上首次安装 X-Pack,则必须集重启整个集群。安装 X-Pack 后,必须在集群中的所有节点上启用安全插件才能使群集正常运行。当需要升级时,通常可以执行滚动升级 rolling upgrade

下图概述了在 Elasticsearch 上设置 X-Pack 所需的步骤:

要在 Elasticsearch 中安装 X-Pack:

  1. 可选:如果您想在没有互联网访问权限的机器上安装 X-Pack:

    a. 手动下载 X-Pack zip 文件:https://artifacts.elastic.co/downloads/packs/x-pack/x-pack-6.0.1.zip

    b. 将 zip 文件传输到脱机机器上的临时目录。(不要将文件放在 Elasticsearch 插件目录中。)


Elasticsearch,Kibana 和 Logstash 的插件包含在同一个 zip 文件中。如果您已下载此文件以在其中一个其他产品上安装 X-Pack,则可以重复使用相同的文件。

  1. 在每个节点下的 ES_HOME 目录下都执行该命令 bin/elasticsearch-plugin install ,如
bin/elasticsearch-plugin install x-pack

如果您正在使用 Elasticsearch 的 DEB/RPM 安装包,请以超级用户权限运行安装。

插件安装脚本需要直接访问互联网来下载和安装 X-Pack。如果您的服务器无法访问 Internet,请指定您下载到临时目录的 X-Pack zip 文件的位置。

你必须在 protocol 后指定一个绝对路径到你的安装包目录

  1. 确认您要授予 X-Pack 额外的权限。

指定--batch 参数,运行 install 命令时指定该选项以自动授予这些权限并绕过这些安装提示

a. X-Pack 需要这些权限才能在安装期间设置线程上下文加载器,以便 Watcher 可以发送电子邮件通知

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@     WARNING: plugin requires additional permissions     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
* java.lang.RuntimePermission accessClassInPackage.com.sun.activation.registries
* java.lang.RuntimePermission getClassLoader
* java.lang.RuntimePermission setContextClassLoader
* java.lang.RuntimePermission setFactory
* java.security.SecurityPermission createPolicy.JavaPolicy
* java.security.SecurityPermission getPolicy
* java.security.SecurityPermission putProviderProperty.BC
* java.security.SecurityPermission setPolicy
* java.util.PropertyPermission * read,write
* java.util.PropertyPermission sun.nio.ch.bugLevel write
* javax.net.ssl.SSLPermission setHostnameVerifier
See http://docs.oracle.com/javase/8/docs/technotes/guides/security/permissions.html
for descriptions of what these permissions allow and the associated risks.

Continue with installation? [y/N]y

b. X-Pack 需要权限才能使 Elasticsearch 启动机器学习分析引擎。本地控制器确保启动的进程是有效的机器学习组件。一旦启动,机器学习过程和 Elasticsearch 之间的通信就限制在 Elasticsearch 所运行的操作系统用户身上。

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@        WARNING: plugin forks a native controller        @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
This plugin launches a native controller that is not subject to
the Java security manager nor to system call filters.

Continue with installation? [y/N]y
  1. X-Pack 将尝试在 Elasticsearch 中自动创建一些索引。默认情况下,Elasticsearch 被配置为允许自动创建索引,不需要额外的步骤。但是,如果你有 Elasticsearch 禁用自动创建索引,你必须配置 action.auto_create_index 的 elasticsearch.yml,让 X-包创建以下索引:
action.auto_create_index: .security,.monitoring*,.watches,.triggered_watches,.watcher-history*,.ml*

如果您正在使用 Logstash 或 Beats,那么在您的 action.auto_create_index 设置中,您很可能需要额外的索引名称,具体值取决于您的本地配置。如果您不确定当前环境的具体索引值,则可以考虑设置 * 以允许可以自动创建所有索引

  1. 配置密码和 SSL / TLS。

a. 如果您有非试用版许可证,并且想要使用 X-Pack 安全性,则必须配置 SSL / TLS 以进行节点间通信。

此要求适用于具有多个节点的群集,并与具有在外部接口上侦听的单个节点群集。使用回送接口的单节点群集不具备此要求。有关更多信息,请参阅 加密通信

i. 生成节点证书。例如,您可以使用 certgen 命令行工具生成证书颁发机构并为您的节点签名证书。

bin/x-pack/certgen

此命令会为您指定的每个节点生成一个包含 CA 证书,私钥以及 PEM 格式的签名证书和密钥的 zip 文件。如果要使用商业或组织特定的 CA,则可以使用该 -csr 参数为集群中的节点生成证书签名请求(CSR)。有关更多信息,请参阅 certgen

ii. 将证书数据复制到 Elasticsearch 配置目录中的一个目录中。例如

/home/es/config/certs

iii. 将以下信息添加到 elasticsearch.yml 所有节点上:

xpack.ssl.key:certs / $ {node.name} / $ {node.name} .key 
xpack.ssl.certificate:certs / $ {node.name} / $ {node.name} .crt 
xpack.ssl.certificate_authorities:certs / ca /​​ ca.crt 
xpack.security.transport.ssl.enabled:true

b. 启动 Elasticsearch

bin/ elasticsearch

c. 设置所有内置用户的密码。该 setup-passwords 命令是第一次设置内置用户密码的最简单的方法。

例如,您可以运行在“互动”模式下的命令,它会提示您为输入新的密码 elastic,kibana 和 logstash_system 用户:

bin/x-pack/setup-passwords interactive

有关该命令选项的更多信息,请参阅 setup-passwords

该 setup-passwords 命令使用临时引导程序密码,该命令在命令成功运行后不再有效。您不能 setup-passwords 再次运行该 命令。相反,您可以从 Kibana 中的管理 > 用户 UI 更新密码或使用安全用户 API。

了解更多信息,请参阅 Setting Built-in User Password

  1. 可选的,配置 Java 客户端
  2. 在 Kibana 中安装 X-Pack
    8.在 Logstash 中安装 X-Pack

在 DEB / RPM 软件包安装上安装 X-Pack

如果使用 DEB / RPM 软件包来安装 Elasticsearch,默认情况下会安装 Elasticsearch /usr/share/elasticsearch 并将配置文件存储在其中/etc/elasticsearch。(有关默认路径的完整列表,请参阅 Elasticsearch 参考中的 Debian 目录布局和 RPM 目录布局。)

要在 DEB / RPM 软件包安装上安装 X-Pack,您需要以超级用户权限运行 bin/plugin install 该/usr/share/elasticsearch 目录:

cd / usr / share / elasticsearch 
sudo bin / elasticsearch-plugin install x-pack

如果配置文件不在/etc/elasticsearch 你需要通过设置环境变量来指定配置文件的位置 ES_PATH_CONF 通过 ES_PATH_CONF=

Elasticsearch 中设置 X-Pack

你可以在 elasticsearch.yml, kibana.yml 以及 logstash.yml 中对 X-Pack 相关功能进行配置

X-Pack 功能 Elasticsearch 设置 Kibana 设置 Logstash 设置
Development Tools No Yes No
Graph No Yes No
Machine learning YES Yes No
Management No NO YES
Monitoring No Yes YES
Reporting No Yes No
Security YES Yes No
Watcher YES NO No

Elasticsearch 中的机器学习设置

您不需要配置任何设置以使用机器学习。它是默认启用的。

一般机器学习设置
  • node.ml

设置为 true(默认)将节点标识为机器学习节点。

如果设置为 falsein elasticsearch.yml,则节点不能运行作业。如果设置为, true 但 xpack.ml.enabled 设置为 false,node.ml 则忽略该设置,节点不能运行作业。如果您想运行作业,则群集中必须至少有一个机器学习节点。

在专用协调节点或专用主节点上,禁用 node.ml 角色。

  • xpack.ml.enabled

设置为 true(默认)以在节点上启用机器学习。

如果设置为 falsein elasticsearch.yml,则节点上禁用机器学习 API。因此,节点不能打开作业,启动数据传送,或接收与机器学习 API 相关的传输(内部)通信请求。它也影响连接到这个 Elasticsearch 实例的所有 Kibana 实例; 您不需要在这些 kibana.yml 文件中禁用机器学习 。有关在特定 Kibana 实例中禁用机器学习的更多信息,请参阅 Kibana 机器学习设置

如果你想使用集群中的机器学习功能,您必须 xpack.ml.enabled 设置为 true 所有主资格的节点上。这是默认行为。

  • xpack.ml.max_open_jobs

可以在节点上运行的最大作业数。默认为 10。

  • xpack.ml.max_model_memory_limit

model_memory_limit 可以为此节点上的任何作业设置 的最大属性值。如果尝试创建一个 model_memory_limit 属性值大于此设置值的作业,则会发生错误。更新此设置时,现有作业不受影响。有关该 model_memory_limit 属性的更多信息 ,请参阅分析限制

Elasticsearch 中的监控设置

安装 X-Pack 时默认启用监视。您可以在 elasticsearch.yml 文件中配置这些监控设置。

要调整的监测数据如何显示在监控界面,配置 xpack.monitoring 设置中 kibana.yml。要控制如何监控数据从收集 Logstash,配置 xpack.monitoring 设置 在 logstash.yml。

有关更多信息,请参阅 监视弹性堆栈。

一般监测设置
  • xpack.monitoring.enabled

设置为 false 禁用节点上的 Elasticsearch 的 Elasticsearch X-Pack 监视。

监视收集设置

这些 xpack.monitoring.collection 设置控制如何从 Elasticsearch 节点收集数据。

  • xpack.monitoring.collection.cluster.stats.timeout

设置收集集群统计信息的超时时间。默认为 10s。

  • xpack.monitoring.collection.indices
    控制 Monitoring 从哪个指标收集数据。默认为所有的索引。例如,将索引名称指定为以逗号分隔的列表 test1,test2,test3。例如,名称可以包含通配符 test*。您可以通过预先 + 包含索引或排除索引来显式包含或排除 -索引。例如,要包含以 testexcept 开头的所有索引,test3 可以指定 +test*,-test3

您可以通过群集更新设置 API 更新此设置。

  • xpack.monitoring.collection.index.stats.timeout

设置收集索引统计信息的超时时间。默认为 10s。

  • xpack.monitoring.collection.indices.stats.timeout

设置收集总索引统计信息的超时时间。默认为 10s。

  • xpack.monitoring.collection.index.recovery.active_only

控制是否收集所有的回收率。设置为 true 仅收集主动恢复。默认为 false。

  • xpack.monitoring.collection.index.recovery.timeout

设置收集恢复信息的超时时间。默认为 10s。

  • xpack.monitoring.collection.interval

控制收集数据样本的频率。默认为 10s。如果修改收集时间间隔,请将该 xpack.monitoring.min_interval_seconds 选项设置 kibana.yml 为相同的值。设置为-1 暂时禁用数据收集。您可以通过群集更新设置 API 更新此设置。

  • xpack.monitoring.history.duration

设置保留持续时间,自动删除由监控导出器创建的索引。默认为 7d(7 天)。

此设置的最小值为 1d(1 天),以确保某些内容正在被监视,并且不能被禁用。

此设置目前仅影响 local-type 出口商。使用 http 导出器创建的索引不会被自动删除。

如果同时启用了 X-Pack 监视和 Watcher,则可以使用此设置来影响 Watcher 清除程序服务。有关更多信息,请参阅 观察器设置 xpack.watcher.history.cleaner_service.enabled 中的 设置。

  • xpack.monitoring.exporters

配置代理程序存储监视数据的位置。默认情况下,代理程序使用本地导出程序对安装它的群集上的监视数据建立索引。使用 HTTP 导出器将数据发送到单独的监视群集。有关更多信息,请参阅本地导出程序设置, HTTP 导出程序设置以及 设置单独的监视群集。

本地导出器设置

该 local 出口是通过监控使用的默认出口国。正如名字所暗示的,它将数据导出到本地集群,这意味着没有太多需要配置。

如果您不提供任何出口商,那么监控将自动为您创建一个。如果提供任何出口商,则不添加默认值。

xpack.monitoring.exporters.my_local:
  type: local
  • type

本地出口商的价值必须始终 local 是必需的。

  • use_ingest

是否为每个批量请求提供一个占位符管道到集群和一个流水线处理器。默认值是 true。如果禁用,则表示不会使用管道,这意味着将来的版本不能自动将批量请求升级到未来的版本。

  • cluster_alerts.management.enabled

是否为此群集创建群集警报。默认值是 true。要使用此功能,必须启用 Watcher。如果您拥有基本许可证,则不会显示群集警报。

HTTP 导出器设置

以下列出了 http 导出器可以提供的设置。所有设置都显示为您为导出器选择的名称。

xpack.monitoring.exporters.my_remote:
  type: http
  host: ["host:port", ...]
  • type

HTTP 导出器的值必须始终 http 为必需值。

  • host

主机支持多种格式,既可以是数组也可以是单个值。支持的格式包括 hostname,hostname:port,http://hostname http://hostname:port,https://hostname,和 https://hostname:port。主持人不能被假定。默认方案是始终的 http,默认端口总是 9200 作为 host 字符串的一部分提供。

xpack.monitoring.exporters:
  xpack.monitoring.exporters:
  example1:
    type: http
    host: "10.1.2.3"
  example2:
    type: http
    host: ["http://10.1.2.4"]
  example3:
    type: http
    host: ["10.1.2.5", "10.1.2.6"]
  example4:
    type: http
    host: ["https://10.1.2.3:9200"]
  • auth.username

如果 auth.password 提供了 a,则用户名是必需的。

  • auth.password

密码为 auth.username

  • connection.timeout

HTTP 连接应等待请求打开套接字的时间量。默认值是 6s。

  • connection.read_timeout

HTTP 连接应该等待套接字发回响应的时间量。默认值是 10 * connection.timeout(60s 如果都没有设置)

  • ssl

每个 HTTP 导出器都可以定义自己的 TLS / SSL 设置或继承它们。请参阅下面的 TLS / SSL 部分

  • proxy.base_path

以任何传出请求为前缀的基本路径/base/path(例如批量请求将作为发送/base/path/_bulk)。没有默认值。

  • headers

可选标题添加到每个请求,这可以协助通过代理路由请求。

xpack.monitoring.exporters.my_remote:
  标题:
    X-My-Array:[abc,def,xyz]
    X-My-Header:abc123

数组的大小发送 n 时间 n 是数组的大小。Content-Type 并且 Content-Length 不能设置。监控代理创建的任何头将覆盖此处定义的任何内容。

  • index.name.time_format

默认情况下,每天更改默认日期后缀的机制。默认值是 YYYY.MM.DD,这就是每天创建

  • use_ingest

是否为每个批量请求提供一个占位符管道到监视群集和一个流水线处理器。默认值是 true。如果禁用,则表示不会使用管道,这意味着将来的版本不能自动将批量请求升级到未来的版本。

  • cluster_alerts.management.enabled

是否为此群集创建群集警报。默认值是 true。要使用此功能,必须启用 Watcher。如果您拥有基本许可证,则不会显示群集警报。

X-Pack 监视 TLS / SSL 设置

您可以配置以下 TLS / SSL 设置。如果未配置设置, 则使用默认 TLS / SSL 设置

  • xpack.monitoring.exporters.$NAME.ssl.supported_protocols

受版本支持的协议。有效协议:SSLv2Hello, SSLv3,TLSv1,TLSv1.1,TLSv1.2。默认为 TLSv1.2,TLSv1.1, TLSv1。默认值为 xpack.ssl.supported_protocols

  • xpack.monitoring.exporters.$NAME.ssl.verification_mode

控制证书的验证。有效值是 none, certificate 和 full。默认值为 xpack.ssl.verification_mode。

  • xpack.monitoring.exporters.$NAME.ssl.cipher_suites

支持的密码套件可以在 Oracle 的 Java 密码体系结构文档中找到。默认值为 xpack.ssl.cipher_suite

X-Pack 监视 TLS / SSL 密钥和可信证书设置

以下设置用于指定在通过 SSL / TLS 连接进行通信时应使用的私钥,证书和可信证书。如果未指定下面的任何设置,则使用默认的 TLS / SSL 设置。私钥和证书是可选的,如果服务器需要 PKI 身份验证的客户端身份验证,将使用它。如果未指定下面的任何设置,则使用默认的 TLS / SSL 设置。

PEM 编码的文件

使用 PEM 编码文件时,请使用以下设置:

  • xpack.monitoring.exporters.$NAME.ssl.key

包含私钥的 PEM 编码文件的路径。

  • xpack.monitoring.exporters.$NAME.ssl.key_passphrase

用于解密私钥的密码。这个值是可选的,因为密钥可能没有被加密。

  • xpack.monitoring.exporters.$NAME.ssl.secure_key_passphrase(安全)

用于解密私钥的密码。这个值是可选的,因为密钥可能没有被加密

  • xpack.monitoring.exporters.$NAME.ssl.certificate

包含证书(或证书链)的 PEM 编码文件的路径,在请求时将显示该文件

  • xpack.monitoring.exporters.$NAME.ssl.certificate_authorities

应该信任的 PEM 编码证书文件的路径列表

Java 密钥库文件

使用包含专用密钥,证书和应该信任的证书的 Java 密钥库文件(JKS)时,请使用以下设置:

  • xpack.monitoring.exporters.$NAME.ssl.keystore.path
    保存私钥和证书的密钥库的路径
  • xpack.monitoring.exporters.$NAME.ssl.keystore.password
    密码到密钥库
  • xpack.monitoring.exporters。$ NAME.ssl.keystore.secure_password
    密码到密钥库
  • xpack.monitoring.exporters.$NAME.ssl.keystore.key_password
    密钥库中的私钥密码。默认值为 xpack.monitoring.exporters.$NAME.ssl.keystore.password
  • xpack.monitoring.exporters.$NAME.ssl.keystore.secure_key_password
    密钥库中的私钥密码
  • xpack.monitoring.exporters.$NAME.ssl.truststore.path
    信任库文件的路径
  • xpack.monitoring.exporters.$NAME.ssl.truststore.password
    密码到信任库
  • xpack.monitoring.exporters.$NAME.ssl.truststore.secure_password
    密码到信任库
PKCS#12 文件

可以将 X-Pack 安全性配置为使用包含应该信任的私钥,证书和证书的 PKCS#12 容器文件(.p12 或.pfx 文件)

PKCS#12 文件的配置方式与 Java 密钥库文件相同:

  • xpack.monitoring.exporters.$NAME.ssl.keystore.pat
    保存私钥和证书的 PKCS#12 文件的路径
  • xpack.monitoring.exporters.$NAME.ssl.keystore.type
    将其设置 PKCS12 为表示密钥库是 PKCS#12 文件
  • xpack.monitoring.exporters.$NAME.ssl.keystore.password
    密码到 PKCS#12 文件
  • xpack.monitoring.exporters.$NAME.ssl.keystore.secure_password
    密码到 PKCS#12 文件
  • xpack.monitoring.exporters.$NAME.ssl.keystore.key_password
    存储在 PKCS#12 文件中的私钥密码。默认值为 xpack.monitoring.exporters.$NAME.ssl.keystore.password
  • xpack.monitoring.exporters.$NAME.ssl.keystore.secure_key_password
    存储在 PKCS#12 文件中的私钥密码
  • xpack.monitoring.exporters.$NAME.ssl.truststore.path
    保存要被信任的证书的 PKCS#12 文件的路径
  • xpack.monitoring.exporters.$NAME.ssl.truststore.type
    将其设置 PKCS12 为表示信任库是 PKCS#12 文件
  • xpack.monitoring.exporters.$NAME.ssl.truststore.password
    密码到 PKCS#12 文件
  • xpack.monitoring.exporters.$NAME.ssl.truststore.secure_password
    密码到 PKCS#12 文件

配置 X-Pack Java 客户端

如果要在安装了 X-Pack 的群集中使用 Java 传输客户端,则必须下载并配置 X-Pack 传输客户端

我们计划 TransportClient 在 Elasticsearch 7.0 中弃用它,并在 8.0 中完全删除它。相反,您应该使用 Java 高级别 REST 客户端,它执行 HTTP 请求而不是序列化的 Java 请求。该 迁移指南描述了所有迁移所需的步骤。
Java 高级 REST 客户端目前支持更常用的 API,但还有更多需要添加的东西。您可以通过向您的应用程序添加注释来告诉我们您的应用程序需要哪些 API,从而帮助我们确定优先级: Java 高级 REST 客户端完整性。
任何缺少的 API 现在都可以通过使用具有 JSON 请求和响应主体的低级 Java REST 客户端来实现 。

  1. 将 X-Pack 传输 JAR 文件添加到您的 CLASSPATH。您可以下载 X-Pack 发行版并手动提取 JAR 文件,也可以从 Elasticsearc Maven 存储库中获取它 。与任何依赖关系一样,您还需要传递依赖关系。当下载离线使用时,请参阅您的版本的 X-Pack POM 文件
  2. 如果您正在使用 Maven,则需要将 X-Pack JAR 文件作为依赖项添加到项目 pom.xml 文件中:
<project ...>
     <repositories>
     <!-- add the elasticsearch repo -->
      <repository>
         <id>elasticsearch-releases</id>
         <url>https://artifacts.elastic.co/maven</url>
         <releases>
          <enabled>true</enabled>
         </releases>
         <snapshots>
            <enabled>false</enabled>
         </snapshots>
      </repository>
      ...
   </repositories>
   ...

   <dependencies>
      <!-- add the x-pack jar as a dependency -->
      <dependency>
         <groupId>org.elasticsearch.client</groupId>
         <artifactId>x-pack-transport</artifactId>
              <version>{version}</version>
      </dependency>
      ...
   </dependencies>
   ...

</project>
  1. 如果您正在使用 Gradle,则需要将 X-Pack JAR 文件作为依赖项添加到您的 build.gradle 文件中:
repositories {
  /* ... Any other repositories ... */

  // Add the Elasticsearch Maven Repository
  maven {
    url "https://artifacts.elastic.co/maven"
  }
}

dependencies {
  compile "org.elasticsearch.client:x-pack-transport:{version}"

  /* ... */
}
  1. 如果您在公司内部使用存储库管理器(如 Nexus OSS),则需要按照以下屏幕截图添加存储库:

然后在你的项目中 pom.xml 如果使用 maven,添加下面的仓库和依赖关系定义:

<dependencies>
    <dependency>
        <groupId>org.elasticsearch.client</groupId>
        <artifactId>x-pack-transport</artifactId>
        <version>{version}</version>
    </dependency>
</dependencies>

<repositories>
    <repository>
        <id>local-nexus</id>
        <name>Elastic Local Nexus</name>
        <url>http://0.0.0.0:8081/repository/elasticsearch/</url>
        <releases>
            <enabled>true</enabled>
        </releases>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
  </repositories>
  1. 如果您正在使用 X-Pack 安全性,则还有更多的配置步骤。请参阅 Java 客户端和安全性

启动项检查

除了 Elasticsearch 引导程序检查外,还有特定于 X-Pack 功能的检查

加密敏感数据检查

如果您使用 Watcher 并选择加密敏感数据(通过设置 xpack.watcher.encrypt_sensitive_data 为 true),则还必须在安全设置存储中放置密钥。

要通过此引导程序检查,您必须设置 xpack.watcher.encryption_key 群集中的每个节点。有关更多信息,请参阅在 Watcher 中加密敏感数据

PKI 领域检查

如果使用 X-Pack 安全性和公钥基础结构(PKI)领域,则必须在集群上配置传输层安全性(TLS),并在网络层(传输或 http)上启用客户端身份验证。有关更多信息,请参阅 PKI 用户认证和 在群集上设置 TLS。

要通过此引导程序检查,如果启用了 PKI 领域,则必须配置 TLS 并在至少一个网络通信层上启用客户端身份验证。

角色映射检查

如果你比其他领域验证用户 native 或 file 领域,你必须创建角色映射。这些角色映射定义分配给每个用户的角色。

如果使用文件来管理角色映射,则必须配置 YAML 文件并将其复制到群集中的每个节点。默认情况下,角色映射存储在 ES_PATH_CONF/x-pack/role_mapping.yml。或者,您可以为每种类型的领域指定不同的角色映射文件,并在 elasticsearch.yml 文件中指定其位置。有关更多信息,请参阅 使用角色映射文件。

要通过此引导程序检查,角色映射文件必须存在并且必须有效。角色映射文件中列出的专有名称(DN)也必须是有效的。

SSL/TLS 检查

在 6.0 和更高版本中,如果启用了黄金,铂金或企业许可证和 X-Pack 安全性,则必须配置 SSL / TLS 以进行节点间通信。

使用回送接口的单节点群集不具备此要求。有关更多信息,请参阅 加密通信

要通过此引导程序检查,您必须 在您的群集中设置 SSL / TLS。

令牌 SSL 检查

如果使用 X-Pack 安全性并启用了内置令牌服务,则必须将群集配置为使用 SSL / TLS 作为 HTTP 接口。HTTPS 是必需的,才能使用令牌服务。

特别是,如果 xpack.security.authc.token.enabled 和 http.enabled 被设置为 true 与在 elasticsearch.yml 文件中,还必须设置 xpack.security.http.ssl.enabled 到 true。有关这些设置的更多信息,请参阅安全设置和 HTTP。

要通过此引导程序检查,必须启用 HTTPS 或使用 X-Pack 安全设置禁用内置令牌服务。

安全配置

X-Pack 安全插件使您可以轻松保护群集。借助 X-Pack 安全插件,您可以对数据进行密码保护,并实施更加先进的安全措施,如加密通信,基于角色的访问控制,IP 过滤和审计。有关更多信息,请参阅 Securing the Elastic Stack

在 Elasticsearch Docker 镜像中加密通信

从版本 6.0.0 开始,X-Pack 安全插件(Gold,Platinum 或 Enterprise 订阅)需要对网络传输层进行 SSL/TLS 加密处理。

本部分演示了使用 elasticsearch-platinum Docker 镜像开始使用 HTTPS 和传输的 SSL/TLS 的简单方式。

有关详细信息,请参阅加密通信可用订阅

环境准备

用 Docker 安装 Elasticsearchhttps://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html

在一个新的空白目录中,创建以下四个文件:

instances.yml:

instances:
  - name: es01      1
    dns:
      - es01 
      - localhost
    ip:
      - 127.0.0.1
  - name: es02
    dns:
      - es02
      - localhost
    ip:
      - 127.0.0.1
  1. 允许使用内嵌的 Docker DNS 服务器名称。

.env

CERTS_DIR=/usr/share/elasticsearch/config/x-pack/certificates   1
ELASTIC_PASSWORD=PleaseChangeMe                                 2
  1. docker 镜像中证书存放的路径
  2. 为用户 elastic 初始化密码

create-certs.yml

version: '2.2'
services:
  create_certs:
    container_name: create_certs
    image: docker.elastic.co/elasticsearch/elasticsearch-platinum:6.0.1
    command: >
      bash -c '
        if [[ ! -d config/x-pack/certificates/certs ]]; then
          mkdir config/x-pack/certificates/certs;
        fi;
        if [[ ! -f /local/certs/bundle.zip ]]; then
          bin/x-pack/certgen --silent --in config/x-pack/certificates/instances.yml --out config/x-pack/certificates/certs/bundle.zip;
          unzip config/x-pack/certificates/certs/bundle.zip -d config/x-pack/certificates/certs;    1
        fi;
        chgrp -R 0 config/x-pack/certificates/certs
      '
    user: ${UID:-1000}
    working_dir: /usr/share/elasticsearch
    volumes: ['.:/usr/share/elasticsearch/config/x-pack/certificates']
  1. 新的节点证书和 CA 证书 + 密钥位于本地目录下 certs

docker-compose.yml

version: '2.2'
services:
  es01:
    container_name: es01
    image: docker.elastic.co/elasticsearch/elasticsearch-platinum:6.0.1
    environment:
      - node.name=es01
      - discovery.zen.minimum_master_nodes=2
      - ELASTIC_PASSWORD=$ELASTIC_PASSWORD 
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - xpack.security.http.ssl.enabled=true
      - xpack.security.transport.ssl.enabled=true
      - xpack.security.transport.ssl.verification_mode=certificate 
      - xpack.ssl.certificate_authorities=$CERTS_DIR/ca/ca.crt
      - xpack.ssl.certificate=$CERTS_DIR/es01/es01.crt
      - xpack.ssl.key=$CERTS_DIR/es01/es01.key
    volumes: ['esdata_01:/usr/share/elasticsearch/data', './certs:$CERTS_DIR']
    ports:
      - 9200:9200
    healthcheck:
      test: curl --cacert $CERTS_DIR/ca/ca.crt -s https://localhost:9200 >/dev/null; if [[ $$? == 52 ]]; then echo 0; else echo 1; fi
      interval: 30s
      timeout: 10s
      retries: 5
  es02:
    container_name: es02
    image: docker.elastic.co/elasticsearch/elasticsearch-platinum:6.0.1
    environment:
      - node.name=es02
      - discovery.zen.minimum_master_nodes=2
      - ELASTIC_PASSWORD=$ELASTIC_PASSWORD              1
      - discovery.zen.ping.unicast.hosts=es01
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - xpack.security.http.ssl.enabled=true
      - xpack.security.transport.ssl.enabled=true
      - xpack.security.transport.ssl.verification_mode=certificate  2
      - xpack.ssl.certificate_authorities=$CERTS_DIR/ca/ca.crt
      - xpack.ssl.certificate=$CERTS_DIR/es02/es02.crt
      - xpack.ssl.key=$CERTS_DIR/es02/es02.key
    volumes: ['esdata_02:/usr/share/elasticsearch/data', './certs:$CERTS_DIR']
  wait_until_ready:
    image: docker.elastic.co/elasticsearch/elasticsearch-platinum:6.0.1
    command: /usr/bin/true
    depends_on: {"es01": {"condition": "service_healthy"}}
volumes: {"esdata_01": {"driver": "local"}, "esdata_02": {"driver": "local"}}
  1. 启动检查 elastic 用户在.env 中配置的密码
  2. 禁止验证节点间通信的真实性。允许创建自签名证书,而无需固定特定的内部 IP 地址
运行示例
  1. 生成证书(只需要一次)
docker-compose -f create-certs.yml up
  1. 启动两个配置了 SSL/TLS 配置的 Elasticsearch 节点:
docker-compose up -d
  1. 使用自举密码通过 SSL / TLS 访问 Elasticsearch API:
curl --cacert certs/ca/ca.crt -u elastic:PleaseChangeMe https://localhost:9200
  1. 该 setup-passwords 工具也可用于为所有用户生成随机密码:

没有运行 PowerShell 的 Windows 用户需要删除\和连接下面的代码段中的行。

docker exec es01 /bin/bash -c "bin/x-pack/setup-passwords \
auto --batch \
-Expack.ssl.certificate=x-pack/certificates/es01/es01.crt \
-Expack.ssl.certificate_authorities=x-pack/certificates/ca/ca.crt \
-Expack.ssl.key=x-pack/certificates/es01/es01.key \
--url https://localhost:9200"
  • B3log

    B3log 是一个开源组织,名字来源于“Bulletin Board Blog”缩写,目标是将独立博客与论坛结合,形成一种新的网络社区体验,详细请看 B3log 构思。目前 B3log 已经开源了多款产品:SymSoloVditor思源笔记

    1063 引用 • 3454 回帖 • 189 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...