系统架构 - 云控后台
业务模型
云控后台为了将 RASP Agent 分组,引入 APP 的概念,每个 APP 代表一个业务线,每个 APP 有独立的 Secret 用于提供认证,每个 APP 可以管理多个 RASP Agent 的配置和插件。
技术架构
目前,Agent 管理后台采用的是 Go 语言编写,数据库采用的是 MongoDB + Elasticsearch,通讯采用 HTTP/HTTPS + JSON 定时通讯的方式。 整体的架构图如下所示:
如上图所示:
- 虚线下方为安装了 RASP 的服务器,上方为云控后台,云控后台分为
Agent Server
和Panel Server
,Agent Server
负责和RASP Agent
通信,Panel Server
负责用户与前端的交互。Agent Server
可以部署多个实例,Panel Server
只可以部署一个。 - Secrete 认证:RaspAgent和云控后台之间的认证方式采用 appID + secrete私钥 的形式进行认证。
- 主机注册:在启动阶段,若
RASP Agent
开启远程管理,每隔 5 分钟尝试向Agent Server
注册一次,直到成功,注册信息将会存入 MongoDB,用于前端展示。 - 定时心跳:每隔 3 分钟
RASP Agent
与云端通信一次,心跳时间可配置。发送心跳时,同时提交本地配置的版本号。若有更新版本的配置或者插件,云端会通过心跳返回新的配置和插件。 - 报警日志上传:图中绿色箭头为报警日志的上传流向,
Agent Server
采集日志有两种可选模式,第一种模式直接将RASP Agent
上传的日志存入 ES,这种方式在日志量较大的情况下会有日志丢失的情况,第二种是将日志写入文件,然后由 logstash 采集并传入 ES,这种方式较为复杂,但日志不易丢失,不同语言的 RASP 内部日志上传方式如下:- PHP 版本每隔 10s 检查是否有新的日志。若上传成功,会记录文件读取偏移量,并将状态文件落地。
- Java 版本使用 Log4j 内置的缓冲区,默认大小是 128 条。若未发送的日志量超过缓冲区大小,最早的日志会被抛弃。
- 插件与配置升级:用户通过
Panel Server
下发配置和插件到 MongoDB,然后由RASP Agent
通过与Agent Server
心跳取走新的配置和插件。