JumpServer 安全运维审计大屏的设计与实现
转载自:https://kb.fit2cloud.com/?p=112
1 前言
2022年6月21日,DataEase 开源数据库可视化分析平台正式发布模板市场。其中作为众多模版之一的 JumpServer 安全运维审计大屏之一,备受大家青睐。应广大用户要求,在此详细讲解如何应用安全运维审计大屏模版。
2 大屏场景
2.1 需求概述
本次安全运维审计大屏主要是通过对IT运维数据指标的可视化展示,使业务人员可以快速接收运维统计数据,从而加强运维安全管控及定期的运维审计,更好的进行运行维护工作,为工作增能提效。
2.2 统计指标
根据安全运维审计大屏的使用场景和面向人员,此次共统计 11 项指标,各指标项具体如下:
3 模版应用
3.1 模版下载
首先,进入 DataEase 模板市场主页:
https://dataease.io/templates/
如需快速检索,可进行关键字搜索或分类切换。
如需预览或下载模板,可点击对应仪表板进入详情界面。点击“下载”按钮后可将对应模板下载至本地。
3.2 模版导入
进入自己的DataEase系统的“仪表板”模块中,通过下图所示以“导入模板”方式新建仪表板。
导入成功后如下图所示,该模板的各组件、样式、背景及仪表板数据等均被带入到新建仪表板中。
除上述方式外,也可以提前将模板上传至“模板管理”功能模块中,在新建仪表板时选择“复用模板”选项即可。
3.3 接入数据源
DataEase 最新版本支持多种数据库作为数据源,JumpServer 使用的是 MySQL 数据库,这里输入相应信息,创建数据源。
3.4 添加数据集
在数据集设计模块,可以从数据源中选择上一步添加的数据库,选择数据库中对应的表作为一个数据集,设定同步模式。这里要了解每张表中所存的数据类型,便于添加对应的数据。
在此处添加的数据集均为 SQL 数据集,具体添加方法大家可参考 DataEase 官方文档
https://dataease.io/docs/user_manual/dataset_configuration/dataset_SQL/
下图为涉及的所有数据集截图。
4 脚本语句
具体各个数据集使用的 SQL 语句如下:
4.1 在线会话
指标说明
查询当前正在进行中的会话数量。
SQL 语句
在线会话
select count(1) '在线会话数' from terminal_session
where is_finished = false
4.2 用户总数
指标说明
查询用户总数。
SQL 语句
用户总数
select count(*) '用户总数' from users_user where role <> 'App'
4.3 资产总数
指标说明
查询所有组织资源数量。
SQL 语句
资产总数
select count(1) '资产总数' from assets_asset
4.4 用户/资产活跃情况
指标说明
查询近期用户活跃情况、资产活跃情况、历史在线会话情况。
SQL 语句
资产总数
select u.`日期`,u.`活跃用户数`,a.`活跃资产数`,s.`会话数` from (select count(distinct user_id) '活跃用户数', d '日期' from (select DATE_FORMAT(date_start, '%Y-%m-%d') d, user_id from terminal_session where date_start > DATE_SUB(CURDATE(), INTERVAL 7 DAY))t group by d ORDER BY d DESC LIMIT 7) u
left join (select count(distinct asset_id) '活跃资产数', d '日期' from (select DATE_FORMAT(date_start, '%Y-%m-%d') d, asset_id from terminal_session where date_start > DATE_SUB(CURDATE(), INTERVAL 7 DAY))t group by d ORDER BY d DESC LIMIT 7) a
on u.`日期` = a.`日期`
left join (select d '日期', count(1) '会话数' from ( select DATE_FORMAT(date_start, '%Y-%m-%d') d from terminal_session where date_start > DATE_SUB(CURDATE(), INTERVAL 7 DAY)) t group by d ORDER BY d DESC LIMIT 7) s
on u.`日期` = s.`日期`
4.5 高危命令统计
指标说明
查询高危命令情况。
SQL 语句
高危命令统计
SELECT * FROM terminal_command WHERE risk_level !='0'
4.6 资产活跃度(近 30 天)
指标说明
查询近 30 天的资产活跃度。
SQL 语句
资产活跃度(近30天)
select o.name '组织' , count(count_num ) '活跃度'
from orgs_organization o
join
(SELECT
asset, count(*) count_num,
REPLACE(org_id,'-','') org_id
FROM
terminal_session t
WHERE
t.is_finished = 1
and t.protocol='ssh'
AND datediff( NOW(), t.date_end ) <= 30
GROUP BY
org_id, asset) terminal on o.id=terminal.org_id
group by o.name
4.7 各组织资产占比
指标说明
查询所有组织服务器数量。
SQL 语句
各组织资产占比
SELECT t.NAME, COUNT( * ) AS 服务器数量
FROM assets_asset a, orgs_organization t
WHERE LEFT ( a.org_id, 8 ) = LEFT ( t.id, 8 )
GROUP BY t.NAME ORDER BY 服务器数量 DESC
4.8 最近一天所有用户登录情况
指标说明
查询最近一天所有用户登录次数。
SQL 语句
最近一天所有用户登录情况
select name 用户名,login_time 登录次数 from (
SELECT
uu.name name,
count( * ) AS login_time
FROM
audits_userloginlog aul
left join users_user uu
on aul.username = uu.username
WHERE
TO_DAYS( now( ) ) - TO_DAYS( datetime ) <= 1
GROUP BY
aul.username
)t
where name is not null
ORDER BY
login_time DESC
4.9 最近一周所有用户登录排名
指标说明
查询最近一周所有用户登录次数
SQL 语句
最近一周所有用户登录排名
SELECT
(select name from users_user uu where uu.username = au.username) as name,
count( * ) AS 登录次数
FROM
audits_userloginlog au
WHERE
TO_DAYS( now( ) ) - TO_DAYS( datetime ) <= 7
GROUP BY
username
ORDER BY
登录次数 DESC
4.10 最近一天资产登录 top 5
指标说明
查询最近一天资产的被访问次数。
SQL 语句
最近一天资产登录top 5
SELECT
asset,
assets_asset.ip,
COUNT( * ) AS 登录次数
FROM
terminal_session
left join assets_asset
on replace(terminal_session.asset_id, '-', '') = assets_asset.id
WHERE
TO_DAYS( now( ) ) - TO_DAYS( date_end ) <= 1
GROUP BY
asset
ORDER BY
登录次数 DESC
4.11 最近一周资产登录排名
指标说明
查询最近一周所有资产的登录次数。
SQL 语句
最近一周资产登录排名
SELECT
asset,
assets_asset.ip as ip,
COUNT( * ) AS 登录次数
FROM
terminal_session
left join assets_asset
on replace(terminal_session.asset_id, '-', '') = assets_asset.id
WHERE
TO_DAYS( now( ) ) - TO_DAYS( date_end ) <= 7
GROUP BY
asset
ORDER BY
登录次数 DESC
5 数据替换
接下来将视图所关联的数据集替换为自己的实际数据即可。
注意事项
1.类别轴/维度字段缺失
由于在模版设计阶段涉及到了人员名称等敏感信息,因此在数据集内新建了脱敏字段,因此在替换数据集时在数据维度区域会出现下图红框所示情况。再此,大家可以将红框指标删除,把“用户名”字段直接拖入所示位置即可。
2.替换字段后维度字段过长图表显示不全
出现如上图所示情况时,有两个解决方案如下:
方案一:
对现有字段做数据截取。具体操作步骤可参考大家可参考 DataEase 官方文档新建计算字段部分https://dataease.io/docs/user_manual/dataset_design/#24
方案二:
将展示字段替换为 IP 字段
6 最终效果
经过上述步骤大家就可以得到自己的运维安全审计大屏了。