模板学堂丨JumpServer安全运维审计大屏

发布于 2022年07月21日

2022年6月21日,DataEase开源数据可视化分析平台发布模板市场(https://dataease.io/templates/)。模板市场旨在为DataEase用户提供专业、美观、拿来即用的仪表板模板,方便用户根据自身的业务需求和使用场景选择对应的仪表板模板,并在优质模板的基础上轻松制作自己的仪表板。

从2022年7月开始,我们将会为您分享当月的精选模板,以及精选模板的应用教程,同时面向广大用户同步DataEase模板市场的上新情况。

7月精选模板

本月为大家推荐的精选模板是JumpServer安全运维审计大屏。

JumpServer是FIT2CLOUD飞致云旗下的开源堡垒机,是全球首款完全开源、符合4A规范的运维安全审计系统。JumpServer安全运维审计大屏主要是通过对IT运维数据指标的可视化展示,让业务人员可以快速接收运维统计数据,从而加强运维安全管控及定期的运维审计,更好地进行运行维护工作,为工作增能提效。

1. 大屏信息

■ 产品版本号:JumpServer开源堡垒机基于v2.20.2版本,DataEase开源数据可视化分析平台基于v1.11.1版本。

■ 根据安全运维审计大屏的使用场景和面向人员,此次共统计11项指标,各指标项具体如下:

模板学堂丨JumpServer安全运维审计大屏

2. 大屏展示

模板学堂丨JumpServer安全运维审计大屏

模板应用

接下来,我们为大家详细讲解如何应用安全运维审计大屏模板。

1. 模板下载

首先,进入DataEase模板市场主页,找到运维安全审计大屏。模板市场地址为:
https://dataease.io/templates/
。如需快速检索,可进行关键字搜索或分类切换,可以快速找到想要的大屏模板。

模板学堂丨JumpServer安全运维审计大屏

点击“运维安全审计大屏”仪表板模板进入详情界面。点击“下载”按钮后可将模板下载至本地。

模板学堂丨JumpServer安全运维审计大屏

2. 模板导入

进入自己的DataEase系统的“仪表板”模块中,通过下图所示以“导入模板”的方式新建仪表板,点击“上传模板”按钮,选择使用“模板市场”下载的运维安全审计大屏的模板文件。

导入成功后如下图所示,该模板的各组件、样式、背景及仪表板数据等均被带入到新建的仪表板中。

模板学堂丨JumpServer安全运维审计大屏

除上述方式外,也可以提前将模板上传至DataEase的“模板管理”功能模块中,在新建仪表板时选择“复用模板”选项即可。

模板学堂丨JumpServer安全运维审计大屏

3. 接入数据源

DataEase支持多种数据库作为数据源,JumpServer使用的是MySQL数据库,这里输入相应信息,创建数据源。

模板学堂丨JumpServer安全运维审计大屏

4. 添加数据集

在“数据集”设计模块,可以从数据源中选择上一步添加的数据库,选择数据库中对应的表作为一个数据集,设定同步模式。这里需要了解每张表中所保存的数据类型,便于添加对应的数据。

在此处添加的数据集均为SQL数据集,具体添加方法大家可参考DataEase官方文档:
https://dataease.io/docs/user_manual/dataset_configuration/dataset_SQL/

下图为涉及的所有数据集截图。

模板学堂丨JumpServer安全运维审计大屏

具体各个数据集使用的SQL语句如下:

① 在线会话

■ 指标说明:查询当前正在进行中的会话数量。

■ 指标口径:取当前没有结束的会话总数。

■ SQL语句:

select count(1) '在线会话数' from terminal_session
where is_finished = false

② 用户总数

■ 指标说明:查询用户总数。

■ 指标口径:取系统中角色为非内部使用的用户总数。

■ SQL语句:

select count(*) '用户总数' from users_user where role <> 'App'

③ 资产总数

■ 指标说明:查询所有组织资源数量。

■ 指标口径:取当前存在的总资产数。

■ SQL语句:

select count(1) '资产总数' from assets_asset

④ 用户/资产活跃情况

■ 指标说明:查询近期用户活跃情况、资产活跃情况、历史在线会话情况。

■ 指标口径:近期用户活跃情况取近7天登录过的用户总数;资产活跃情况取近7天产生过会话的资产总数;历史在线会话情况取近7天产生的会话总数。

■ 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.`日期`

⑤ 高危命令统计

■ 指标说明:查询高危命令情况。

■ 指标口径:高危命令取风险等级不等于0的数据,即通过命令过滤后正则表达式命中的数量。

■ SQL语句:

SELECT * FROM terminal_command WHERE risk_level != 0;

⑥ 资产活跃度(近30天)

■ 指标说明:查询近30天的资产活跃度。

■ 指标口径:取近30天的产生已经结束的SSH会话的资产总数,并按照组织名称分组显示。

■ SQL语句:

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

⑦ 各组织资产占比

■ 指标说明:查询所有组织服务器数量。

■ 指标口径:取各个组织的资产数,按照组织分组。

■ 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

⑧ 最近一天所有用户登录情况

■ 指标说明:近一天的用户登录次数。

■ 指标口径:取最近一天所有用户的登录次数,按照用户名分组并按照登录次数降序排列。

■ 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

⑨ 最近一周所有用户登录排名

■ 指标说明:查询最近一周所有用户登录次数。

■ 指标口径:取近七天所有用户登录次数,按照用户名分组并按照登录次数降序排列。

■ 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

⑩ 最近一天资产登录TOP 5

■ 指标说明:查询最近一天资产的被访问次数。

■ 指标口径:取近一天资产的登录次数,按照登录次数降序排列。

■ SQL语句:

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

⑪ 最近一周资产登录排名

■ 指标说明:查询最近一周所有资产的登录次数。

■ 指标口径:取近七天所有资产的登录次数,并按照登录次数降序排列。

■ 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. 数据替换

接下来,将视图所关联的数据集替换为自己的实际数据即可。

模板学堂丨JumpServer安全运维审计大屏

6. 注意事项

① 类别轴/维度字段缺失

由于在模板设计阶段涉及到了人员名称等敏感信息,因此在数据集内新建了脱敏字段。这样用户在替换数据集时在数据维度区域会出现下图红框所示的情况。在此,大家可以将红框指标删除,把“用户名”字段直接拖入所示位置即可。

② 替换字段后,维度字段过长导致图表显示不全

模板学堂丨JumpServer安全运维审计大屏

当出现如上图所示的情况时,有两个解决方案,具体如下:

方案一:对现有字段做数据截取。具体操作步骤可参考DataEase官方文档“新建计算字段”部分:

https://dataease.io/docs/user_manual/dataset_design/#24;

方案二:将展示字段替换为IP字段。

7. 最终效果

经过上述步骤,大家就可以得到自己的运维安全审计大屏了。