调用钉钉机器人API接口将堡垒机安全运维告警单发给运维人员

简介: 调用钉钉机器人API接口将堡垒机安全运维告警单发给运维人员

调用钉钉机器人API接口将堡垒机安全运维告警消息单发给运维人员

1、原场景如下

在堡垒机运维时的安全告警是通过钉钉webhook机器人发送到钉钉群

比如某个运维人员操作了passwd命令,这时钉钉群里有如下告警

(图片点击放大查看)

安全运维工程师在收到钉钉群里的告警消息后,先通过告警里面的人员信息钉钉中查到这个运维人员,然后手动将告警转发给这个运维人员提醒该运维人员

2、需求

在思考能否将告警消息直接通过机器人将告警消息单独发送这个操作了passwd的运维人员,这样能做到立马自动通知

3、探索过程

在查看钉钉机器人的API文档后

https://open.dingtalk.com/document/orgapp/chatbots-send-one-on-one-chat-messages-in-batches

(图片点击放大查看)

(图片点击放大查看)

有了一些思路

HTTP请求格式如下

POST /v1.0/robot/oToMessages/batchSend HTTP/1.1
Host:api.dingtalk.com
x-acs-dingtalk-access-token:asdasdasdasd
Content-Type:application/json
{
  "robotCode" : "dingxxxxxx",
  "userIds" : [ "manager1234" ],
  "msgKey" : "sampleMarkdown",
  "msgParam" : "{\"text\": \"hello text\",\"title\": \"hello title\"}"
}

难点主要在于userIDs这个参数获取和msgParam告警文本消息(markdown格式)如何通过GrayLog告警模块构造出来

在Github上搜索graylog时,找到了一个可能实现这个功能的graylog插件

https://github.com/airbus-cyber/graylog-plugin-logging-alert

(图片点击放大查看)

实现的过程比较痛苦,反复调试与试错了一个星期,最终搞定了

4、实现的大致步骤

下面简单说一下具体的实现步骤

1、下载Graylog4.2版本对应的graylog-plugin-logging-alert插件包并安装

rpm -ivh graylog-plugin-logging-alert-4.1.2-1.noarch.rpm 
systemctl restart graylog-server

重启graylog-server服务生效

(图片点击放大查看)

2、修改Logging Alert Notification的配置

Update Logging Alert Notification Configuration

(图片点击放大查看)

这里我用逗号,来分隔,为了方便后面构造json格式请求body

(图片点击放大查看)

3、新建一下Logging Alert类型的告警通知

robotCode来自

Body Template内容如下

(图片点击放大查看)

POST-BODY{"robotCode": "dingeXXXXXXXdmzd"
  ${if backlog && backlog[0]} "userIds":["${backlog[0].fields.userIDnumber}"]
  "msgKey": "sampleMarkdown"
  "msgParam": "{\\"title\\": \\"${event_definition_title} \\"
             \\"text\\": \\"## [堡垒机告警信息] \\r### <font color=#FF0000> 告警描述:${event_definition_description}</font> \\r##### <font color=#FF0000>告警产生时间</font>:${backlog[0].timestamp} \\r##### <font color=#67C23A>告警详细情况</font>:<font color=#FF0000>员工:${backlog[0].fields.user} </font>通过堡垒机登录<font color=#FF0000>${backlog[0].fields.resource}</font>于<font color=#FF0000>${backlog[0].fields.timestamp}</font>时间点执行了passwd命令操作,具体操作命令见告警原始日志中command内容 \\r##### <font color=#67C23A>告警服务器名称</font>:<font color=#FF0000>${backlog[0].fields.resource}</font> \\r##### <font color=#67C23A>告警服务器的IP</font>:${backlog[0].fields.targetIP} \\r##### <font color=#67C23A>告警原始日志</font>:${backlog[0].message} \\" }" ${end}}

4、在原来推送到Webhook机器人的告警下再加上Logging Alert类型

还是保留之前钉钉群里的webhook机器人告警,两种告警并行

(图片点击放大查看)

5、在Graylog服务器编写一下日志监控的shell脚本

(图片点击放大查看)

(图片点击放大查看)

脚本内容如下monitor_alertjson_sendtodingdingrobot.sh

#!/bin/bash
send_dingtalk_robot(){
Token=`curl -s -X POST 'https://api.dingtalk.com/v1.0/oauth2/accessToken' -H 'Content-Type: application/json' -d '{"appKey": "请根据自己的环境自行补充","appSecret": "请根据自己的环境自行补充"}' | jq -r .accessToken`
curl -s -X POST 'https://api.dingtalk.com/v1.0/robot/oToMessages/batchSend' -H 'Content-Type: application/json' -H "x-acs-dingtalk-access-token:$Token" -d@/tmp/message.json
}
logfile="/var/log/graylog-server/server.log"
outputfile="/tmp/message.json"
keyword="POST-BODY"
# 实时监控日志文件
tail -n 0 -f "$logfile" | while read -r line; do
  if [[ $line == *"$keyword"* ]]; then
    # 提取关键字后面的内容
    content=$(echo "$line" | awk -F"$keyword" '{print $2}')
    # 存储到文件
    echo "$content" > "$outputfile"
    echo "已提取并保存内容到 $outputfile"
    send_dingtalk_robot
    echo "已发送钉钉机器人"
  fi
