关于 risk-event-summarization
用于 ServiceNow GRC 的风险事件总结技能,面向需要梳理事件影响和后续响应的利益相关者。它结合事件背景、控制缺口、成因和历史模式,形成影响评估与缓解建议。
主要功能
- 01汇总事件背景与时间线
- 02评估财务及其他影响
- 03分析失效或缺失的控制
- 04识别根本原因与促成因素
- 05按优先级提出缓解行动
- 06检测相关事件的历史模式
适用场景
- 01为风险委员会准备事件简报
- 02开展事件复盘与经验总结
- 03支持运营风险监管报告
MCP 相关
使用 SN-Get-Record 和 SN-Query-Table 获取事件、风险、控制及相关问题数据,并通过 SN-Execute-Background-Script 生成分析和管理层叙述。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ happy-technologies-llc/ happy-platform-skills --skill risk-event-summarization安装后在 Claude Code 中输入/risk-event-summarization确认已加载。
详细介绍
GRC 风险事件摘要
概述
此技能可生成 ServiceNow GRC 风险事件的综合摘要,为利益相关者完整呈现事件经过、发生原因、受影响范围以及应采取的应对措施。
主要功能:
- 事件背景: 汇总风险事件详情,包括时间线、类别和触发条件
- 影响评估: 量化风险事件对财务、运营、声誉和监管方面的影响
- 控制分析: 确定事件发生时哪些控制措施失效、被绕过或缺失
- 促成因素分析: 确定导致事件发生的根本原因和促成因素
- 缓解建议: 根据事件严重程度和控制缺口生成并排序缓解措施
- 趋势检测: 识别相关风险事件中的模式,以发现系统性问题
适用场景:
- 风险事件发生后,利益相关者需要结构化简报时
- 需要汇总事件的风险委员会会议期间
- 构建风险事件登记册或损失事件数据库时
- 报告运营风险事件以满足监管要求时
- 开展事件后审查或经验总结会议时
前提条件
- 角色:
sn_grc.manager、sn_risk.manager或admin - 插件:
com.sn_grc、com.sn_risk、com.sn_compliance - 访问权限: 对
sn_risk_event、sn_grc_risk、sn_compliance_control、sn_grc_issue、sn_grc_profile具有读取权限 - 知识: 了解组织风险分类体系和事件分类标准
主要 GRC 表
| 表 | 用途 | 主要字段 |
|---|---|---|
sn_risk_event | 风险事件/损失事件 | number, short_description, state, category, event_date, impact, likelihood, financial_impact, risk, profile |
sn_grc_risk | 关联风险记录 | number, risk_score, residual_risk, inherent_risk, treatment, state, category |
sn_compliance_control | 本应缓解该事件的控制措施 | number, state, effectiveness, test_result, control_objective, owner |
sn_grc_issue | 从事件生成的问题 | number, state, priority, risk_rating, source |
sn_risk_definition | 风险定义和类别 | number, short_description, risk_type, category |
sn_grc_profile | 实体档案 | number, profile_type, applies_to |
流程
第 1 步:检索风险事件详情
获取目标风险事件及其完整背景字段。
使用 MCP(Claude Code/Desktop):
Tool: SN-Get-Record
Parameters:
table_name: sn_risk_event
sys_id: [EVENT_SYS_ID]
fields: sys_id,number,short_description,description,state,category,subcategory,event_date,discovered_date,impact,likelihood,financial_impact,operational_impact,reputational_impact,regulatory_impact,risk,profile,assigned_to,assignment_group,root_cause,contributing_factors,sys_created_on
使用 REST API:
GET /api/now/table/sn_risk_event?sysparm_query=number=[EVENT_NUMBER]&sysparm_fields=sys_id,number,short_description,description,state,category,subcategory,event_date,discovered_date,impact,likelihood,financial_impact,operational_impact,reputational_impact,regulatory_impact,risk,profile,assigned_to,root_cause,contributing_factors&sysparm_limit=1&sysparm_display_value=all
第 2 步:收集关联风险背景
提取与事件关联的风险记录,以了解更广泛的风险情况。
使用 MCP:
Tool: SN-Query-Table
Parameters:
table_name: sn_grc_risk
query: sys_id=[event_risk_sys_id]
fields: sys_id,number,short_description,risk_score,state,treatment,residual_risk,inherent_risk,category,owner,risk_appetite,risk_tolerance
limit: 1
获取同一档案下的所有风险:
Tool: SN-Query-Table
Parameters:
table_name: sn_grc_risk
query: profile=[event_profile_sys_id]^active=true
fields: sys_id,number,short_description,risk_score,residual_risk,inherent_risk,treatment,category
limit: 25
使用 REST API:
GET /api/now/table/sn_grc_risk?sysparm_query=profile=[profile_sys_id]^active=true&sysparm_fields=sys_id,number,short_description,risk_score,residual_risk,inherent_risk,treatment,category&sysparm_limit=25&sysparm_display_value=all
第 3 步:识别受影响的控制措施
查询与风险档案关联的控制措施,确定哪些措施本应防止该事件发生。
使用 MCP:
Tool: SN-Query-Table
Parameters:
table_name: sn_compliance_control
query: profile=[event_profile_sys_id]^active=true
fields: sys_id,number,short_description,state,control_objective,owner,effectiveness,test_result,test_date
limit: 50
使用 REST API:
GET /api/now/table/sn_compliance_control?sysparm_query=profile=[profile_sys_id]^active=true&sysparm_fields=sys_id,number,short_description,state,control_objective,owner,effectiveness,test_result,test_date&sysparm_limit=50&sysparm_display_value=all
第 4 步:检索工作备注和调查历史
提取调查备注,以了解分析人员的发现和促成因素分析。
使用 MCP:
Tool: SN-Query-Table
Parameters:
table_name: sys_journal_field
query: name=sn_risk_event^element_id=[EVENT_SYS_ID]^element=work_notes^ORDERBYDESCsys_created_on
fields: value,sys_created_on,sys_created_by
limit: 25
使用 REST API:
GET /api/now/table/sys_journal_field?sysparm_query=name=sn_risk_event^element_id=[event_sys_id]^element=work_notes^ORDERBYDESCsys_created_on&sysparm_fields=value,sys_created_on,sys_created_by&sysparm_limit=25
第 5 步:检查相关问题和历史事件
识别由该事件引发的 GRC 问题以及类似的历史事件。
使用 MCP:
Tool: SN-Query-Table
Parameters:
table_name: sn_grc_issue
query: source_record=[EVENT_SYS_ID]^ORprofile=[event_profile_sys_id]
fields: sys_id,number,short_description,state,priority,risk_rating,source,sys_created_on
limit: 20
进行历史模式分析:
Tool: SN-Query-Table
Parameters:
table_name: sn_risk_event
query: category=[event_category]^sys_id!=[EVENT_SYS_ID]^event_date>=javascript:gs.daysAgo(365)^ORDERBYDESCevent_date
fields: sys_id,number,short_description,category,event_date,financial_impact,state
limit: 25
第 6 步:生成综合风险事件摘要
使用 MCP:
Tool: SN-Execute-Background-Script
Parameters:
script: |
var eventNumber = 'RE0001234'; // Replace with target event
var gr = new GlideRecord('sn_risk_event');
gr.addQuery('number', eventNumber);
gr.query();
if (!gr.next()) { gs.info('Event not found'); return; }
var summary = {
event: {
number: gr.number.toString(),
title: gr.short_description.toString(),
description: gr.description.toString(),
state: gr.state.getDisplayValue(),
category: gr.category.getDisplayValue(),
event_date: gr.event_date.getDisplayValue(),
discovered_date: gr.discovered_date.getDisplayValue(),
detection_lag_days: 0
},
impact_assessment: {
overall_impact: gr.impact.getDisplayValue(),
financial: gr.financial_impact.toString() || 'Not quantified',
operational: gr.operational_impact.getDisplayValue() || 'Not assessed',
reputational: gr.reputational_impact.getDisplayValue() || 'Not assessed',
regulatory: gr.regulatory_impact.getDisplayValue() || 'Not assessed'
},
affected_controls: [],
contributing_factors: [],
related_issues: [],
historical_pattern: { similar_events_12mo: 0, total_financial_loss: 0 },
mitigation_recommendations: []
};
// Detection lag
if (gr.event_date.toString() && gr.discovered_date.toString()) {
var evtDate = new GlideDateTime(gr.event_date.toString());
var discDate = new GlideDateTime(gr.discovered_date.toString());
summary.event.detection_lag_days = parseInt(gs.dateDiff(evtDate.toString(), discDate.toString(), true)) || 0;
}
// Contributing factors from record
if (gr.root_cause.toString()) summary.contributing_factors.push('Root Cause: ' + gr.root_cause.toString());
if (gr.contributing_factors.toString()) summary.contributing_factors.push('Factors: ' + gr.contributing_factors.toString());
var profileId = gr.profile.toString();
// Affected controls
var ctrl = new GlideRecord('sn_compliance_control');
ctrl.addQuery('profile', profileId);
ctrl.addQuery('active', true);
ctrl.query();
while (ctrl.next()) {
var ctrlStatus = ctrl.state.getDisplayValue();
var wasEffective = (ctrlStatus == 'Compliant' || ctrlStatus == 'Passed');
summary.affected_controls.push({
control: ctrl.number.toString(),
title: ctrl.short_description.toString(),
state: ctrlStatus,
effectiveness: ctrl.effectiveness.getDisplayValue(),
prevented_event: wasEffective,
owner: ctrl.owner.getDisplayValue()
});
if (!wasEffective) {
summary.contributing_factors.push('Control failure: ' + ctrl.number.toString() + ' (' + ctrlStatus + ')');
}
}
// Related issues
var issue = new GlideRecord('sn_grc_issue');
issue.addQuery('profile', profileId);
issue.addQuery('active', true);
issue.query();
while (issue.next()) {
summary.related_issues.push({
number: issue.number.toString(),
title: issue.short_description.toString(),
priority: issue.priority.getDisplayValue(),
state: issue.state.getDisplayValue()
});
}
// Historical pattern
var hist = new GlideRecord('sn_risk_event');
hist.addQuery('category', gr.category.toString());
hist.addQuery('sys_id', '!=', gr.sys_id.toString());
hist.addQuery('event_date', '>=', gs.daysAgo(365));
hist.query();
while (hist.next()) {
summary.historical_pattern.similar_events_12mo++;
summary.historical_pattern.total_financial_loss += parseFloat(hist.financial_impact.toString()) || 0;
}
// Generate mitigation recommendations
var failedControls = summary.affected_controls.filter(function(c) { return !c.prevented_event; });
if (failedControls.length > 0) {
summary.mitigation_recommendations.push('IMMEDIATE: Remediate ' + failedControls.length + ' failed controls identified during event analysis');
}
if (summary.event.detection_lag_days > 7) {
summary.mitigation_recommendations.push('SHORT-TERM: Improve detection capabilities - ' + summary.event.detection_lag_days + ' day detection lag exceeds acceptable threshold');
}
if (summary.historical_pattern.similar_events_12mo >= 3) {
summary.mitigation_recommendations.push('STRATEGIC: Investigate systemic root cause - ' + summary.historical_pattern.similar_events_12mo + ' similar events in past 12 months indicates pattern');
}
summary.mitigation_recommendations.push('ONGOING: Update risk assessment to reflect materialized event and adjust residual risk scores');
gs.info('RISK EVENT SUMMARY:\n' + JSON.stringify(summary, null, 2));
description: "GRC: Generate comprehensive risk event summary with impact assessment"
第 7 步:生成高管叙述
使用 MCP:
Tool: SN-Execute-Background-Script
Parameters:
script: |
var narrative = [];
narrative.push('=== RISK EVENT EXECUTIVE SUMMARY ===');
narrative.push('');
var agg = new GlideAggregate('sn_risk_event');
agg.addQuery('event_date', '>=', gs.daysAgo(90));
agg.addAggregate('COUNT');
agg.groupBy('category');
agg.query();
narrative.push('RISK EVENTS - LAST 90 DAYS BY CATEGORY:');
while (agg.next()) {
narrative.push(' ' + agg.category.getDisplayValue() + ': ' + agg.getAggregate('COUNT') + ' events');
}
narrative.push('');
// Top events by financial impact
narrative.push('TOP EVENTS BY FINANCIAL IMPACT:');
var top = new GlideRecord('sn_risk_event');
top.addQuery('event_date', '>=', gs.daysAgo(90));
top.addNotNullQuery('financial_impact');
top.orderByDesc('financial_impact');
top.setLimit(5);
top.query();
var idx = 1;
while (top.next()) {
narrative.push(' ' + idx + '. ' + top.number + ' - ' + top.short_description);
narrative.push(' Financial Impact: $' + top.financial_impact + ' | Category: ' + top.category.getDisplayValue());
idx++;
}
gs.info(narrative.join('\n'));
description: "GRC: Generate quarterly risk event narrative for leadership"
工具使用
| 操作 | MCP 工具 | REST 端点 |
|---|---|---|
| 读取事件 | SN-Get-Record | GET /api/now/table/sn_risk_event/{sys_id} |
| 查询事件 | SN-Query-Table | GET /api/now/table/sn_risk_event |
| 查询控制措施 | SN-Query-Table | GET /api/now/table/sn_compliance_control |
| 查询风险 | SN-Query-Table | GET /api/now/table/sn_grc_risk |
| 聚合分析 | SN-Execute-Background-Script | POST /api/now/table/sys_trigger |
| 搜索事件 | SN-Natural-Language-Search | N/A |
最佳实践
- 及时性: 在发现事件后的 24 小时内生成摘要,以免遗漏新鲜细节
- 量化影响: 始终尝试量化财务影响,即使只是带有置信区间的估算
- 深入分析根本原因: 区分直接原因和系统性促成因素
- 映射控制措施: 明确指出哪些控制措施本应阻止或检测到该事件
- 历史背景: 纳入趋势数据,以区分偶发事件和系统性模式
- 可执行的建议: 每份摘要都应以具体且可分派的缓解措施结尾
- 监管意识: 标记可能触发监管通知要求的事件
故障排除
未找到风险事件表
症状: sn_risk_event 无结果返回,或提示未找到表
原因: 不同 ServiceNow 版本中的风险事件表名称可能不同;有些版本使用 sn_risk_event,而其他版本使用 sn_grc_loss_event
解决方案:
Tool: SN-Discover-Table-Schema
Parameters:
table_name: sn_risk_event
如果未找到,请在 sys_db_object 中搜索包含 "risk_event" 或 "loss_event" 的表。
财务影响字段为空
症状: 尽管已知事件存在相关成本,财务影响数据仍始终为 null
原因: 财务影响可能记录在相关损失记录中,而非事件本身
解决方案: 检查 sn_risk_loss 等相关表,或检查通过引用字段关联的自定义财务影响评估记录。
事件配置文件未关联控制措施
症状: 对事件配置文件进行控制分析时返回空结果
原因: 事件可能未关联 GRC 配置文件,或者控制措施使用了不同的关联路径
解决方案: 检查事件上的 item 字段,而不是 profile,或者查询 sn_grc_m2m_item_profile 以查看关联映射。
示例
示例 1:运营风险事件摘要
场景: 影响支付处理的系统中断事件 RE0002345
- 事件: 支付网关意外中断,持续 4 小时
- 检测延迟: 15 分钟(自动监控告警)
- 财务影响: 交易收入损失 $180,000
- 失效的控制措施: 2 项——灾难恢复测试(14 个月未测试)、容量监控阈值(设置过高)
- 促成因素: 基础设施变更未经适当测试,支付路由存在单点故障
- 类似事件(12 个月): 此前发生 2 起事件,损失总计 $95,000
- 建议: 更新灾难恢复测试计划、降低容量阈值、实施冗余支付路由
示例 2:合规风险事件摘要
场景: 涉及客户 PII 泄露的数据泄露事件 RE0003001
- 事件: 攻击者通过被盗用的服务账户未经授权访问客户数据库
- 检测延迟: 12 天(由外部安全研究人员发现并报告)
- 受影响记录: 15,000 条客户记录
- 监管影响: 根据 GDPR 第 33 条,必须在 72 小时内发出通知
- 失效的控制措施: 3 项——特权访问审查、服务账户轮换、数据库活动监控
- 建议: 立即轮换凭据、部署数据库活动监控、建立 72 小时通知流程
相关技能
grc/issue-summarization- 总结由风险事件生成的 GRC 问题grc/risk-assessment-summarization- 更广泛的风险评估背景grc/suggest-remediation-tasks- 为与事件相关的控制差距生成整改任务grc/regulatory-alert-analysis- 识别风险事件的监管影响grc/control-objective-management- 管理受事件影响的控制措施