安全
编辑安全编辑
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.user
和es.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.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
)。如果使用命令行传播安全存储,则只需使用文件名即可。