Arkime用户操作审计:满足合规性要求的日志配置
【免费下载链接】arkime 项目地址: https://gitcode.com/gh_mirrors/ark/arkime
在当今数据安全合规要求日益严格的环境中,用户操作审计已成为企业安全架构的关键组成部分。Arkime作为一款强大的网络流量分析工具,提供了完善的用户操作审计功能,帮助组织满足GDPR、HIPAA等合规性要求。本文将详细介绍如何配置和使用Arkime的审计日志功能,确保所有用户操作都可追溯、可审计。
审计日志核心组件
Arkime的审计功能主要通过cont3xt/audit.js模块实现,该模块负责记录、存储和管理用户操作日志。审计系统采用分层架构设计,包含以下核心组件:
- 审计日志生成器:记录用户的关键操作,如登录、搜索、数据访问等
- 日志存储管理器:负责日志的持久化存储和过期清理
- 权限控制层:确保只有授权用户可以访问和管理审计日志
- 查询API:提供审计日志的查询和导出功能
审计日志数据结构
每个审计日志条目包含以下关键字段:
| 字段名 | 类型 | 描述 |
|---|---|---|
| userId | 字符串 | 执行操作的用户ID |
| issuedAt | 数字 | 操作时间戳(毫秒) |
| took | 数字 | 操作执行耗时(毫秒) |
| resultCount | 数字 | 操作结果数量 |
| iType | 字符串 | 指标类型 |
| indicator | 字符串 | 指标值 |
| tags | 数组 | 操作相关标签 |
| viewId | 字符串 | 关联视图ID(可选) |
审计日志的验证逻辑在verifyAudit方法中实现,确保所有必要字段都符合要求:
static verifyAudit(audit) {
if (typeof (audit.userId) !== 'string') { return 'must have field userId of type string'; }
if (typeof (audit.issuedAt) !== 'number') { return 'must have field issuedAt of type number (milliseconds)'; }
if (typeof (audit.took) !== 'number') { return 'must have field took of type number (milliseconds)'; }
if (typeof (audit.resultCount) !== 'number') { return 'must have field resultCount of type number'; }
if (typeof (audit.iType) !== 'string') { return 'must have field iType of type string'; }
if (typeof (audit.indicator) !== 'string') { return 'must have field indicator of type string'; }
if (!Array.isArray(audit.tags)) { return 'must have field tags of type Array'; }
if (typeof (audit.viewId) !== 'string' && audit.viewId !== undefined) { return 'field viewId must be of type string or undefined'; }
return null;
}
审计日志配置与管理
日志保留期配置
Arkime允许管理员配置审计日志的保留时间,默认情况下系统会自动清理过期日志。配置通过expireHistoryDays参数实现,可在初始化审计模块时设置:
// 审计模块初始化示例
Audit.initialize({
expireHistoryDays: 90 // 保留90天的审计日志
});
日志清理机制通过定时任务实现,每小时执行一次过期日志清理:
// 自动清理过期日志
const deleteExpiredAudits = () => {
Db.deleteExpiredAudits(Date.now() - expireHistoryMsBack).then((numDeleted) => {
console.log(`Successful deletion of ${numDeleted} expired history logs`);
}).catch((err) => {
console.log('ERROR - Failed to delete expired history logs.', err);
});
};
// 立即执行一次清理,然后每小时执行一次
deleteExpiredAudits();
setInterval(deleteExpiredAudits, hourMs);
审计日志权限控制
Arkime的审计日志系统实现了严格的权限控制机制,确保只有授权用户可以访问和管理审计日志。权限控制逻辑在apiGet和apiDelete方法中实现:
// 获取审计日志的权限控制
static async apiGet(req, res, next) {
const roles = await req.user.getRoles();
const audits = await Db.getMatchingAudits(req.user.userId, [...roles], req.query);
// 按时间戳降序排序
audits.sort((a, b) => b.issuedAt - a.issuedAt);
res.send({ success: true, audits });
}
// 删除审计日志的权限控制
static async apiDelete(req, res, next) {
const audit = await Db.getAudit(req.params.id);
const roles = [...await req.user.getRoles()];
if (!audit) {
return res.send({ success: false, text: 'History log not found' });
}
// 权限检查
if (!req.user.removeEnabled) {
return res.send({ success: false, text: 'Can not delete a history log when user has data removal disabled.' });
}
if (req.user.userId !== audit.userId && !roles?.includes('cont3xtAdmin')) {
return res.send({ success: false, text: 'User does not have permission to delete this log.' });
}
// 执行删除操作
const results = await Db.implementation.deleteAudit(req.params.id);
if (!results) {
return res.send({ success: false, text: 'Database error' });
}
res.send({ success: true, text: 'Success' });
}
根据代码逻辑,只有满足以下条件之一的用户才能删除审计日志:
- 日志的创建者(userId匹配)
- 具有
cont3xtAdmin角色的管理员 - 启用了数据删除权限(removeEnabled为true)
审计日志查询与导出
查询API使用
Arkime提供了RESTful API用于查询审计日志,支持按用户、时间范围、操作类型等条件过滤:
GET /api/audits?searchTerm=192.168.1.1&startMs=1620000000000&stopMs=1622592000000
该API返回符合条件的审计日志列表,按时间戳降序排列:
{
"success": true,
"audits": [
{
"userId": "admin",
"issuedAt": 1622591999000,
"took": 120,
"resultCount": 50,
"iType": "ip",
"indicator": "192.168.1.1",
"tags": ["search", "ip"],
"viewId": "default"
},
// 更多审计日志...
]
}
结合用户角色的权限控制
审计日志的查询结果会根据用户角色进行过滤,普通用户只能查看自己的操作日志,而管理员可以查看所有用户的操作日志。这一逻辑在Db.getMatchingAudits方法中实现,确保数据访问符合最小权限原则。
集成用户认证与授权
Arkime的审计系统与用户认证模块紧密集成,通过common/auth.js实现细粒度的权限控制。系统支持多种认证方式,包括:
- 基本认证(Basic Auth)
- 摘要认证(Digest Auth)
- 基于头部的认证(Header Auth)
- OpenID Connect认证(OIDC)
- 表单认证(Form Auth)
角色与权限映射
Arkime定义了多种系统角色,用于控制用户对审计功能的访问权限:
const systemRolesMapping = {
superAdmin: ['usersAdmin', 'arkimeAdmin', 'arkimeUser', 'parliamentAdmin', 'parliamentUser', 'wiseAdmin', 'wiseUser', 'cont3xtAdmin', 'cont3xtUser'],
usersAdmin: [],
arkimeAdmin: ['arkimeUser'],
arkimeUser: [],
parliamentAdmin: ['parliamentUser'],
parliamentUser: [],
wiseAdmin: ['wiseUser'],
wiseUser: [],
cont3xtAdmin: ['cont3xtUser'],
cont3xtUser: []
};
其中,cont3xtAdmin角色拥有审计日志的完全管理权限,包括查看所有用户日志和删除日志的权限。
用户操作审计范围
Arkime审计系统记录的用户操作包括但不限于:
- 用户登录和注销
- 流量搜索操作
- 数据导出和下载
- 配置修改
- 角色和权限变更
- PCAP文件访问
所有这些操作都会被记录到审计日志中,确保完整的操作审计跟踪。
最佳实践与合规性建议
审计日志保留策略
为满足不同合规性要求,建议根据组织的合规需求配置适当的日志保留期:
- GDPR合规:建议至少保留7年
- HIPAA合规:建议保留6年以上
- PCI DSS合规:建议保留至少1年
可以通过修改配置文件中的expireHistoryDays参数来设置:
# 在配置文件中设置审计日志保留期
expireHistoryDays=365
安全存储审计日志
审计日志包含敏感的操作信息,建议采取以下措施确保其安全性:
- 定期备份审计日志,防止日志数据丢失
- 配置单独的审计日志存储,与业务数据分离
- 对审计日志进行完整性校验,防止篡改
- 限制对审计日志存储的直接访问
审计日志分析与告警
建议结合SIEM系统对Arkime的审计日志进行实时监控,设置以下关键告警规则:
- 多次失败的登录尝试
- 大量数据下载操作
- 异常时间的访问(如凌晨时段的批量操作)
- 管理员权限的变更
- 对敏感IP或端口的频繁访问
通过common/notifier.js模块,可以配置审计告警通知,及时响应潜在的安全事件。
总结与展望
Arkime的用户操作审计系统为组织提供了强大的合规性支持,通过本文介绍的配置和最佳实践,您可以构建一个满足严格合规要求的审计体系。关键要点包括:
- 合理配置审计日志保留期,满足不同合规框架的要求
- 利用角色权限控制,确保审计数据的安全性
- 定期审查审计日志,及时发现异常操作
- 结合自动化工具进行日志分析和告警
随着Arkime的不断发展,审计功能将进一步增强,未来可能会引入更细粒度的操作审计、实时合规性检查和更丰富的可视化报表功能。建议定期查看项目的更新日志CHANGELOG,及时了解新功能和改进。
通过正确配置和使用Arkime的审计功能,组织不仅可以满足法规合规要求,还能提高整体安全态势感知能力,及时发现和响应潜在的安全威胁。
【免费下载链接】arkime 项目地址: https://gitcode.com/gh_mirrors/ark/arkime
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考




