Elasticsearch学习笔记(八) Metricbeat安全配置—通过API连接Elasticsearch

在前面的教程中,我们配置了Metricbeat的数字证书,但是在配置文件中使用了elastic的内置超级用户elastic并且在配置文件中硬编码了用户名和密码,这样做是有一定的安全风险的,为了解决这个问题,需要在kibana中为metricbeat新建一个权限用户,然后利用API的方式实现Metricbeat和kibana之间的通信。

1.新建用户

登录kibana的管理页面,按照下面的步骤新建一个发布用户。

1.1 为新用户创建角色

Stack Management > Roles > Create role

Stack管理->安全->角色

复制代码
Role name: metricbeat-user
Cluster privileges: monitor read_ilm manage_index_templates
Indices: metricbeat-*
Privileges: create_doc

通过上面的操作新建了一个用户角色:metricbeat-user,它的集群权限为monitor、read_ilm和manage_index_templates,对应的索引是metricbeat用户的权限是create_doc。

⚠️ 在创建角色时应当本着最小权限原则,否则就失去了利用角色控制安全的作用了。

⚠️ 集群权限如果缺少manage_index_templates时会报错。

1.2 创建用户

创建用户

👿 用户权限这里除了要为用户赋1.1中新创建的角色,还要再加上editor角色权限。

2.生成API

使用kibana的开发工具,使用下面的命令生成API。

复制代码
# 生成API 
POST /_security/api_key/grant
{
  "grant_type": "password",
  "username": "metric",
  "password": "Yourpassword",
  "api_key": {
    "name": "metric"
  }
}

💁‍♂ 注意不要照抄我的命令,username和password根据实际进行填写。

生成的API先保存起来,后面还会用到。

复制代码
{
  "id": "Hi22rJIBZeCTcJCiOY1O",
  "name": "metric",
  "api_key": "zOvXXaWdQISYa5kvRNoPSw",
  "encoded": "SGkyMnJKSUJaZUNUY0pDaU9ZMU86ek92WFhhV2RRSVNZYTVrdlJOb1BTdw=="
}

3.添加API到keystore

接下来把上面生成的API添加到keystore中。这里需要用到的是:<api_key>。

以我上面的API为例就是:Hi22rJIBZeCTcJCiOY1O:zOvXXaWdQISYa5kvRNoPSw

使用下面的命令将:<api_key>添加到keystore中。

复制代码
/usr/share/metricbeat/bin/metricbeat keystore add ES_API_KEY -c /etc/metricbeat/metricbeat.yml --path.home /usr/share/metricbeat/ --path.data /var/lib/metricbeat

📓 ES_API_KEY是你自定义的key name请根据实际情况命名。

📓 执行上条命令时,输入等待是不显字符的,要小心操作,防止重复输入:<api_key>。如果感觉输入有误可以使用下面的命令删除keystore

复制代码
/usr/share/metricbeat/bin/metricbeat keystore remove ES_API_KEY -c /etc/metricbeat/metricbeat.yml --path.home /usr/share/metricbeat/ --path.data /var/lib/metricbeat

4.修改metricbeat配置文件

复制代码
output.elasticsearch:
  # Array of hosts to connect to.
  hosts: ["https://192.168.50.7:9200"]
  ssl.certificate_authorities: ["/etc/metricbeat/certs/ca.crt"]
  ssl.certificate: "/etc/metricbeat/certs/elastic.crt"
  ssl.key: "/etc/metricbeat/certs/elastic.key"
  protocol: "https"
  api_key: "${ES_API_KEY}"

这里就使用${ES_API_KEY}代替了前面的硬编码,安全性得到了提升。

⚠️ 我使用了一个新的节点,这里的证书配置请参考我前面的教程。

使用下面的命令检查配置文件是否正确。

复制代码
/usr/share/metricbeat/bin/metricbeat test config -c /etc/metricbeat/metricbeat.yml --path.home /usr/share/metricbeat/ --path.data /var/lib/metricbeat

