Serverless Lambda执行SNS:Publish发送SMS未授权报错求助
解决步骤
1. 修正SNS权限配置错误
你当前权限不生效的核心原因是:使用SNS直接发送短信(未通过SNS主题推送)时,对应的资源ARN并不是SNS主题的arn:aws:sns:*:*:*格式,而是arn:aws:sns:{区域}:{账号ID}:{目标手机号}格式,你配置的通配规则仅匹配SNS主题,无法覆盖短信发送场景。
正确的权限配置如下,注意缩进位置必须在serverless.yml的provider层级下:
provider: name: aws runtime: nodejs16.x region: us-east-1 # iamRoleStatements与provider下其他配置平级,不要写错层级 iamRoleStatements: - Effect: Allow Action: - sns:Publish # 可以直接用*适配所有短信发送场景,也可以按号段限制,比如arn:aws:sns:us-east-1:XXXXXXXXXX:+57* Resource: "*"
2. 确认角色配置生效
如果你找不到对应的Lambda执行角色,不需要在IAM控制台搜索,直接操作:
- 打开AWS Lambda控制台,找到你部署的对应函数
- 进入
配置 > 权限标签页,直接点击执行角色的ARN链接,即可跳转到对应角色的配置页 - 给该角色手动添加允许
sns:Publish的权限策略,保存后等待2分钟生效即可
3. 本地测试正常的原因说明
本地测试时调用SNS用的是你本地配置的AWS账号凭证(一般存放在~/.aws/credentials路径下),该账号本身拥有SNS发布权限,所以运行正常;线上Lambda默认使用独立的执行角色,权限单独管控,所以会出现本地正常线上报错的情况。
内容的提问来源于stack exchange,提问作者Jesus Berrio
相关产品推荐
相关产品推荐

