ESP32无法向AWS IoT Core发送MQTT消息,如何配置严格权限策略?
修正AWS IoT Core策略以实现严格权限控制
核心问题分析
你的现有策略中使用了{ARN}占位符,这会导致权限无法正确匹配AWS IoT的实际资源;另外需确保ESP32的证书已正确关联到名为ESP32_SNSR_0的Thing(对应连接策略中的iot:Connection.Thing.IsAttached条件)。
修正后的严格权限策略
将<区域>和<AWS账号ID>替换为你的实际信息(可在AWS IoT Core控制台的"设置"页面获取完整的ARN前缀):
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iot:Connect", "Resource": "arn:aws:iot:<区域>:<AWS账号ID>:client/ESP32_SNSR_0", "Condition": { "Bool": { "iot:Connection.Thing.IsAttached": "true" } } }, { "Effect": "Allow", "Action": "iot:Publish", "Resource": "arn:aws:iot:<区域>:<AWS账号ID>:topic/esp32/pub" }, { "Effect": "Allow", "Action": [ "iot:Subscribe", "iot:Receive" ], "Resource": [ "arn:aws:iot:<区域>:<AWS账号ID>:topicFilter/esp32/sub", "arn:aws:iot:<区域>:<AWS账号ID>:topic/esp32/sub" ] } ] }
策略细节说明
- 连接权限:仅允许客户端ID为
ESP32_SNSR_0的设备连接,且要求证书已关联到对应的Thing,避免证书被滥用。 - 发布权限:仅允许向
topic/esp32/pub主题发布消息,严格限定发布范围。 - 订阅/接收权限:合并了
iot:Subscribe和iot:Receive动作,分别对应主题过滤器(topicFilter)和实际主题(topic),确保设备能正确订阅并接收topic/esp32/sub的消息。
验证步骤
- 确认ESP32代码中的客户端ID与策略中的
ESP32_SNSR_0完全一致。 - 检查证书已关联到AWS IoT中的
ESP32_SNSR_0Thing(在"安全"->"证书"页面操作)。 - 使用AWS IoT MQTT测试客户端订阅
topic/esp32/pub,同时让ESP32向该主题发布消息,验证是否能正常接收。
内容的提问来源于stack exchange,提问作者Alfie Danger
相关产品推荐
相关产品推荐

