系统架构 - 云控后台

业务模型

云控后台为了将 RASP Agent 分组,引入 APP 的概念,每个 APP 代表一个业务线,每个 APP 有独立的 Secret 用于提供认证,每个 APP 可以管理多个 RASP Agent 的配置和插件。

技术架构

目前,Agent 管理后台采用的是 Go 语言编写,数据库采用的是 MongoDB + Elasticsearch,通讯采用 HTTP/HTTPS + JSON 定时通讯的方式。整体的架构图如下所示:

ref: rasp-cloud image

如上图所示:

  • 虚线下方为安装了 RASP 的服务器,上方为云控后台,云控后台分为 Agent ServerPanel ServerAgent 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 心跳取走新的配置和插件。