ClientDeviceAuthorizer:设备无权连接

ClientDeviceAuthorizer: Device isn't authorized to connect

我有一个客户端设备 (thing-is-1) Greengrass 核心设备 (Corething2)

我已经部署了组件:MQTT Moquette Broker、MQTT Bridge、Client Device Authenticator、IP Detector。

我的 MQTT Broker 正在侦听端口 8883 我仔细检查了我所有的 AWS IOT Core 策略: 它包含 AWS 文档中在策略方面提到的所有内容。

但是当我在发现后尝试将我的客户端连接到我的核心时,它在客户端设备上出现以下错误:

正在执行 greengrass 发现... awsiot.greengrass_discovery.DiscoverResponse(gg_groups=[awsiot.greengrass_discovery.GGGroup(gg_group_id='greengrassV2-coreDevice-Corething2', 核心数=[awsiot.greengrass_discovery.GGCore(thing_arn='arn:aws:iot:eu-west-1:...:thing/Corething2', connectivity=[awsiot.greengrass_discovery.ConnectivityInfo(id='', host_address='', metadata='', port=8883), awsiot.greengrass_discovery.ConnectivityInfo(id='', host_address='', metadata='', port=8883)])], certificate_authorities=['-----BEGIN CERTIFICATE-----\n..\n-----END CERTIFICATE-----\n'])]) 在主机端口 8883 尝试核心 arn:aws:iot:eu-west-1:..:[=​​39=] 连接失败,异常 AWS_IO_SOCKET_TIMEOUT:套接字操作超时。 在主机端口 8883 尝试核心 arn:aws:iot:eu-west-1:..:[=​​39=] 连接失败,异常 AWS_ERROR_MQTT_UNEXPECTED_HANGUP:连接意外关闭。 所有连接尝试均失败

现在,如果我转到我的核心设备并检查 greengrass.log.. 我会看到:

2022-04-11T15:07:43.899Z [信息] (nioEventLoopGroup-5-3) com.aws.greengrass.device.DeviceAuthClient:创建新会话。 {} 2022-04-11T15:07:44.454Z [信息] (nioEventLoopGroup-5-3) com.aws.greengrass.device.SessionManager:创建了会话。 {sessionId=d65a97e6-1919-4798-8c2d-bb9b44398856} 2022-04-11T15:07:44.473Z [信息] (nioEventLoopGroup-5-3) io.moquette.broker.metrics.MQTTMessageLogger: C->B 连接。 {} 2022-04-11T15:07:44.473Z [信息] (nioEventLoopGroup-5-3) com.aws.greengrass.mqttbroker.ClientDeviceAuthorizer:已检索客户端会话。 {clientId=thing-is-1, sessionId=d65a97e6-1919-4798-8c2d-bb9b44398856} 2022-04-11T15:07:44.799Z [信息] (nioEventLoopGroup-5-3) com.aws.greengrass.mqttbroker.ClientDeviceAuthorizer:设备无权连接。 {clientId=thing-is-1, sessionId=d65a97e6-1919-4798-8c2d-bb9b44398856} 2022-04-11T15:07:44.799Z [信息] (nioEventLoopGroup-5-3) com.aws.greengrass.device.SessionManager:关闭会话。 {sessionId=d65a97e6-1919-4798-8c2d-bb9b44398856} 2022-04-11T15:07:44.800Z [INFO] (nioEventLoopGroup-5-3) io.moquette.broker.MQTTConnection:验证器拒绝了 MQTT 凭证 CId=thing-is-1,证书链=[[ [ 版本:V3 主题:CN=AWS IoT 证书

bla bla bla ]]. {} 2022-04-11T15:07:44.800Z [INFO] (nioEventLoopGroup-5-3) io.moquette.broker.MQTTConnection:客户端未提供任何密码且 MQTT 匿名模式已禁用 CId=thing-is-1。 {} 2022-04-11T15:07:44.802Z [信息] (nioEventLoopGroup-5-3) io.moquette.broker.metrics.MQTTMessageLogger:通道不活动。 {} 2022-04-11T15:08:41.247Z [INFO] (pool-1-thread-4) com.aws.greengrass.detector.IpDetectorManager:获取的主机 IP 地址。 {IpAddresses=[/, /]}

我在这里错过了什么?或者如果有一份清单我可以参考以找出可能性。 证书出现了一个问题,我是否需要将我的客户 public 添加到核心中的某个位置?我没有在 aws 文档的任何地方找到它。

我还看到会话已创建,但随后我的身份验证器拒绝了客户端。

我的设备身份验证器具有完整的许可配置。 我的 thing-is-1 与我的核心设备相关联。但是核心设备和客户端设备不属于同一个事物组。 (而且我认为这没有任何区别)

ClientDeviceAuth 组件配置:

{
  "reset": [],
  "merge": {
    "reset": [],
    "merge": {
      "deviceGroups": {
        "formatVersion": "2021-03-05",
        "definitions": {
          "MyDeviceGroup": {
            "selectionRule": "thingName: thing-*",
            "policyName": "MyClientDevicePolicy"
          }
        },
        "policies": {
          "MyClientDevicePolicy": {
            "AllowConnection": {
              "statementDescription": "Allow client devices.",
              "operations": [
                "*"
              ],
              "resources": [
                "*"
              ]
            }
          }
        }
      }
    }
  }
}

我试图同时提供信息和简洁。如果我遗漏任何可能有助于更好地理解问题的信息,请告诉我,我会相应地更新问题。

您的客户端设备身份验证配置似乎将“合并”作为“合并”的子项?那是不正确的。设备组和策略应该是顶级合并下的键。