在Alexa技能中发送MQTT消息遇权限问题求助
解决Alexa技能Lambda发送MQTT消息的ForbiddenException问题
问题根源
你遇到的ForbiddenException是因为运行Alexa技能的Lambda函数对应的IAM角色没有iot-data:Publish权限,导致无法调用AWS IoT Data服务的Publish接口。另外要注意:Alexa开发者控制台只负责技能的交互配置,Lambda的权限管理要到AWS主控制台操作,这就是你找不到入口的原因。
解决步骤
1. 定位Lambda的执行角色
- 打开AWS控制台,进入「Lambda」服务,找到你的Alexa技能绑定的Lambda函数
- 切换到「配置」标签页,点击左侧菜单的「权限」,找到「执行角色」栏的ARN链接,点击跳转到IAM角色详情页
2. 添加IoT发布权限策略
- 在IAM角色页面,切换到「权限策略」标签,点击「添加权限」→「创建内联策略」
- 选择「JSON」编辑模式,粘贴以下策略(替换
eu-west-1为你的AWS区域,你的AWS账号ID替换成实际账号ID;如果需要更宽松的topic权限,可将esp32/sub改为esp32/*):
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iot-data:Publish", "Resource": "arn:aws:iot:eu-west-1:你的AWS账号ID:topic/esp32/sub" } ] }
- 点击「下一步」,给策略命名(比如
AlexaIoTPublishPermission),完成保存
3. 验证修复效果
重新触发Alexa技能的相关操作,查看CloudWatch日志,确认ForbiddenException是否消失。
内容的提问来源于stack exchange,提问作者jaster
相关产品推荐
相关产品推荐

