ELK下Kibana和Elasticsearch之间相互TLS身份验证

介绍

安全套接字层(SSL)和传输层安全性(TLS)为传输中的数据提供加密。虽然这些术语通常可以互换使用,但Kibana仅支持TLS,它取代了旧的SSL协议。

TLS需要X.509证书来验证通信方并执行传输中数据的加密。每个证书都包含一个公钥,并具有一个关联的(但独立的)私钥;这些密钥用于加密操作。Kibana支持PEM或PKCS#12格式的证书和私钥。

在标准TLS配置中,服务器会提供签名证书以向客户端进行身份验证。在双向TLS配置中,客户端还会提供签名证书以向服务器进行身份验证。

在集群上启用Elasticsearch安全功能后,必须对Kibana(客户端)对Elasticsearch(服务器)的每个请求进行身份验证。最终用户通过Kibana向Elasticsearch发出的大多数请求都使用登录用户的凭据进行身份验证。但是,Kibana需要向Elasticsearch提出一些内部要求。因此,您必须为Kibana配置凭据以用于这些请求。

如果Kibana已elasticsearch.username和elasticsearch.password配置,它会尝试通过使用这些来验证Elasticsearch 原生的境界。但是,Kibana还支持通过公钥基础结构(PKI)领域与Elasticsearch进行相互TLS身份验证。为此,Elasticsearch需要验证Kibana客户端证书上的签名,还需要将客户端证书的专有名称(DN)映射到适当的kibana_system角色。

使用PKI领域是一项黄金功能。有关弹性许可级别的比较,请参阅预订页面。

要将Kibana和Elasticsearch配置为使用双向TLS身份验证,请执行以下操作:

1、设置Kibana以使用具有用户名和密码的Elastic Stack安全功能。
2、在Kibana和Elasticsearch之间设置TLS加密。

这需要为Elasticsearch生成一个“服务器证书”,以供在HTTP层上使用。

3、获取Kibana的客户证书和私钥。

连接到Elasticsearch时,Kibana必须具有此“客户端证书”和相应的私钥。

这与Kibana将提供给Web浏览器的服务器证书不同。

您可以选择使用该elasticsearch-certutil工具生成客户端证书和私钥。如果您遵循用于生成节点证书的Elasticsearch文档,则您可能已经设置了证书颁发机构(CA)来对Elasticsearch服务器证书进行签名。您可以选择使用同一CA来签署Kibana客户端证书。例如:


这将在名为的PKCS#12文件中生成客户端证书和私钥kibana-client.p12。在此示例中,客户端证书的公共名称(CN)为"kibana-client"和主题备用名称(SAN)为"<your_kibana_hostname>"。如果您在Elasticsearch上启用了主机名验证,则可能需要SAN。

4、获取Kibana的证书颁发机构(CA)证书链。
当从Kibana接收连接时,Elasticsearch需要适当的CA证书链来正确建立信任。

如果按照说明生成客户端证书,则将有Kibana的PKCS#12文件。您可以从该文件中提取CA证书链。例如:


这将生成一个名为PEM格式的文​​件kibana-ca.crt,该文件包含PKCS#12文件中的CA证书。

5、使用PKI领域和本机领域配置Elasticsearch。
默认情况下,Elasticsearch提供用于使用用户名和密码进行身份验证的本机领域。但是,要同时支持PKI领域(针对Kibana)和本机领域(针对最终用户),必须在elasticsearch.yml以下位置配置每个领域:


6、配置Elasticsearch以请求客户端证书。

默认情况下,建立TLS连接时,Elasticsearch将不请求客户端证书。要更改此设置,您必须在中设置可选的客户端证书身份验证elasticsearch.yml:


7、重新启动Elasticsearch。
8、使用Kibana在Elasticsearch中为客户端证书创建角色映射。

此角色映射会将角色分配kibana_system给与包含的映射规则匹配的任何用户,该规则设置为等于客户端证书的DN属性:
在这里插入图片描述
有关更多信息,请参见角色映射。

9、配置Kibana以使用客户端证书和私钥。

您需要指定访问客户端证书和相应私钥所需的信息。

a.如果您的证书和私钥包含在PKCS#12文件中:

在中指定您的PKCS#12文件kibana.yml:


如果您的PKCS#12文件已加密,则将解密密码添加到Kibana密钥库中:


如果您的PKCS#12文件没有使用密码保护,则取决于生成方式,您可能需要将其设置 elasticsearch.ssl.keystore.password为空字符串。

b、否则,如果您的证书和私钥为PEM格式:

在中指定您的证书和私钥kibana.yml:


如果您的私钥已加密,则将解密密码添加到您的Kibana密钥库中:


10、将Kibana配置为不对 Elasticsearch使用用户名和密码。

您必须从中删除elasticsearch.username和elasticsearch.password设置kibana.yml。如果存在这些内容,Kibana将尝试使用它们通过本机领域向Elasticsearch进行身份验证。

11、重新启动Kibana。

这些步骤使Kibana可以使用证书对Elasticsearch进行身份验证。但是,最终用户将只能使用用户名和密码向Kibana进行身份验证。要允许最终用户使用客户端证书向Kibana进行身份验证,请参阅Kibana PKI身份验证。

参考链接 :
https://www.elastic.co/guide/en/kibana/current/elasticsearch-mutual-tls.html

发布了349 篇原创文章 · 获赞 60 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/qq_40907977/article/details/104770501