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

GuardDuty无威胁扫描结果无法触发StepFunction求助

问题排查与修复建议

核心问题定位

你的EventBridge规则未触发StepFunction,主要原因有两个:

  1. 事件字段路径匹配错误:你在排除规则中使用了responsePayload.input_key,但GuardDuty S3恶意软件扫描事件中,对象的存储路径实际位于detail.s3ObjectDetails.objectKey字段,而非responsePayload下。
  2. EventPattern拆分定义导致结构冲突:多次调用addEventPattern可能导致嵌套字段的合并逻辑不符合预期,建议将所有匹配条件整合到一个EventPattern中。

修复步骤

1. 修正EventPattern字段路径与合并定义

将所有匹配条件(包括排除规则)整合到一个EventPattern中,确保字段路径正确:

const guardDutyNoMalwareRule = new Rule(this, "GuardDutyMalwareScanResultRule", {
  eventPattern: {
    source: ["aws.guardduty"],
    detailType: ["GuardDuty Malware Protection Object Scan Result"],
    detail: {
      scanResultDetails: {
        scanResultStatus: ["NO_THREATS_FOUND"],
      },
      // 修正:针对实际对象路径字段做排除匹配
      s3ObjectDetails: {
        objectKey: [
          {
            "anything-but": { wildcard: ["results/*"] }
          }
        ]
      }
    }
  }
});

2. 验证EventBridge规则权限

虽然CDK的SfnStateMachine目标会自动生成EventBridge调用StepFunction的IAM权限,但仍需确认:

  • StepFunction的资源策略允许EventBridge的角色触发执行
  • EventBridge规则关联的IAM角色拥有states:StartExecution权限

3. 测试事件匹配逻辑

使用EventBridge控制台的测试事件功能,导入一条实际的GuardDuty扫描成功事件(可从CloudWatch Events日志中获取),验证规则是否能正确匹配:

  • 确认事件中的detail.s3ObjectDetails.objectKey不在results/*路径下
  • 确认detail.scanResultDetails.scanResultStatus为NO_THREATS_FOUND

4. 排查StepFunction执行状态

即使规则触发,StepFunction也可能因输入格式错误或权限问题执行失败:

  • 查看StepFunction的执行历史,确认是否有触发记录
  • 检查输入转换后的参数是否符合StepFunction的预期格式

额外注意事项

  • 确保GuardDuty的S3保护已正确配置,且扫描事件能正常发送到EventBridge
  • 检查EventBridge规则的状态是否为ENABLED(默认是启用状态,但需确认未被手动禁用)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 03:47:17