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

  |   0 评论   |   4,667 浏览

该章节部分内容直接从谷歌翻译而来(比如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文件的位置。

你必须在file:// 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 YesNo
Graph No YesNo
Machine learning YES YesNo
Management No NOYES
Monitoring No YesYES
Reporting No YesNo
Security YES YesNo
Watcher YES NONo

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"


版权声明:本文为博主原创文章,转载请注明出处 https://www.felayman.com
欢迎加入QQ群:639315446 ,一起讨论Elasticsearch相关技术

评论

发表评论

validate