You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Fleet Provisioning后设备注册为IoT Thing但未注册为Greengrass Core

问题描述

执行GreenGrass Fleet Provisioning流程后,设备已在AWS IoT平台注册为IoT Thing,但未被成功注册为GreenGrass Core设备。在已启用TCP连接的EC2实例、RPi Zero设备上分别部署验证,两类环境均复现该问题。查看/greengrass/v2/logs/greengrass.log路径下的日志,观测到如下MQTT相关错误:

// EC2实例日志
2022-06-24T05:22:27.557Z [WARN] (pool-2-thread-9) com.aws.greengrass.deployment.IotJobsHelper: No connection available during subscribing to Iot Jobs descriptions topic. Will retry in sometime. {ThingName=ec2_gg_thing_test}
2022-06-24T05:22:35.268Z [ERROR] (pool-2-thread-1) com.aws.greengrass.mqttclient.MqttClient: Error subscribing. {topic=$aws/things/ec2_gg_thing_test/shadow/name/AWSManagedGreengrassV2Deployment/update/accepted}
2022-06-24T05:22:35.269Z [WARN] (pool-2-thread-1) com.aws.greengrass.deployment.ShadowDeploymentListener: Caught exception while subscribing to shadow topics, will retry shortly. {}

// RPi Zero日志
2022-06-24T05:25:20.883Z [WARN] (pool-2-thread-11) com.aws.greengrass.deployment.IotJobsHelper: No connection available during subscribing to Iot Jobs descriptions topic. Will retry in sometime. {ThingName=rpiZero}
2022-06-24T05:26:10.037Z [ERROR] (pool-2-thread-10) com.aws.greengrass.mqttclient.MqttClient: Error subscribing. {topic=$aws/things/rpiZero/shadow/name/AWSManagedGreengrassV2Deployment/update/accepted}
2022-06-24T05:26:10.043Z [WARN] (pool-2-thread-10) com.aws.greengrass.deployment.ShadowDeploymentListener: Caught exception while subscribing to shadow topics, will retry shortly. {}

补充配置信息如下:
部署执行的启动命令:

sudo -E java -Droot=/greengrass/v2 -Dlog.store=FILE \
-jar /GreengrassInstaller/lib/Greengrass.jar \
--trusted-plugin /GreengrassInstaller/FleetProvisioningByClaim.jar \
--init-config /GreengrassInstaller/config.yaml \
--component-default-user ggc_user:ggc_group \
--setup-system-service true

部署使用的/GreengrassInstaller/config.yaml内容:

---
services:
  aws.greengrass.Nucleus:
    version: "2.5.6"
  aws.greengrass.FleetProvisioningByClaim:
    configuration:
      rootPath: "greengrass/v2"
      awsRegion: "us-west-2"
      iotDataEndpoint: "<data-endpoint>-ats.iot.us-west-2.amazonaws.com"
      iotCredentialEndpoint: "<credentials-endpoint>.credentials.iot.us-west-2.amazonaws.com"
      iotRoleAlias: "GGProvisionTest_TokenExchange_RoleAlias"
      provisioningTemplate: "GGProvisionTest_Template"
      claimCertificatePath: "greengrass/v2/claim-certs/claim.pem.crt"
      claimCertificatePrivateKeyPath: "greengrass/v2/claim-certs/claim.private.pem.key"
      rootCaPath: "greengrass/v2/AmazonRootCA1.pem"
      templateParameters:
        ThingName: "<thingName>"
        ThingGroupName: "<thingGroup>"

可能原因

  • 配置文件路径格式错误。所有资源路径均使用相对路径(未以/开头),Fleet Provisioning插件启动时无法定位到根目录、Claim证书、私钥、RootCA文件,导致TLS握手失败,MQTT连接无法建立,这是两类不同设备同时复现问题的最常见诱因。
  • 端点配置未替换占位符。配置中iotDataEndpoint、iotCredentialEndpoint保留了<data-endpoint>、<credentials-endpoint>占位符,未填充账号下实际的IoT端点地址,设备无法连接到AWS IoT服务端。
  • Fleet Provisioning模板权限缺失。模板未配置AttachPolicy逻辑,或绑定的IoT策略缺少MQTT连接、主题订阅相关权限,设备完成Thing注册后,持有的设备证书无权限访问IoT Core的MQTT服务,导致订阅被拒绝。
  • 证书文件权限配置错误。Greengrass运行用户ggc_user没有Claim证书、私钥、RootCA文件的读取权限,TLS握手阶段无法加载证书材料,连接建立失败。
  • 出站网络访问被拦截。设备本地防火墙、VPC安全组/ACL规则阻止了到IoT端点8883端口(MQTT over TLS)的出站访问,导致连接超时。

排查与修复步骤

  1. 修正所有路径为绝对路径
    将配置文件中所有路径补全根前缀,修正后配置片段如下:
rootPath: "/greengrass/v2"
claimCertificatePath: "/greengrass/v2/claim-certs/claim.pem.crt"
claimCertificatePrivateKeyPath: "/greengrass/v2/claim-certs/claim.private.pem.key"
rootCaPath: "/greengrass/v2/AmazonRootCA1.pem"
  1. 替换端点占位符为实际值
    通过控制台或CLI获取账号下的真实IoT端点:
  • 数据端点:执行aws iot describe-endpoint --endpoint-type iot:Data-ATS获取,替换<data-endpoint>部分
  • 凭证端点:执行aws iot describe-endpoint --endpoint-type iot:CredentialProvider获取,替换<credentials-endpoint>部分
    确保配置中不存在尖括号包裹的占位符内容。
  1. 校验Fleet Provisioning模板权限
    打开AWS IoT控制台对应预置模板,确认模板配置了AttachPolicy操作,且绑定的IoT策略至少包含以下权限:
  • 允许客户端以Thing名称为ClientId发起MQTT连接
  • 允许订阅、接收自身Thing下的Jobs、Shadow相关主题
  • 允许读取、更新自身Thing的Shadow数据
  1. 修复证书文件权限
    执行以下命令给Greengrass运行用户授予证书文件的读权限:
sudo chown -R ggc_user:ggc_group /greengrass/v2/claim-certs/
sudo chown ggc_user:ggc_group /greengrass/v2/AmazonRootCA1.pem
sudo chmod 600 /greengrass/v2/claim-certs/* /greengrass/v2/AmazonRootCA1.pem
  1. 清理残留后重新部署
    停止Greengrass服务,删除之前失败部署生成的残留文件(注意提前备份claim-certs目录和RootCA文件,不要删除这两个资源),重新执行安装启动命令,观察日志中是否出现MQTT连接成功、主题订阅成功的记录。
  2. 网络连通性校验
    在设备上执行telnet <替换后的数据端点地址> 8883,确认8883端口出站连通正常,若连通失败则检查本地防火墙、安全组规则放通对应端口的出站访问。

内容的提问来源于stack exchange,提问作者Hugo Arganda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 02:45:35