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 ...
随机推荐
- Eolink 全局搜索介绍【翻译】
随着前后端分离成为互联网项目开发的标准模式, API 成为了前后端联通的桥梁.而面对越来越频繁和复杂的调用需求,项目里的 API 数量也越来越多,我们需要通过搜索功能来快速定位到对应的 API来进行使 ...
- 基于ABP实现DDD--DDD相关概念
什么是DDD呢?领域驱动设计[DDD]是一种针对复杂需求的软件开发方法.将软件实现与不断发展的模型联系起来,专注于核心领域逻辑,而不是基础设施细节.DDD适用于复杂领域和大规模应用,而不是简单的C ...
- EFCore高级Saas系统下一个DbContext如何支持多数据库迁移
EFCore高级玩法单DbContext支持多数据库迁移 前言 随着系统的不断开发和迭代默认的efcore功能十分强大,但是随着Saas系统的引进efcore基于表字段的多租户模式已经非常完美了,但是 ...
- Linux安装mysql8.0.29详细教程
我在上午卸载了陪伴我多年的mysql5.7,现在准备安装mysql8.0. 一.登录mysql官网下载mysql安装包(我的系统是Centos7) MySQL :: Download MySQL ...
- [NCTF2019]Fake XML cookbook-1|XXE漏洞|XXE信息介绍
1.打开之后显示如图所示: 2.根据题目名字就能看出来和xml有关,和xml有关的那就是注入,brup抓包看下数据包,结果如下: 3.查看post数据,确实很像xml实体注入,那就进行尝试以下,将po ...
- html的基础01
1.什么是网页 2.常用的浏览器有哪些 3.web标准是什么 1.什么是网页 2.常用的浏览器 360.百度那些都是国产浏览器,内核一样,以上六个都是国际浏览器,不同厂商生产(但IE和Edge都是 ...
- odoo 14 一些常见问题集
1 # 当你往tree或者form视图中增加action的时候 2 # 记住!千万别重名 3 # 一旦重名,Export.Delete.Archive.Unarchive都会消失不见 4 # tree ...
- [LNOI2022]盒
\(LNOI2022\)盒 由于是加的形式,那么可以套路的拆贡献,枚举每条边的贡献就好了 \(40pts\) //比较显然的事情 //首先确定了一个B数组之后 //最小的移动应该是 //设左右两侧比原 ...
- 机器学习建模高级用法!构建企业级AI建模流水线 ⛵
作者:韩信子@ShowMeAI 机器学习实战系列: http://www.showmeai.tech/tutorials/41 本文地址:http://www.showmeai.tech/articl ...
- layui框架图片上传至服务器
注意:只可用于数据量较小的项目,数据量庞大的项目不要用这个,否则会造成图片数量庞大,至服务器运行速度变慢或瘫痪 HTML代码 //前端使用的是layui框架<div class="la ...