X-pack安全允许你加密来、往在你的ElasticSearch集群。链接安全使用传输层安全(TLS/SSL)。
未启用加密的群集以纯文本发送所有数据,包括密码,并且无法安装启用X-Pack 安全特性许可证(也就是当你安装白金许可证时,会报500服务器错误)。
要启用加密,需要对集群中的每个节点执行以下步骤:
- 验证xpack.security.enabled设置是否为true,获取更多的信息查看security-settings。
- 生成私钥和X.509证书。
- 配置每一个节点: a.必须:Enable TLS on the transport layer. b.推荐:Enable TLS on the HTTP layer.
- 如果使用ActiveDirectory用户身份验证,请加密Elasticearch与ActiveDirectory服务器之间的通信。
- 如果使用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对证书进行签名。例如:
- 可选:为您的Elasticearch集群创建一个证书颁发机构。例如,使用elasticsearch-certutil ca命令:
bin/elasticsearch-certutil ca
可以将群集配置为信任拥有由此CA签名的证书的所有节点。该命令输出一个文件,默认名称为elastic-stack-ca.p12。此文件是一个PKCS#12密钥存储库,它包含CA的公共证书和用于为每个节点签名证书的私钥。
elasticsearch-certutil 命令还提示您输入密码以保护文件和密钥。如果将来计划向群集添加更多节点,请保留文件的副本并记住其密码。
- 为群集中的每个节点生成证书和私钥。例如,使用elasticsearch-certutil cert 命令:
bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
输出是单个PKCS#12密钥存储库,其中包括节点证书、节点密钥和CA证书。还会提示您输入密码。您可以为证书和密钥输入密码,也可以按Enter将密码保留为空白。 默认情况下,elasticsearch-certutil 生成没有主机名信息的证书(也就是说,它们没有任何主题可选名称字段)。这意味着您可以对集群中的每个节点使用证书,但您必须关闭主机名验证,如下面的配置所示。
如果要在集群中使用主机名验证,请为每个节点运行一次ElasticSearch-certutilcert命令,并提供-name、-dns和-ip选项。
您应该保护输出文件,因为它们包含实例的私钥。
或者,如果您想使用特定于商业或组织的CA,可以使用ElasticSearch-certutil CSR命令为集群中的节点生成证书签名请求(CSR)。有关更多信息,请参见ElasticSearch-certutil。
- 将节点证书复制到适当的位置。将适用的.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等内容,由于未用到,暂时不做翻译。