在 Elasticsearch 中开启 API Key 功能
要使用 Elasticsearch 的 API Key 功能,需要先确保安全功能已启用。以下是完整步骤:
1. 确保安全功能已启用
在 Elasticsearch 的配置文件 elasticsearch.yml
中设置:
yaml
复制
下载
xpack.security.enabled: true xpack.security.authc.api_key.enabled: true
2. 设置内置用户密码(如果尚未设置)
bash
复制
下载
# 运行设置密码工具 bin/elasticsearch-setup-passwords auto # 或者交互式设置 bin/elasticsearch-setup-passwords interactive
3. 重启 Elasticsearch 服务
bash
复制
下载
sudo systemctl restart elasticsearch # 或者直接kill进程后重新启动
4. 验证安全功能是否启用
bash
复制
下载
curl -u elastic:your_password -X GET "http://localhost:9200/_security/_authenticate?pretty"
5. 创建 API Key
方法一:使用 REST API 创建
bash
复制
下载
curl -X POST "http://localhost:9200/_security/api_key" \ -H "Content-Type: application/json" \ -u elastic:your_password \ -d '{ "name": "my-api-key", "expiration": "30d", "role_descriptors": { "limited-role": { "cluster": ["monitor"], "indices": [ { "names": ["*"], "privileges": ["read"] } ] } } }'
方法二:使用 Kibana 创建
-
登录 Kibana
-
导航到 Management → Stack Management → Security → API Keys
-
点击 "Create API key" 按钮
6. 使用 API Key 认证
bash
复制
下载
curl -H "Authorization: ApiKey YOUR_ENCODED_API_KEY" "http://localhost:9200/_cluster/health?pretty"
常见问题解决
-
API Key 功能未启用:
-
确认
elasticsearch.yml
配置正确 -
检查日志是否有错误
-
-
权限不足:
-
确保使用的用户有
manage_api_key
权限
-
-
证书问题(如果使用 HTTPS):
-
添加
-k
参数临时忽略证书验证(仅测试环境) -
或正确配置证书
-
安全建议
-
为 API Key 设置合理的过期时间
-
遵循最小权限原则
-
定期轮换 API Key
-
不要将 API Key 提交到版本控制系统
如需更细粒度的权限控制,可以结合使用角色和权限来限制 API Key 的访问范围。