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

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 调用钉钉机器人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日志并进行多维度分析。
相关文章
|
16天前
|
机器人 API Python
智能对话机器人(通义版)会话接口API使用Quick Start
本文主要演示了如何使用python脚本快速调用智能对话机器人API接口,在参数获取的部分给出了具体的获取位置截图,这部分容易出错,第一次使用务必仔细参考接入参数获取的位置。
|
1天前
|
存储 JSON API
淘系API接口(解析返回的json数据)商品详情数据解析助力开发者
——在成长的路上,我们都是同行者。这篇关于商品详情API接口的文章,希望能帮助到您。期待与您继续分享更多API接口的知识,请记得关注Anzexi58哦! 淘宝API接口(如淘宝开放平台提供的API)允许开发者获取淘宝商品的各种信息,包括商品详情。然而,需要注意的是,直接访问淘宝的商品数据API通常需要商家身份或开发者权限,并且需要遵循淘宝的API使用协议。
淘系API接口(解析返回的json数据)商品详情数据解析助力开发者
|
11天前
|
SQL 存储 数据处理
|
14天前
|
XML JSON API
RESTful API设计最佳实践:构建高效、可扩展的接口
【8月更文挑战第17天】RESTful API设计是一个涉及多方面因素的复杂过程。通过遵循上述最佳实践,开发者可以构建出更加高效、可扩展、易于维护的API。然而,值得注意的是,最佳实践并非一成不变,随着技术的发展和业务需求的变化,可能需要不断调整和优化API设计。因此,保持对新技术和最佳实践的关注,是成为一名优秀API设计师的关键。
|
15天前
|
监控 API 数据安全/隐私保护
​邮件API触发式接口分析?邮件API接口好评榜
邮件API在企业通信和营销中至关重要,通过自动化邮件发送流程提升效率与客户满意度。本文解析邮件API触发式接口,即基于特定事件(如用户注册、购买产品)自动发送邮件的技术,能显著加快企业响应速度并增强用户体验。推荐市场上的优秀邮件API产品,包括SendGrid、Mailgun、Amazon SES、Postmark及新兴的AOKSend,它们各具特色,如高发送率、详细分析工具、灵活配置、强大的日志功能及用户友好的API接口,帮助企业根据不同需求选择最合适的邮件API解决方案。
|
17天前
|
存储 安全 API
"解锁企业级黑科技!用阿里云视觉智能打造钉钉级人脸打卡系统,安全高效,让考勤管理秒变智能范儿!"
【8月更文挑战第14天】随着数字化办公的发展,人脸打卡成为企业考勤的新标准。利用阿里云视觉智能开放平台构建类似钉钉的人脸打卡系统,其关键在于:高精度人脸识别API支持复杂场景下的快速检测与比对;活体检测技术防止非生物特征欺骗,确保安全性;云端存储与计算能力满足大数据处理需求;丰富的SDK与API简化集成过程,实现高效、安全的考勤管理。
35 2
|
23天前
|
存储 算法 Oracle
19 Java8概述(Java8概述+lambda表达式+函数式接口+方法引用+Stream+新时间API)
19 Java8概述(Java8概述+lambda表达式+函数式接口+方法引用+Stream+新时间API)
46 8
|
2天前
|
存储 数据采集 API
提升店铺好评秘籍:淘宝商品评论接口与电商 API 接口的深度解析
该接口名为item_review,用于获取淘宝商品评论信息,支持HTTP GET或POST请求,体验API为c0b.cc/R4rbK2。主要请求参数包括商品ID(num_iid)、排序方式(sort)、页码(page)。响应参数涵盖评论内容(rate_content)、评论日期(rate_date)、评论图片(pics)、买家昵称(display_user_nick)、商品属性(auction_sku)
|
7天前
|
API 开发工具 数据安全/隐私保护
【Azure Developer】Python 获取Micrisoft Graph API资源的Access Token, 并调用Microsoft Graph API servicePrincipals接口获取应用ID
【Azure Developer】Python 获取Micrisoft Graph API资源的Access Token, 并调用Microsoft Graph API servicePrincipals接口获取应用ID
|
2月前
|
开发框架 前端开发 JavaScript
循序渐进VUE+Element 前端应用开发(13)--- 前端API接口的封装处理
循序渐进VUE+Element 前端应用开发(13)--- 前端API接口的封装处理

热门文章

最新文章

下一篇
云函数