如何排查发送AWS SNS短信的应用或获取失败短信内容?
解决AWS SNS测试号码短信请求溯源问题
一、通过消息ID获取短信内容
AWS SNS本身不会存储已发送短信的内容,但如果开启了CloudTrail日志,可按以下方式查找:
- 打开CloudTrail控制台,筛选事件名称为
Publish(对应SNS发送消息的API调用),并按目标消息ID过滤。 - 在CloudTrail的事件详情中,
requestParameters字段会包含短信的Message内容,同时附带调用该API的相关资源信息。
二、定位请求来源应用
1. 从CloudTrail日志直接溯源
每个SNS Publish请求的CloudTrail事件里,userIdentity字段会显示发起请求的身份:
- 若为Lambda函数发起,会显示Lambda执行角色的ARN,结合ARN中的函数名称即可定位到具体函数。
- 若为EC2实例发起,会显示EC2实例绑定的IAM角色ARN,通过角色关联的实例ID可找到对应的EC2应用。
- 另外,
sourceIPAddress字段可区分请求来源:EC2实例会显示实例的公网/内网IP,Lambda则会显示AWS服务IP段或lambda.amazonaws.com。
2. 检查SNS主题关联配置
如果是通过SNS主题统一发送短信而非直接调用Publish接口:
- 查看目标主题的订阅列表,确认哪些Lambda/EC2应用有权限向该主题发送消息。
- 检查CloudWatch Events或EventBridge的触发规则,确认是否存在自动触发SNS发送的规则,这类规则可能未添加测试号码过滤逻辑。
三、排查代码过滤逻辑漏洞
- 确认所有应用的测试号码过滤逻辑覆盖了所有发送分支:比如异常处理分支、异步调用流程是否跳过了过滤判断。
- 检查号码格式处理逻辑:比如代码中判断的是带分隔符的
999-999-9999,但实际请求中号码可能是无分隔符的9999999999,导致过滤失效。 - 建议在代码中添加额外日志,记录发送请求的号码、调用方标识(如Lambda函数名、EC2应用名称),方便后续快速定位问题。
内容的提问来源于stack exchange,提问作者AcuTesting
相关产品推荐
相关产品推荐

