Elastic:使用 Postman 来访问 Elastic Stack

对于很多的开发者来说,他们很习惯用 Postman 来测试 REST 接口。在我之前的文章 “如何在Linux,MacOS及Windows上进行安装Elasticsearch” 中,我也展示了如何使用 Postman 来访问我们的 Elasticsearch。对于 Postman 访问 Elasticsearch 来说,非常地直接。但是在那里有一种情况,我没有展示,那就是:当一个集群启动安全过后,我们该如何使用用户名及密码来访问我们的Elasticsearch 集群呢?

使用 Postman 来访问 Elastic Stack

为Elasticsearch集群设置安全

我们可以按照我之前的文章 “Elasticsearch:设置Elastic账户安全” 设置用户名及密码。一旦设置好用户名及密码后,当我们使用Postman或各类语言的API来访问 Elasticsearch 时,我们必须使用用户名及密码来访问。

在今天的实验中,我将采用 Elastic cloud 来做实验。如果大家没有使用过 Elastic cloud,请参阅我之前的文章 “Elastic:在Elastic云上3分钟部署Elastic集群”。在默认的情况下,Elastic cloud 是带有安全设置的。

 

将 Elasticsearch HTTP / REST 客户端与 Shield 结合使用

首先,我们可以参考 Elastic 的官方文档。如文档所示:Elasticsearch 与标准 HTTP 基本身份验证 header 一起使用以识别请求者。 由于 Elasticsearch 是无状态的,因此此标头必须与每个请求一起发送:

Authorization: Basic <TOKEN>

在这里<TOKEN>计算为 base64(USERNAME:PASSWORD)。

我们在网上找一个计算 base64 的在线工具 https://www.base64encode.org/。假设我们的用户名是 elastic,而我们的密码是123456。

我们把 elastic:123456 输入后,在点击 ENCODE 按钮,我们就可以发现被编码后的 base64 代码 ZWxhc3RpYzoxMjM0NTY=。这个将是我们在如下进行 Postman 请求时填入到 header 里的字符串。

使用 Postman 访问 Elasticsearch

有了上面的方法可以得到 base64 的 token,那么我就可以在 Postman 中进行配置了。我们打开 Postman:

如上图所示:我们填入 Elasticsearch 的访问地址,同时在 header 的 Authorization 部分填入相应的 Basic <token>。等我们填完好后,我们点击 Send 按钮。在下面我们就可以看出返回来的结果。

在我们请求时,如果有 payload 的情况下,该怎么办呢?我们可以把我们的 payload 写入到 Postman 的 body 里:

一旦我们使用 Postman 能够完成我们的 API 接口的测试,我们可以使用任何一种语言来发起对 Elasticsearch 的请求,甚至我们不需要考虑那些语言所提供的接口。

 

参考:

【1】https://www.elastic.co/guide/en/shield/current/_using_elasticsearch_http_rest_clients_with_shield.html