You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Cloud Function因KeyError 'project'崩溃,Webex通知功能故障

解决Security Command Center告警推送Webex Teams的KeyError 'project'问题

问题核心

KeyError 'project' 表明你的代码尝试访问字典(SCC告警事件的payload)中不存在的project字段。组织级SCC的告警事件结构和项目级存在差异,你之前尝试的project_id可能也不在预期的层级。

排查与修复步骤

1. 打印完整事件payload,明确字段结构

在函数开头添加日志输出,获取完整的事件数据,确认实际存在的字段:

import json
import logging

def scc_to_webex(event, context):
    # 打印完整事件结构,便于排查字段位置
    logging.info("Full SCC event payload:\n%s", json.dumps(event, indent=2))
    # 原有业务逻辑代码...

部署后触发一次告警,查看Cloud Function日志,定位项目相关信息的实际位置(常见位置包括jsonPayload.finding.resource_name、jsonPayload.finding.parent或resource.project)。

2. 修正项目ID的提取逻辑

根据日志中的实际结构调整代码,比如从resource_name提取项目ID:

# 假设告警finding数据在event['jsonPayload']['finding']中
finding = event['jsonPayload']['finding']
resource_name = finding.get('resource_name', '')
# 解析resource_name(格式示例://cloudresourcemanager.googleapis.com/projects/your-project-id)
if '/projects/' in resource_name:
    project_id = resource_name.split('/projects/')[1].split('/')[0]
else:
    project_id = '未知项目'

如果项目信息在parent字段中,可改用以下逻辑:

parent = finding.get('parent', '')
if '/projects/' in parent:
    project_id = parent.split('/projects/')[1].split('/')[0]

3. 避免硬编码字段访问

所有字典字段访问改用get()方法,避免KeyError:

# 替代直接下标访问event['project']
project_id = event.get('project_id', '未知项目')
# 针对嵌套字段的安全访问
project_id = event.get('jsonPayload', {}).get('finding', {}).get('project_id', '未知项目')

4. 确认SCC事件触发范围

确保你的Cloud Function绑定的是组织级SCC通知,而非项目级。组织级事件的字段结构更复杂,项目信息通常不会出现在顶层字段中。

内容的提问来源于stack exchange,提问作者smzj_2023

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 09:00:07