检查输出是否正常。

复制代码
/usr/share/metricbeat/bin/metricbeat test output -c /etc/metricbeat/metricbeat.yml --path.home /usr/share/metricbeat/ --path.data /var/lib/metricbeat

如果出现上图所示输出说明证书配置正确。

如果出现以下报错信息:

talk to server... ERROR 401 Unauthorized: {"error":{"root_cause":{"type":"security_exception","reason":"unable to authenticate with provided credentials and anonymous access is not allowed for this request","additional_unsuccessful_credentials":"API key: invalid ApiKey value","header":{"WWW-Authenticate":\["Basic realm="security" charset="UTF-8"","Bearer realm="security"","ApiKey"}}],"type":"security_exception","reason":"unable to authenticate with provided credentials and anonymous access is not allowed for this request","additional_unsuccessful_credentials":"API key: invalid ApiKey value","header":{"WWW-Authenticate":"Basic realm="security" charset="UTF-8"","Bearer realm="security"","ApiKey"}},"status":401}

说明ApiKey有问题,请检查你的:<api_key>或者删除再重新添加。

报错信息

Exiting: error loading template: failed to load template: couldn't load template: 403 Forbidden: {"error":{"root_cause":{"type":"security_exception","reason":"action \[indices:admin/index_template/put is unauthorized for API key id py3JrJIBZeCTcJCiiZeI of user metric, this action is granted by the cluster privileges manage_index_templates,manage,all"}],"type":"security_exception","reason":"action indices:admin/index_template/put is unauthorized for API key id py3JrJIBZeCTcJCiiZeI of user metric, this action is granted by the cluster privileges manage_index_templates,manage,all"},"status":403}. Response body: {"error":{"root_cause":{"type":"security_exception","reason":"action \[indices:admin/index_template/put is unauthorized for API key id py3JrJIBZeCTcJCiiZeI of user metric, this action is granted by the cluster privileges manage_index_templates,manage,all"}],"type":"security_exception","reason":"action indices:admin/index_template/put is unauthorized for API key id py3JrJIBZeCTcJCiiZeI of user metric, this action is granted by the cluster privileges manage_index_templates,manage,all"},"status":403}

说明用户角色权限配置有问题,应当按照最小权限的原则配置,这里需要多次尝试,可以试着先给最高权限是否报错会消失,然后再依次降低权限下图是我的权限配置。

5.重启metricbeat验证

重启metricbeat并到kibana中查看监测数据是否正常。

复制代码
systemctl restart metricbeat


相关推荐
袁小皮皮不皮2 小时前
1.HCIP BFD 学习笔记(优化版)
服务器·网络·笔记·网络协议·学习·智能路由器·ip
装不满的克莱因瓶2 小时前
【自动驾驶领域】学习 Cityscapes 数据集——城市街景语义理解的标准基准
人工智能·pytorch·python·深度学习·学习·机器学习·自动驾驶
清辞8533 小时前
产品经理需求推进流程
大数据·深度学习·学习·产品经理
YM52e4 小时前
鸿蒙PC ArkTS 声明合并问题深度解析与最佳实践
学习·华为·harmonyos·鸿蒙·鸿蒙系统
海兰5 小时前
【实用程序】电商销售分析仪表盘 — 从零搭建一个AI参与的全栈数据洞察系统
人工智能·学习·算法
ken22325 小时前
在 Libreoffice Calc中输入自定义表情字符时,需要保存之后,才能正常显示
学习
zwenqiyu5 小时前
P5283 [十二省联考 2019] 异或粽子题解
c++·学习·算法
编程圈子5 小时前
电机驱动开发学习2. 直流无刷电机工作原理
驱动开发·学习
MartinYeung56 小时前
[论文学习]大型语言模型(LLM)安全与隐私-基于善、恶、丑的深度分析
学习·安全·语言模型
什仙6 小时前
Mathcad Prime 的教程资料
学习·工具