转载自: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. 多校B层冲刺NOIP20211111模拟12

    题面:PDFhttp://xn--gwt928b.accoders.com/pdf/10248/10248.pdfhttp://xn--gwt928b.accoders.com/pdf/10248/1 ...

  2. 【Azure 事件中心】Azure Event Hub 新功能尝试 -- 异地灾难恢复 (Geo-Disaster Recovery)

    问题描述 关于Event Hub(事件中心)的灾备方案,大多数就是新建另外一个备用的Event Hub,当主Event Hub出现不可用的情况时,就需要切换到备Event Hub上. 而在切换的过程中 ...

  3. uniapp调用jar

    前言 此方法为使用uniapp开发前端资源,然后继承进安卓原生项目,达到调用uniapp调用jar的效果. 基于Android Studio进行开发. 本人不懂安卓以及gradle,只是基于搜索引擎以 ...

  4. super与this关键字图解和java继承的三个特点

    java继承的三个特点 java语言是单继承的 一个类的直接父类只能有一个 class A{} class B extends A{}//正确 class C{} class D extends A, ...

  5. Javaweb03-servlet&filter

    1.什么是servlet 第一个servlet应用程序,实现servlet接口 定义:凡是实现了servlet api接口(或者继承servlet api接口的实现类)的类就是servlet应用程序: ...

  6. MySQL主从复制原理及搭建过程

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 复制概述 复制即把一台服务器上的数据通过某种手段同步到另外一台或多台从服务器上,使得从服务器在数据上与主服务器保持一致. ...

  7. Windows 11上Dev C++ 5.11 提示 Failed to execute xxx Error 0的一种解决方法

    问题现象 在Windows 11上用Dev C++ 5.11编译运行程序,出现如下错误不能运行,且自己的程序没有问题. 可能的原因 Dev C++没有以管理员身份运行? 生成的程序所在的目录受到了访问 ...

  8. ASP.NET Core 5.0中的Host.CreateDefaultBuilder执行过程

      通过Rider调试的方式看了下ASP.NET Core 5.0的Web API默认项目,重点关注Host.CreateDefaultBuilder(args)中的执行过程,主要包括主机配置.应用程 ...

  9. postgresql用户与权限管理

    pg使用角色的概念管理数据库访问权限,角色是一系列相关权限的集合.为了管理方便,通常把一系列先关的权限赋予给一个角色,如果哪个用户需要这些权限,就把这些角色赋予给响应的用户. 由于用户也拥有一系列的相 ...

  10. Web 前端实战:JQ 实现下拉菜单

    实现过程 实现一个简易的鼠标悬停菜单项显示其子项的下拉框控件.将用到 CSS 绝对定位.流式布局.动画等:JQuery 鼠标移入和移出事件.DOM 查找.效果图如下: HTML 结构: <div ...