加密ElasticSearch通信

本文翻译自ElasticSearch官方文档,原文请见 《Encrypting Communications in Elasticsearch》。

X-pack安全允许你加密来、往在你的ElasticSearch集群。链接安全使用传输层安全(TLS/SSL)。

Warning未启用加密的群集以纯文本发送所有数据,包括密码,并且无法安装启用X-Pack 安全特性许可证(也就是当你安装白金许可证时,会报500服务器错误)

要启用加密,需要对集群中的每个节点执行以下步骤:

  1. 验证xpack.security.enabled设置是否为true,获取更多的信息查看security-settings
  2. 生成私钥和X.509证书。
  3. 配置每一个节点:
    a.必须:Enable TLS on the transport layer.
    b.推荐:Enable TLS on the HTTP layer.
  4. 如果使用ActiveDirectory用户身份验证,请加密Elasticearch与ActiveDirectory服务器之间的通信。
  5. 如果使用LDAP用户身份验证,请加密Elasticearch与LDAP服务器之间的通信


    有关在弹性堆栈中加密通信的详细信息,请参阅加密通信。

 生成节点证书

TLS需要X.509证书来执行与之通信的应用程序的加密和身份验证。为了使节点之间的通信真正安全,必须对证书进行验证。在Elasticearch群集中验证证书真实性的推荐方法是信任签署证书的证书颁发机构(CA)。通过这样做,当节点被添加到您的集群时,它们只需要使用由同一个CA签名的证书,节点就可以自动加入集群。此外,建议证书包含与节点的IP地址和DNS名称相对应的主题替代名称(SAN),以便可以执行主机名验证。

为了简化为一个命令行工具ElasticStack生成证书的过程,X-Pack中包含了elasticsearch-certutil。该工具负责生成CA并使用CA签名证书。elasticsearch-certutil可以通过使用输入文件交互地或在静默模式下使用。elasticsearch-certutil工具还支持生成证书签名请求(CSR),因此可以使用特定于商业或组织的CA对证书进行签名。例如:

  1. 可选:为您的Elasticearch集群创建一个证书颁发机构。例如,使用elasticsearch-certutil ca命令:
    bin/elasticsearch-certutil ca

    可以将群集配置为信任拥有由此CA签名的证书的所有节点。该命令输出一个文件,默认名称为elastic-stack-ca.p12。此文件是一个PKCS#12密钥存储库,它包含CA的公共证书和用于为每个节点签名证书的私钥。
     

    elasticsearch-certutil 命令还提示您输入密码以保护文件和密钥。如果将来计划向群集添加更多节点,请保留文件的副本并记住其密码。

  2. 为群集中的每个节点生成证书和私钥。例如,使用elasticsearch-certutil cert 命令:
     

    bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12

    输出是单个PKCS#12密钥存储库,其中包括节点证书节点密钥CA证书。还会提示您输入密码。您可以为证书和密钥输入密码,也可以按Enter将密码保留为空白。
              默认情况下,elasticsearch-certutil 生成没有主机名信息的证书(也就是说,它们没有任何主题可选名称字段)。这意味着您可以对集群中的每个节点使用证书,但您必须关闭主机名验证,如下面的配置所示。
     

    如果要在集群中使用主机名验证,请为每个节点运行一次ElasticSearch-certutilcert命令,并提供-name、-dns和-ip选项。
    Note

    您应该保护输出文件,因为它们包含实例的私钥。

    或者,如果您想使用特定于商业或组织的CA,可以使用ElasticSearch-certutil CSR命令为集群中的节点生成证书签名请求(CSR)。有关更多信息,请参见ElasticSearch-certutil。

  3. 将节点证书复制到适当的位置。

    将适用的.p12文件复制到每个节点的Elasticsearch配置目录中的目录中。例如,/home/es/config/certs。不需要将CA文件复制到此目录。
               对于要配置的每一个额外的Elastic产品,请将证书复制到相关的配置目录中。
     

    如果选择不使用ElasticSearch-certutil,则如果存在扩展密钥使用扩展,则所获得的证书必须同时允许clientAuth和serverAuth。证书需要采用PEM或PKCS#12格式。尽管不是必需的,但强烈建议证书包含节点的DNS名称和/或IP地址,以便可以使用主机名验证。

加密集群节点之间的通信

传输网络层用于集群中节点之间的内部通信。启用X-Pack安全性时,必须使用TLS来确保节点之间的通信是加密的。

1、生成节点证书

2、启用TLS并指定访问节点证书所需的信息。

如果签名的证书是PKCS#12格式,请将以下信息添加到每个节点的elasticsearch.yml文件中:

xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate 
xpack.security.transport.ssl.keystore.path: certs/elastic-certificates.p12 
xpack.security.transport.ssl.truststore.path: certs/elastic-certificates.p12 

如果您在elasticsearch-certutil cert命令中使用了-dns或-ip选项,并且希望启用严格的主机名检查,请将验证模式设置为full。有关这些值的描述,请参见xPack.ssl.Version_Mode。

如果为每个节点创建了单独的证书,则可能需要在每个节点上自定义此路径。如果文件名与节点名称匹配,则可以使用certs/${node.name}.p12格式。

