本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用客户端设备设置AWS物联网 Greengrass 并对其进行故障排除
由 Marouane Sefiani 和 Akalanka De Silva 创作 () AWS
摘要
AWSIoT Greengrass 是一款开源边缘运行时和云服务,用于在边缘设备上构建、部署和管理物联网 (IoT) 软件。AWS物联网 Greengrass 的用例包括:
使用AWS物联网 Greengrass 网关作为家庭自动化中心的智能家居
智能工厂,AWS物联网 Greengrass 可以促进车间数据的摄取和本地处理
AWSIoT Greengrass 可以充当其他边缘设备(也称为客户端设备)的安全MQTT、经过身份验证的连接端点,否则这些设备通常会直接连接到物联网核心。AWS当客户端设备无法直接通过网络访问AWS物联网核心端点时,此功能非常有用。
您可以将 AWS IoT Greengrass 设置为与客户端设备一起使用,用于以下用例:
让客户端设备向AWS物联网发送数据 Greengrass
为了让AWS物联网 Greengrass 将数据转发到物联网核心 AWS
利用高级 AWS IoT Core 规则引擎功能
这些功能需要在 AWS IoT Greengrass 设备上安装和配置以下组件:
MQTT经纪人
MQTT桥梁
客户端设备身份验证
IP 探测器
此外,来自客户端设备的已发布消息必须JSON采用格式或协议缓冲区 (protobuf
本示例介绍了如何安装和配置这些必需的组件,并提供了故障排除提示和最佳实践。
先决条件和限制
先决条件
限制
您必须选择可用 AWS IoT Core 的AWS区域。有关 AWS IoT Core 的当前区域列表,请参阅按区域划分的AWS服务
。 核心设备必须至少有 172 MB RAM 和 512 MB 的磁盘空间。
架构
下图显示此模式的解决方案架构。
此架构包括:
两个客户端设备 每个设备都包含私钥、设备证书以及根证书颁发机构 (CA) 证书。包含MQTT客户端的AWS物联网设备SDK也安装在每台客户端设备上。
部署了 AWS IoT Greengrass 的核心设备,包含以下组件:
MQTT经纪人
MQTT桥梁
客户端设备身份验证
IP 探测器
该架构支持以下场景:
客户端设备可以使用其MQTT客户端通过核心设备的MQTT代理相互通信。
客户设备还可以通过核心设备的MQTT代理和MQTT桥接器与云中的AWS物联网核心进行通信。
AWS云端的 IoT Core 可以通过MQTT测试客户端、核心设备的MQTT桥接器和MQTT代理向客户端设备发送消息。
有关客户端设备和核心设备之间通信的更多信息,请参阅其他信息部分。
工具
AWS 服务
AWSIoT G reengrass 是一款开源物联网 (IoT) 边缘运行时和云服务,可帮助您在设备上构建、部署和管理物联网应用程序。
AWSIoT Core 为连接互联网的设备提供安全的双向通信,以连接到云端。AWS
AWSIoT
Device SDK 是一个软件开发套件,包括开源库、带示例的开发者指南和移植指南,以便您可以根据自己选择的硬件平台构建创新的物联网产品或解决方案。 AWSIdentity and Access Management (IAM) 通过控制谁经过身份验证并有权使用AWS资源,从而帮助您安全地管理对资源的访问权限。
最佳实践
来自客户端设备的消息的有效载荷应为JSON或 Protobuf 格式,以便利用 Io AWS T Core 规则引擎的高级功能,例如转换和条件操作。
将MQTT网桥配置为允许双向通信。
在 AWS IoT Greengrass 中配置和部署 IP 检测器组件,确保代理证书的主题备用名称 SAN () 字段中包含核心设备的 IP 地址。MQTT
操作说明
任务 | 描述 | 所需技能 |
---|---|---|
在你的核心AWS设备上设置 IoT Greengrass。 | AWS IoT Greengrass | |
检查安装状态。 | 使用以下命令检查核心设备上的 AWS IoT Greengrass 服务的状态:
命令预期输出是:
| 将军 AWS |
设置IAM策略并将其附加到 Greengrass 服务角色。 |
| 将军 AWS |
在AWS物联网 Greengrass 核心设备中配置和部署所需的组件。 | 配置与部署以下组件: | AWS IoT Greengrass |
确认MQTT网桥允许双向通信。 | 要在客户端设备和 AWS IoT Core 之间中继MQTT消息,请配置和部署网MQTT桥组件并指定要中继的主题。示例如下:
| AWS IoT Greengrass |
确认身份验证组件允许客户端设备连接并发布或订阅主题。 | 以下
| AWS IoT Greengrass |
任务 | 描述 | 所需技能 |
---|---|---|
安装AWS物联网设备SDK。 | 在客户端设备SDK上安装AWS物联网设备。有关支持的语言和相关语言的完整列表SDKs,请参阅 AWSIoT Core 文档。 例如,适用于 Python SDK 的AWS物联网设备SDK位于上 GitHub
或者,您可以SDK从源存储库安装:
| 通用AWS物联网 |
创建事物。 |
| AWS物联网核心 |
从 Greengrass 核心设备下载 CA 证书。 | 如果您希望 Greengrass 核心设备能够在离线环境中运行,则必须将 Greengrass 核心 CA 证书提供给客户端设备,这样它才能验证MQTT代理的证书(由 Greengrass 核心 CA 颁发)。因此,获取此证书副本非常重要。通过以下方法之一下载 CA 证书:
| 将军 AWS |
在客户端设备复制凭证。 | 在客户端设备中复制 Greengrass 核心 CA 证书、设备证书以及私钥。 | 将军 AWS |
将客户端设备与核心设备相关联。 | 将客户端设备与核心设备关联,以便其可以发现核心设备。然后,客户端设备可以使用 Greengrass API 发现来检索其关联核心设备的连接信息和证书。有关更多信息,请参阅 AWS IoT Greengrass 文档中的关联客户端设备。
您关联的客户端设备现在可以使用 Greengrass 发现来API发现此核心设备。 | AWS IoT Greengrass |
任务 | 描述 | 所需技能 |
---|---|---|
将数据从一个客户端设备发送到另一客户端设备。 | 使用设备中的MQTT客户端发布有关该 | 将军 AWS |
将数据从客户端设备发送到 AWS IoT Core。 | 使用设备中的MQTT客户端发布有关该 在MQTT测试客户端中,订阅设备正在发送消息的主题,或订阅 # 以获取所有主题(查看详细信息)。 | 将军 AWS |
从 AWS IoT Core 向客户端设备发送消息。 | 在MQTT测试客户端页面的发布到主题选项卡的主题名称字段中,输入消息的主题名称。在此示例中,使用 | 将军 AWS |
故障排除
事务 | 解决方案 |
---|---|
无法验证服务器证书错误 | 当MQTT客户端无法验证MQTT代理在TLS握手期间提供的证书时,就会发生此错误。最常见的原因是MQTT客户端没有 CA 证书。请按照以下步骤操作,确保将 CA 证书提供给MQTT客户端。
|
无法验证服务器名称错误 | 当MQTT客户端无法验证它是否连接到正确的服务器时,就会发生此错误。最常见的原因是 Greengrass 设备的 IP 地址未在证书字段中SAN列出。 按照前一解决方案中的说明获取MQTT代理证书,并验证该SAN字段是否包含 AWS IoT Greengrass 设备的 IP 地址,如其他信息部分所述。如果没有,请确认 IP 检测器组件安装得当,然后重新启动核心设备。 |
仅在从嵌入式客户端设备连接时,无法验证服务器名称 | Mbed TLS 是嵌入式设备中常用的TLS库,目前仅支持证书SAN字段的DNS名称验证,如 Mbed TLS 库代码所示。由于核心设备没有自己的域名并且依赖于 IP 地址,因此使用 Mbed 的TLS客户端在TLS握手期间TLS将无法通过服务器名称验证,从而导致连接失败。我们建议你通过 x509 |
相关资源
其他信息
本节提供有关客户端设备和核心设备之间通信的附加信息。
MQTT代理在核心设备的端口 8883 上侦听TLS客户端连接尝试。下图显示了MQTT代理服务器证书的示例。
示例证书显示以下详细信息:
该证书由AWS物联网 Greengrass Core CA 颁发,该证书是本地的,特定于核心设备;也就是说,它充当本地 CA。
该证书由客户端身份验证组件每周自动轮换,如下图所示。您可在客户端身份验证组件配置中设置此间隔。
主题备用名称 (SAN) 在TLS客户端的服务器名称验证中起着至关重要的作用。它可以帮助TLS客户端确保连接到正确的服务器,并有助于避免在TLS会话设置期间 man-in-the-middle受到攻击。在示例证书中,该SAN字段表示此服务器正在本地主机(本地 Unix 域套接字)上侦听,并且网络接口的 IP 地址为 192.168.1.12。
在服务器验证期间,TLS客户端使用证书中的SAN字段来验证其是否连接到合法服务器。相比之下,在HTTP服务器和浏览器之间的典型TLS握手期间,公用名 (CN) 字段或SAN字段中的域名用于交叉检查服务器验证过程中浏览器实际连接的域。如果核心设备没有域名,则SAN字段中包含的 IP 地址具有相同的用途。有关更多信息,请参阅 RFC5280 — Internet X.509 公钥基础设施证书和证书吊销列表 () 配置文件的 “主题备用名称” 部分
AWS物联网 Greengrass 中的 IP 探测器组件可确保证书字段中SAN包含正确的 IP 地址。
示例中的证书由充当本地 CA 的 AWS IoT Greengrass 设备签名。TLS客户端(MQTT客户端)不知道此 CA,因此我们必须提供如下所示的 CA 证书。