转载自:https://blog.csdn.net/UbuntuTouch/article/details/107181440

在之前我的文章 “Elastic:使用Postman来访问Elastic Stack” 中我介绍了如何在应用中访问 Elasticsearch。在那里,我们使用了最基本的 Basic authentication 的方法来访问 Elasticsearch。这种方法不好的地方就是每个用户所有的请求的验证都是一样的:使用的是同样的一个用户名及密码的 Base64 编码。在今天的文章中,我们将介绍如何创建 API key 来提供对 Elasticsearch 的访问。通过这个方法,一个用户可以动态生成无数个 API Key 的访问。 官方文档,可以在链接找到。

接口

它的接口非常简单:

POST /_security/api_key
PUT /_security/api_key

API Key 由 Elasticsearch API key 服务创建,当您在 HTTP 接口上配置TLS时,该服务会自动启用。 请参阅加密HTTP客户端通信。 或者,你可以显式启用 xpack.security.authc.api_key.enabled 设置。 在生产模式下运行时,引导检查会阻止您启用 API key 服务,除非你还在 HTTP 接口上启用了TLS。

成功创建 API key API 调用将返回一个JSON结构,其中包含API 密钥,其唯一 ID 和名称。 如果适用,它还以毫秒为单位返回API密钥的到期信息。

有点是需要注意的是:默认情况下,AP I密钥永不过期。 你可以在创建API密钥时指定到期信息。

请求例子

以下示例创建一个 API 密钥:

POST /_security/api_key
{
"name": "my-api-key",
"expiration": "1d",
"role_descriptors": {
"role-a": {
"cluster": ["all"],
"index": [
{
"names": ["index-a*"],
"privileges": ["read"]
}
]
},
"role-b": {
"cluster": ["all"],
"index": [
{
"names": ["index-b*"],
"privileges": ["all"]
}
]
}
}
}

请注意:在上面的 expiration 和 role_descriptors 这两个字段是可选的。如果你不选则意味着永远有效,并对所有的 role 都起作用。

接下来,我们来用一个具体的例子来展示这项功能。

安装

针对这个测试,由于要求我们启用 TLS 的配置,请参阅我之前的文章 “Elastic:为Elasticsearch启动https访问” 。在那篇文章中,我详述了如何配置启用 TLS。如果你的配置是成功的话,那么我们的 Elasticsearch 将会运行于 https://localhost:9200 的端口上。在这里,我就不再累述了。

测试

我们首先来打开 Kibana,并输入如下的命令:

POST /_security/api_key
{
"name": "liuxg-api-key",
"expiration": "1d"
}

在这里,我们设置 API key 的有效期是1天。我们同时也给了一个名称 liuxg-api-key。执行完上面的指令后,我们可以看到如下的响应:

{
"id" : "gBcXKHMB53qZFLAQ52-j",
"name" : "liuxg-api-key",
"expiration" : 1594191922072,
"api_key" : "sJYv3VMLRaaeaoUec2XfsA"
}

在这里,expiration 使用一个数值来表示的。它表示是从 1970-01-01 00:00:00 UTC 算起的秒。具体描述可以参阅文章

我们可以使用两种方法来生产这个 ApiKey:

方法一:

我们最关心的就是返回来的 id 及 api_key。这两个数值并不能直接为我们所使用。我们打开网站:https://www.base64encode.org/,并把上面的 id 及 api_key 用分号分开:

请注意返回的值 Z0JjWEtITUI1M3FaRkxBUTUyLWo6c0pZdjNWTUxSYWFlYW9VZWMyWGZzQQ==。这个将是我们访问 Elasticsearch 所需要的最终的 ApiKey。

方法二:

我们打开一个 terminal 并创建如下的一个 叫做 response 文件,它的内容如下:

{
"id" : "gBcXKHMB53qZFLAQ52-j",
"name" : "liuxg-api-key",
"expiration" : 1594191922072,
"api_key" : "sJYv3VMLRaaeaoUec2XfsA"
} $ cat response
{
"id" : "gBcXKHMB53qZFLAQ52-j",
"name" : "liuxg-api-key",
"expiration" : 1594191922072,
"api_key" : "sJYv3VMLRaaeaoUec2XfsA"
}

接着我们在 response 文件所在的路径下打入如下的命令:

$ echo -n $(cat response | jq -r .id):$(cat response | jq -r .api_key) | base64

上面的命令显示的结果:

$ ls response
response
liuxg:tmp liuxg$ echo -n $(cat response | jq -r .id):$(cat response | jq -r .api_key) | base64Z0JjWEtITUI1M3FaRkxBUTUyLWo6c0pZdjNWTUxSYWFlYW9VZWMyWGZzQQ==

通过这个方法,我们可以看到和方法一一样的效果。

使用 ApiKey

我们访问 Elasticsearch 所使用的 接口例子为:

curl -k -H "Authorization: ApiKey Z0JjWEtITUI1M3FaRkxBUTUyLWo6c0pZdjNWTUxSYWFlYW9VZWMyWGZzQQ==" https://localhost:9200/_cluster/health

运行上面的命令:

我们再来运行一个例子:

