跳到主要内容

Elasticsearch API 密钥

Elasticsearch API 密钥是一种用于身份验证和授权的机制,允许应用程序或用户安全地访问 Elasticsearch 集群。通过 API 密钥,您可以控制谁可以访问集群以及他们可以执行哪些操作。本文将详细介绍如何创建、管理和使用 Elasticsearch API 密钥,并通过实际案例展示其应用场景。

什么是 Elasticsearch API 密钥?

API 密钥是 Elasticsearch 提供的一种轻量级身份验证方式。它由一对字符串组成:idapi_key。通过 API 密钥,您可以在不暴露用户名和密码的情况下,安全地访问 Elasticsearch 集群。API 密钥通常用于自动化脚本、应用程序或服务之间的通信。

备注

API 密钥是长期有效的,除非您手动删除或过期。因此,请确保妥善保管您的 API 密钥,避免泄露。

创建 API 密钥

要创建 API 密钥,您可以使用 Elasticsearch 的 _security/api_key API。以下是一个创建 API 密钥的示例:

bash
POST /_security/api_key
{
"name": "my-api-key",
"expiration": "7d",
"role_descriptors": {
"read-only": {
"cluster": ["monitor"],
"indices": [
{
"names": ["my-index"],
"privileges": ["read"]
}
]
}
}
}

输入

  • name: API 密钥的名称。
  • expiration: API 密钥的有效期(例如 7d 表示 7 天)。
  • role_descriptors: 定义 API 密钥的权限。在这个例子中,API 密钥只能读取名为 my-index 的索引。

输出

json
{
"id": "VuaCfGcBCdbkQm-e5aOx",
"name": "my-api-key",
"api_key": "ui2lp2axTNmsyakw9tvNnw",
"expiration": 1681234567890
}
  • id: API 密钥的唯一标识符。
  • api_key: API 密钥的密钥部分。
  • expiration: API 密钥的过期时间戳。
警告

请务必保存好 idapi_key,因为它们在创建后无法再次获取。

使用 API 密钥

创建 API 密钥后,您可以在请求中使用它来进行身份验证。以下是一个使用 API 密钥访问 Elasticsearch 的示例:

bash
curl -H "Authorization: ApiKey VuaCfGcBCdbkQm-e5aOx:ui2lp2axTNmsyakw9tvNnw" \
"http://localhost:9200/my-index/_search"

在这个示例中,VuaCfGcBCdbkQm-e5aOxidui2lp2axTNmsyakw9tvNnwapi_key。通过这种方式,您可以安全地访问 Elasticsearch 集群。

实际应用场景

场景 1:自动化脚本

假设您有一个自动化脚本,需要定期从 Elasticsearch 中读取数据。您可以使用 API 密钥来避免在脚本中硬编码用户名和密码,从而提高安全性。

bash
#!/bin/bash

API_KEY="VuaCfGcBCdbkQm-e5aOx:ui2lp2axTNmsyakw9tvNnw"
curl -H "Authorization: ApiKey $API_KEY" \
"http://localhost:9200/my-index/_search"

场景 2:微服务通信

在微服务架构中,多个服务可能需要访问 Elasticsearch。通过为每个服务分配不同的 API 密钥,您可以更好地控制每个服务的权限,并在发生安全事件时快速撤销特定服务的访问权限。

json
{
"service1": {
"id": "VuaCfGcBCdbkQm-e5aOx",
"api_key": "ui2lp2axTNmsyakw9tvNnw"
},
"service2": {
"id": "WuaDfHdCDeblRn-f6bPy",
"api_key": "vj3mq3byUOntzbx0uwOox"
}
}

总结

Elasticsearch API 密钥是一种强大且灵活的身份验证机制,适用于各种场景,如自动化脚本、微服务通信等。通过 API 密钥,您可以安全地访问 Elasticsearch 集群,而无需暴露敏感的用户名和密码。

提示

为了进一步提高安全性,建议定期轮换 API 密钥,并限制其权限范围。

附加资源

练习

  1. 创建一个具有写入权限的 API 密钥,并使用它向 Elasticsearch 写入数据。
  2. 尝试为不同的服务创建不同的 API 密钥,并测试它们的权限范围。
  3. 研究如何通过 Elasticsearch 的 API 密钥管理功能,批量删除过期的 API 密钥。