安全

编辑

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)。如果安全存储是使用命令行传播的,则只需使用文件名称。