done

6、执行监控脚本

当触发了告警时/var/log/graylog-server/server.log中会出现[LoggingAlert] POST-BODY的日志

监控脚本会自动提取后输出到/tmp/message.json,然后调send_dingtalk_robot函数自动发送出来

(图片点击放大查看)

(图片点击放大查看)

最终的效果如下 钉钉机器人通过单聊的方式将告警通知给该运维人员

当然只是简单实现了这个功能,后续还需要继续优化该脚本

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
8天前
|
安全 Java API
第7章 Spring Security 的 REST API 与微服务安全(2024 最新版)(上)
第7章 Spring Security 的 REST API 与微服务安全(2024 最新版)
28 0
第7章 Spring Security 的 REST API 与微服务安全(2024 最新版)(上)
|
18天前
|
缓存 前端开发 API
API接口封装系列
API(Application Programming Interface)接口封装是将系统内部的功能封装成可复用的程序接口并向外部提供,以便其他系统调用和使用这些功能,通过这种方式实现系统之间的通信和协作。下面将介绍API接口封装的一些关键步骤和注意事项。
|
25天前
|
监控 前端开发 JavaScript
实战篇:商品API接口在跨平台销售中的有效运用与案例解析
随着电子商务的蓬勃发展,企业为了扩大市场覆盖面,经常需要在多个在线平台上展示和销售产品。然而,手工管理多个平台的库存、价格、商品描述等信息既耗时又容易出错。商品API接口在这一背景下显得尤为重要,它能够帮助企业在不同的销售平台之间实现商品信息的高效同步和管理。本文将通过具体的淘宝API接口使用案例,展示如何在跨平台销售中有效利用商品API接口,以及如何通过代码实现数据的统一管理。
|
1月前
|
安全 算法 API
产品经理必备知识——API接口
前言 在古代,我们的传输信息的方式有很多,比如写信、飞鸽传书,以及在战争中使用的烽烟,才有了著名的烽火戏诸侯,但这些方式传输信息的效率终究还是无法满足高速发展的社会需要。如今万物互联的时代,我通过一部手机就可以实现衣食住行的方方面面,比如:在家购物、远程控制家电、自动驾驶等等,背后都离不开我们今天要聊的API接口。
|
1月前
|
数据采集 JSON API
如何实现高效率超简洁的实时数据采集?——Python实战电商数据采集API接口
你是否曾为获取重要数据而感到困扰?是否因为数据封锁而无法获取所需信息?是否因为数据格式混乱而头疼?现在,所有这些问题都可以迎刃而解。让我为大家介绍一款强大的数据采集API接口。
|
1天前
|
前端开发 Java 测试技术
IDEA 版 API 接口神器来了,一键生成文档,贼香!
IDEA 版 API 接口神器来了,一键生成文档,贼香!
6 0
|
2天前
|
API 开发者
邮件API接口使用的方法和步骤
AOKSEND指南:了解和使用邮件API接口,包括选择适合的接口(如AOKSEND、Mailgun、SMTP),获取访问权限,配置发件人、收件人及邮件内容,调用接口发送邮件,并处理返回结果,以高效集成邮件功能。
|
5天前
|
Java API Android开发
[NDK/JNI系列04] JNI接口方法表、基础API与异常API
[NDK/JNI系列04] JNI接口方法表、基础API与异常API
11 0
|
8天前
|
XML JSON API
快速淘宝商品详情页面API接口传输 php
PI(Application Programming Interface,应用程序接口)是一组预定义的函数、协议和工具,用于构建软件应用程序之间的交互。它允许不同的软件系统和应用通过统一的接口进行数据交换和通信
|
12天前
|
人工智能 API 开发者
免费使用Kimi的API接口,kimi-free-api真香
今年AI应用兴起,各类智能体涌现,但API免费额度有限。为解决这一问题,GitHub上的[kimi-free-api](https://github.com/LLM-Red-Team/kimi-free-api)项目提供了方便,支持高速流式输出、多轮对话等,与ChatGPT接口兼容。此外,还有其他大模型的免费API转换项目,如跃问StepChat、阿里通义Qwen等。该项目可帮助用户免费体验,通过Docker-compose轻松部署。只需获取refresh_token,即可开始使用。这个开源项目促进了AI学习和开发,为探索AI潜力提供了新途径。
233 2

热门文章

最新文章