elasticsearch-certutil 输出PKCS#12密钥存储库,其中包含CA证书作为受信任的证书条目。这允许密钥库也用作信任库。在这种情况下,路径值应该与keystore.path值匹配。但是,请注意,这不是一般规则。有些密钥存储不能用作信任存储,只有巧尽心思构建的密钥存储才能使用。

如果证书的格式是PEM,增加下面的信息到elasticsearch.yml文件在每一个节点上:

xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate 
xpack.security.transport.ssl.key: /home/es/config/node01.key 
xpack.security.transport.ssl.certificate: /home/es/config/node01.crt 
xpack.security.transport.ssl.certificate_authorities: [ "/home/es/config/ca.crt" ] 

如果您在elasticsearch-certutil cert命令中使用了-dns或-ip选项,并且希望启用严格的主机名检查,请将验证模式设置为full。有关这些值的描述,请参见xPack.ssl.Version_Mode。

节点密钥文件的完整路径。这必须是Elasticsearch配置目录中的位置。

节点证书的完整路径。这必须是Elasticsearch配置目录中的位置。

应该信任的CA证书的路径数组。这些路径必须是Elasticsearch配置目录中的位置。

3、如果使用密码保护节点的证书,请将密码添加到您的ElasticSearch密钥存储库中:

如果签名证书采用PKCS#12格式,请使用以下命令:

bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password

bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password

如果证书是PEM格式的,请使用以下命令:

bin/elasticsearch-keystore add xpack.security.transport.ssl.secure_key_passphrase

4、重启ElasticSearch

必须执行完全重新启动群集。配置为使用TLS的节点不能与使用未加密网络的节点通信(反之亦然)。启用TLS之后,必须重新启动所有节点,以维护集群之间的通信。

所有与TLS相关的节点设置都被认为是高度敏感的,因此不会通过节点信息API公开有关这些设置的更多信息,请参见安全设置。

ElasticSearch监视配置为与TLS相关的节点设置值的所有文件,如证书、密钥存储库或信任存储库。如果您更新这些文件中的任何一个(例如,当主机名更改或证书到期时),Elasticearch将重新加载它们。文件被轮询以全局ElasticSearchResoure.reload.Interval.High设置确定的频率进行更改,该设置默认为5秒。

加密Http客户端通信

启用X-Pack安全性时,您可以选择使用TLS来确保HTTP客户端和集群之间的通信是加密的。

强烈建议在HTTP层上启用TLS,但不是必需的。如果在Elastic search的HTTP层上启用TLS,则可能需要在Elastic stack的其他部分和使用的任何ElasticSearch客户端中进行配置更改。

1、如果尚未这样做,请生成节点证书。

2、启用TLS并指定访问节点证书所需的信息。

2-1如果证书是PKCS#12格式的,那么将以下信息添加到每个节点的elasticsearch.yml文件中:
 

xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.keystore.path: certs/elastic-certificates.p12 
xpack.security.http.ssl.truststore.path: certs/elastic-certificates.p12 

如果为每个节点创建了单独的证书,则可能需要在每个节点上自定义此路径。如果文件名与节点名称匹配,则可以使用certs/${node.name}.p12格式。

ElasticSearch-certutil输出包括PKCS#12密钥库中的CA证书,因此密钥库也可以用作信任库。此名称应与keystore.path值匹配。

2-2如果证书是PEM格式,则将以下信息添加到每个节点的elasticsearch.yml文件中:

xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.key:  /home/es/config/node01.key 
xpack.security.http.ssl.certificate: /home/es/config/node01.crt 
xpack.security.http.ssl.certificate_authorities: [ "/home/es/config/ca.crt" ] 

 节点密钥文件的完整路径。这必须是Elasticsearch配置目录中的位置。

节点证书的完整路径。这必须是Elasticsearch配置目录中的位置。

应该信任的CA证书的路径数组。这些路径必须是Elasticsearch配置目录中的位置。

3、如果使用密码保护节点的证书,请将密码添加到您的ElasticSearch密钥存储库中:

如果签名证书采用PKCS#12格式,请使用以下命令:

bin/elasticsearch-keystore add xpack.security.http.ssl.keystore.secure_password

bin/elasticsearch-keystore add xpack.security.http.ssl.truststore.secure_password

如果证书是PEM格式的,请使用以下命令:

bin/elasticsearch-keystore add xpack.security.http.ssl.secure_key_passphrase

4、重新启动ELastic。

 

必须执行完全重新启动群集。配置为使用TLS的节点不能与使用未加密网络的节点通信(反之亦然)。启用TLS之后,必须重新启动所有节点,以维护集群之间的通信。

所有与TLS相关的节点设置都被认为是高度敏感的,因此不会通过节点信息API公开有关这些设置的更多信息,请参见安全设置。

ElasticSearch监视配置为与TLS相关的节点设置值的所有文件,如证书、密钥存储库或信任存储库。如果您更新这些文件中的任何一个(例如,当主机名更改或证书到期时),Elasticearch将重新加载它们。文件被轮询以全局ElasticSearchResoure.reload.Interval.High设置确定的频率进行更改,该设置默认为5秒。

 

注意:官方文档不止于此,还包括Encrypting communications between Elasticsearch and Active Directory等内容,由于未用到,暂时不做翻译。

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值