Elasticsearch:创建 API key 接口访问 Elasticsearch
转载自: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的更多相关文章
- Web API的接口访问安全性
使用签名获取Token 首先我们自定义appkey.appSecret.可用GUID随机生成,AppSecret要不定期更换.然后放到配置文件中. Appkey=1AF62C68-B970-46E7- ...
- Elasticsearch 搜索API
章节 Elasticsearch 基本概念 Elasticsearch 安装 Elasticsearch 使用集群 Elasticsearch 健康检查 Elasticsearch 列出索引 Elas ...
- Elasticsearch:同步 MongoDB 数据到 Elasticsearch
转载自:https://elasticstack.blog.csdn.net/article/details/114639152 MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写 ...
- [搜索]ElasticSearch Java Api(一) -添加数据创建索引
转载:http://blog.csdn.net/napoay/article/details/51707023 ElasticSearch JAVA API官网文档:https://www.elast ...
- 搜索引擎Elasticsearch REST API学习
Elasticsearch为开发者提供了一套基于Http协议的Restful接口,只需要构造rest请求并解析请求返回的json即可实现访问Elasticsearch服务器.Elasticsearch ...
- Elasticsearch Java API 很全的整理
Elasticsearch 的API 分为 REST Client API(http请求形式)以及 transportClient API两种.相比来说transportClient API效率更高, ...
- 【】Elasticsearch客户端API使用Demo
Elasticsearch客户端API使用Demo, 转载自官方文档, 以索引雇员文档为示例, 在命令行使用curl演示了一系列的Restful API操作. 1.索引雇员文档 第一个业务需求就是存储 ...
- Google地图接口API之申请免费API Key(一)
使用谷歌地图API V3创建交互式地图,首先需要拥有一个免费的 Google 地图 API key. 如果想调用Google地图的接口,首先需要拥有一个免费的 Google 地图 API key.想要 ...
- ElasticSearch的API介绍
ElasticSearch的API介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.ES是基于Restful风格 1>ES是基于Restful风格 Elasticsea ...
随机推荐
- 浅谈spring-createBean
目录 找到BeanClass并且加载类 实例化前 实例化 Supplier创建对象 工厂方法创建对象 方法一 方法二 推断构造方法 BeanDefionition 的后置处理 实例化后 属性填充 sp ...
- Jenkins性能优化
jenkins性能优化 1.评估安装插件,插件数量过多,会导致界面加载慢: 2.添加slave节点: 01.禁止在master上构建性能耗费大的任务,可以使用标签的方式使其在slave上构建: 02. ...
- Eplan创建符号
1.打开Eplan P8 ,新建一个名为"新项目"的项目,然后选择菜单"工具"----"主数据"-----"符号库"-- ...
- 8月Meetup | “数据调度+分析引擎”解锁企业数字化转型之路
编辑切换为居中 添加图片注释,不超过 140 字(可选) 大数据是一种规模大到在获取.存储.管理.分析方面大大超出了传统数据库软件工具能力范围的数据集合,而大数据作为企业运转的基础,只有经过提 ...
- Apache DolphinScheduler 的持续集成方向实践
今天给大家带来的分享是基于 Apache DolphinScheduler 的持续集成方向实践,分享的内容主要为以下六点: " 研发效能 DolphinScheduler CI/CD 应用案 ...
- Excel 单元格的相对引用和绝对引用
引用方式 单元格的地址由该单元格所在的行号和列标构成,一个引用代表工作表上的一个或者一组单元格,指明公式中数据所在的位置. 编号 消费记录 价格 1 乒乓球 1 2 火腿肠 2 3 乒乓球 1 4 羽 ...
- C++ 添加程序图标到我的电脑
C++ 像我的电脑中 百度网盘的 那图标快捷方式.如何生成的呢?设置程序图标到我的电脑 请看下边代码 就ok了(*^__^*) 嘻嘻-- 类似下图: 大家如果看我下边的不是很清楚,可以下载这个具体工程 ...
- linux下用docker安装redis
docker安装redis方法: 1.用命令来查看可用版本: docker search redis 2.拉取官方的最新版本的镜像:docker pull redis:latest 3.查看镜像:do ...
- 我用Axure制作了一款火影小游戏 | PM老猫
Axure不仅仅是一个原型工具,除了原型之外还可以用来制作一些静态网页,这点对于不懂代码或前端的同学来说挺实用.之前整理了一版<Axure函数自查表>,因为感觉内容太多又对前端样式及脚本感 ...
- 057_末晨曦Vue技术_处理边界情况之强制更新和创建低开销的静态组件
强制更新和创建低开销的静态组件 点击打开视频讲解更加详细 强制更新 如果你发现你自己需要在 Vue 中做一次强制更新,99.9% 的情况,是你在某个地方做错了事. 你可能还没有留意到数组或对象的变更检 ...