安全编辑

elasticsearch-hadoop 可以在安全环境中工作,并支持身份验证和授权。但是,重要的是要了解 elasticsearch-hadoop 本身是一个*连接器*,也就是说,它连接了两个不同的系统。因此,在谈论安全性时,重要的是要了解它适用于哪个系统:连接器可以在安全的 Hadoop 环境中运行,并与普通的/非安全的 Elasticsearch 集群通信。反之亦然,它可以在非安全的 Spark 环境中运行,同时安全地与 Elasticsearch 集群通信。当然,反过来也可能发生;连接器在安全的 Hadoop 环境中运行,并与安全的 Elasticsearch 集群通信,或者最常见的用例,从开放的 Spark 环境运行到默认的、非安全的 Elasticsearch 安装。这种设置的枚举实际上是有目的的,是为了说明根据环境中哪个部分是安全的,需要调整其相应的连接器配置。

安全的 Hadoop/Spark编辑

由于连接器在 Hadoop 或 Spark 中作为*库*运行,因此在大多数情况下,它不需要任何特殊配置,因为它将*继承*并*使用*封闭的作业/任务凭据运行。换句话说,只要您的 Hadoop/Spark 作业配置正确,可以针对安全环境运行,elasticsearch-hadoop 作为库就会在该安全上下文中使用已配置的凭据运行。设置这一点超出了本文档的目的,但是它通常归结为在作业/任务使用的配置对象上设置正确的凭据。

安全的 Elasticsearch编辑

Elasticsearch 本身可以是安全的,这会在两个方面影响客户端(如 elasticsearch-hadoop):现在已加密的传输层和需要身份验证的访问层。请注意,通常建议同时启用这两个选项(安全传输和安全访问)。

SSL/TLS 配置编辑

如果传输已加密,则需要在 elasticsearch-hadoop 中启用 SSL/TLS 支持,以便连接器与 Elasticsearch 正确通信。这是通过将 es.net.ssl 属性设置为 true 来完成的,并且根据您的 SSL 配置(证书是由 CA 签名还是未签名,是在 JVM 级别全局还是仅对一个应用程序本地),可能需要设置 keystore 和/或 truststore,即存储*凭据*的位置(keystore - 通常存储私钥和证书)以及如何*验证*它们(truststore - 通常存储来自第三方的证书,也称为 CA - 证书颁发机构)。通常(再次说明,您的环境可能会有很大差异),如果尚未在 JVM 级别完成 elasticsearch-hadoop 的 SSL 设置,则如果 elasticsearch-hadoop 安全性需要客户端身份验证(PKI - 公钥基础结构),则需要设置密钥库,如果启用了 SSL,则需要设置 truststore

身份验证编辑

elasticsearch-hadoop 中的身份验证支持有两种类型

用户名/密码
通过 es.net.http.auth.useres.net.http.auth.pass 属性设置这些。
PKI/X.509
使用 X.509 证书对 elasticsearch-hadoop 到 elasticsearch-hadoop 进行身份验证。为此,需要将包含私钥和证书的 keystore 设置为适当的用户(在 Elasticsearch 中配置),并将包含用于对 Elasticsearch 集群中的 SSL/TLS 证书进行签名的 CA 证书的 truststore 设置为适当的用户。这是一种设置 elasticsearch-hadoop 身份验证密钥的方法,也是验证其是否正确的方法。为此,应设置 es.net.ssl.keystore.locationes.net.ssl.truststore.location 属性以指示要使用的 keystoretruststore。建议通过密码保护它们,在这种情况下,需要使用 es.net.ssl.keystore.passes.net.ssl.truststore.pass 属性。

安全设置编辑

添加于 6.4.0。

elasticsearch-hadoop 使用有时包含敏感信息(例如密码)的设置进行配置。这些属性值以纯文本形式出现在作业配置中可能并不可取。对于这些情况,elasticsearch-hadoop 支持从密钥库文件中读取一些安全属性。

elasticsearch-hadoop 密钥库目前仅提供混淆功能。将来会添加密码保护。

只能从安全设置中读取以下配置: * es.net.http.auth.pass * es.net.ssl.keystore.pass * es.net.ssl.truststore.pass * es.net.proxy.http.pass * es.net.proxy.https.pass * es.net.proxy.socks.pass

elasticsearch-hadoop 提供了一个 keytool 程序,允许您创建密钥库文件并将条目添加到其中。

$> java -classpath path/to/eshadoop.jar org.elasticsearch.hadoop.cli.Keytool <command> <args>

要在工作目录中创建密钥库文件,请运行 create 命令

$> java -classpath path/to/eshadoop.jar org.elasticsearch.hadoop.cli.Keytool create
$> ls
esh.keystore

可以使用 list 命令列出密钥库中的设置

$> java -classpath path/to/eshadoop.jar org.elasticsearch.hadoop.cli.Keytool list

创建密钥库文件后,可以使用 add 命令添加敏感设置

$> java -classpath path/to/eshadoop.jar org.elasticsearch.hadoop.cli.Keytool add the.setting.name.to.set

将出现一个提示,并请求输入设置的值。要通过 stdin 传递值,请使用 --stdin 标志

$> cat /file/containing/setting/value | java -classpath path/to/eshadoop.jar org.elasticsearch.hadoop.cli.Keytool add --stdin the.setting.name.to.set

要从密钥库中删除设置,请使用 remove 命令

$> java -classpath path/to/eshadoop.jar org.elasticsearch.hadoop.cli.Keytool remove the.setting.name.to.set

指定所有设置后,必须确保每个节点都可以访问密钥库。这可以通过将密钥库放在每个节点的本地文件系统上,或者将密钥库添加到作业的类路径中来完成。添加密钥库后,必须使用 es.keystore.location 指定其位置。要引用本地文件,请使用完全限定的文件 URL(例如 file:///path/to/file)。如果使用命令行传播安全存储,则只需使用文件名即可。