curl -k -H "Authorization: ApiKey Z0JjWEtITUI1M3FaRkxBUTUyLWo6c0pZdjNWTUxSYWFlYW9VZWMyWGZzQQ==" https://localhost:9200/_cat/indices?pretty

Elasticsearch:创建 API key 接口访问 Elasticsearch的更多相关文章

  1. Web API的接口访问安全性

    使用签名获取Token 首先我们自定义appkey.appSecret.可用GUID随机生成,AppSecret要不定期更换.然后放到配置文件中. Appkey=1AF62C68-B970-46E7- ...

  2. Elasticsearch 搜索API

    章节 Elasticsearch 基本概念 Elasticsearch 安装 Elasticsearch 使用集群 Elasticsearch 健康检查 Elasticsearch 列出索引 Elas ...

  3. Elasticsearch:同步 MongoDB 数据到 Elasticsearch

    转载自:https://elasticstack.blog.csdn.net/article/details/114639152 MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写 ...

  4. [搜索]ElasticSearch Java Api(一) -添加数据创建索引

    转载:http://blog.csdn.net/napoay/article/details/51707023 ElasticSearch JAVA API官网文档:https://www.elast ...

  5. 搜索引擎Elasticsearch REST API学习

    Elasticsearch为开发者提供了一套基于Http协议的Restful接口,只需要构造rest请求并解析请求返回的json即可实现访问Elasticsearch服务器.Elasticsearch ...

  6. Elasticsearch Java API 很全的整理

    Elasticsearch 的API 分为 REST Client API(http请求形式)以及 transportClient API两种.相比来说transportClient API效率更高, ...

  7. 【】Elasticsearch客户端API使用Demo

    Elasticsearch客户端API使用Demo, 转载自官方文档, 以索引雇员文档为示例, 在命令行使用curl演示了一系列的Restful API操作. 1.索引雇员文档 第一个业务需求就是存储 ...

  8. Google地图接口API之申请免费API Key(一)

    使用谷歌地图API V3创建交互式地图,首先需要拥有一个免费的 Google 地图 API key. 如果想调用Google地图的接口,首先需要拥有一个免费的 Google 地图 API key.想要 ...

  9. ElasticSearch的API介绍

    ElasticSearch的API介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.ES是基于Restful风格 1>ES是基于Restful风格 Elasticsea ...

随机推荐

  1. Chrome安装Vue.js devtool F12无效

    要安装 vue-devtools-4.1.4_0 链接: https://pan.baidu.com/s/1aeUxKJEUDW0U_i6uuAZFvQ 提取码: 4btc vue-devtools- ...

  2. idea 内置tomcat jersey 跨服务器 上传文件报400错误

    报错内容 com.sun.jersey.api.client.UniformInterfaceException: PUT http://.jpg returned a response status ...

  3. 【问题解决】Axios调用文件下载获取不到文件名

    问题描述 自己开发了一个后端下载文件的接口,然后通过浏览器直接访问这个接口,浏览器能正确得到文件名并下载: 而使用Axios时发现获取不到,经过打印响应体发现响应头里没有文件名 而Java后端代码里是 ...

  4. RK3568开发笔记(四):在虚拟机上使用SDK编译制作uboot、kernel和buildroot镜像

    前言   上一篇搭建好了ubuntu宿主机开发环境,本篇的目标系统主要是开发linux+qt,所以需要刷上billdroot+Qt创建的系统,为了更好的熟悉原理和整个开发过程,选择从零开始搭建rk35 ...

  5. C# 给Word每一页设置不同文字水印

    Word中设置水印时,可预设的文字或自定义文字设置为水印效果,但通常添加水印效果时,会对所有页面都设置成统一效果,如果需要对每一页或者某个页面设置不同的水印效果,则可以参考本文中的方法.下面,将以C# ...

  6. 手把手教你定位线上MySQL慢查询问题,包教包会

    1. 慢查询日志的作用 慢查询日志默认不开启,建议手动开启,方便我们定位线上问题. 执行时间超过阈值的SQL会被写入到慢查询日志当中,这样可以帮助我们记录执行时间过长的SQL语句,定位线上慢SQL问题 ...

  7. 那些舍不得删除的 MP3--批量修改mp3的ID3tag

    整理电脑时发现很多mp3.那是大约2001年至2009年之间.那个时候大家听歌,还是习惯从网上下载mp3.虽然现在听歌比从前方便多了,简单到只需在APP中输入歌名,但用播放器听mp3的感觉是完全不同的 ...

  8. es6中的Proxy和vue中的数据代理的异同

    1:概述 1-1:Proxy 用于修改某些操作的默认行为,Proxy可以说在对对象进行各种访问或者操作的时候在外层进行一层拦截,在操作之前都需要经过这种拦截.proxy返回的是一个新对象,可以通过操作 ...

  9. CSP AFO后可以公开的情报

    10.08 早上和下午准备初赛,晚上考了套题,然后就摸文化课去了. \(250/250\) 手动模拟确实效果好 经验是把双刃剑,读题细致才是王道 T3是分治,一看到1e5的数据就习惯性往数据结构想,一 ...

  10. Luogu2798 爆弹虐场 (二分,Kruskal)

    二分答案,判定连通性 #include <iostream> #include <cstdio> #include <cstring> #include <a ...