安全性
编辑安全性
编辑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.user
和es.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.location
和es.net.ssl.truststore.location
属性,以指示要使用的keystore
和truststore
。建议通过密码保护这些属性,在这种情况下,需要es.net.ssl.keystore.pass
和es.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
)。如果使用命令行传播安全存储,只需使用文件名。