安全性

编辑

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 - 证书颁发机构)。通常(再次注意,您的环境可能差异很大),如果 elasticsearch-hadoop 的 SSL 设置尚未在 JVM 级别完成,如果 elasticsearch-hadoop 安全性需要客户端身份验证(PKI - 公钥基础设施),则需要设置 keystore,如果启用了 SSL,则需要设置 truststore

身份验证

编辑

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

用户名/密码
通过 es.net.http.auth.useres.net.http.auth.pass 属性设置这些。
PKI/X.509
使用 X.509 证书对 elasticsearch-hadoop 向 elasticsearch-hadoop 进行身份验证。为此,需要设置包含私钥和证书的 keystore,以用于适当的用户(在 Elasticsearch 中配置),并设置 truststore,其中包含用于对 Elasticsearch 集群中的 SSL/TLS 证书进行签名的 CA 证书。即,设置密钥以验证 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)。如果使用命令行传播安全存储,只需使用文件名。