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

AWS SNS基于负载的过滤策略拦截所有通知问题求助

解决AWS SNS负载过滤策略拦截所有AWS Config通知的问题

1. 验证过滤策略的JSON语法正确性

先确认过滤策略的JSON格式完全合法,避免低级语法错误:

  • 所有键和值必须用双引号(禁止单引号)
  • 数组、对象的括号需正确闭合
  • 逗号分隔符无多写、漏写或使用中文标点

错误示例:

{
  "messageType": ["ConfigurationItemChangeNotification"], // 中文逗号错误
  "configurationItem.resourceType": ["AWS::EC2::Instance"]
}

正确示例:

{
  "messageType": ["ConfigurationItemChangeNotification"],
  "configurationItem.resourceType": ["AWS::EC2::Instance"]
}

2. 确认过滤属性与实际消息负载完全匹配

AWS SNS负载过滤依赖精确的属性路径与键名,需对照你收到的AWS Config通知示例逐一核对:

  • 键名大小写严格一致:比如messageType不能写成Messagetype,configurationItem不能写成ConfigurationItem
  • 属性层级正确:嵌套属性用.分隔,比如配置项的资源类型路径是configurationItem.resourceType,而非直接写resourceType
  • 值无多余空格:实际消息中resourceType的值是AWS::EC2::Instance,过滤策略里不能带前后空格

3. 检查过滤运算符的使用逻辑

根据需求选择匹配逻辑:

  • 精确匹配单个值:使用["目标值"](默认等于匹配)
  • 匹配多个可选值:使用["值1", "值2"](逻辑或)
  • 仅验证属性存在:使用[{"exists": true}]

针对EC2实例发现通知的正确过滤策略示例:

{
  "messageType": ["ConfigurationItemChangeNotification"],
  "configurationItem.resourceType": ["AWS::EC2::Instance"],
  "awsAccountId": ["123456789012"]
}

4. 区分“负载过滤”与“消息属性过滤”

确保你配置的是基于负载的过滤策略,而非消息属性过滤:

  • 消息属性过滤:针对SNS消息的顶层元数据(如Subject)
  • 负载过滤:针对消息的Payload内容(即AWS Config的JSON通知体)
    若误将负载字段当成消息属性配置,必然会拦截所有消息。

5. 用测试消息验证过滤逻辑

手动构造符合AWS Config格式的测试消息,通过SNS CLI发送验证:

aws sns publish \
  --topic-arn "arn:aws:sns:us-east-1:123456789012:your-topic" \
  --message '{
    "messageType": "ConfigurationItemChangeNotification",
    "awsAccountId": "123456789012",
    "configurationItem": {
      "resourceType": "AWS::EC2::Instance",
      "resourceId": "i-1234567890abcdef0"
    }
  }'

如果测试消息能通过过滤,说明原AWS Config消息存在未注意到的字段差异;若仍被拦截,说明过滤策略本身存在问题。

6. 查看CloudWatch过滤详情

在CloudWatch控制台找到SNS主题对应的日志组,搜索包含FilteredOut的日志条目,查看filteringDecision和matchingExplanation字段,明确拦截原因(如属性不存在、值不匹配等)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 22:47:27