Невозможно подтвердить подлинность подписки через узел SDK - PullRequest
0 голосов
/ 25 октября 2018

Мне нужно интегрировать сервис MQTT на основе AWS IOT.Другой разработчик уже настроил MQTT и предоставил мне учетные данные aws.Они также дали нам две темы названия.один для публикации данных другой для подписки для получения данных о состоянии.

В целях тестирования я создал устройство в AWS IOT Panel, и оно дает мне узел iot sdk download.Который я настроил на локальной машине.Затем я поиграл со скриптом device-example в папке с примерами.Я изменяю политику aws, прилагаемую к моему устройству, чтобы разрешить доступ к двум темам, одна для публикации и одна для подписки.

Но все это не удалось.Скрипт дан следующий вывод.

connect
offline
close
reconnect
connect
offline
close

и т. Д.

Когда я зарегистрировался в журналах AWS CloudWatch для IOT, у меня возникла проблема.

{ 
 "timestamp": "2018-10-25 07:13:10.056", 
 "logLevel": "ERROR", 
 "traceId": "TRACEID", 
 "accountId": "ACCOUNTID", 
 "status": "Failure", 
 "eventType": "Subscribe", 
 "protocol": "MQTT", 
 "topicName": "status topic name", 
 "clientId": "sdk-nodejs-uuid",
 "principalId": "clientid", 
 "sourceIp": "IP", 
 "sourcePort": PORT, 
 "reason": "AUTHORIZATION_FAILURE" 
}

Моя измененная политика:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
    "iot:Publish",
    "iot:Receive"
      ],
      "Resource": [
    "arn:aws:iot:us-east-2:clientid:topic/publish-topic-name"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
    "iot:Subscribe",
    "iot:Receive"
      ],
      "Resource": [
    "arn:aws:iot:us-east-2:clientid:topic/subscribe-topic-name"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
    "iot:Connect"
      ],
      "Resource": [
    "arn:aws:iot:us-east-2:clientid:client/sdk-nodejs-*",
    "arn:aws:iot:us-east-2:clientid:topic/publish-topic-name",
    "arn:aws:iot:us-east-2:clientid:topic/subscribe-topic-name"
      ]
    }
  ]
}

Тогда я даже дал все права доступа iot для всех тем, но все равно получаю ошибку аутентификации

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
    "iot:*"
      ],
      "Resource": [
    "arn:aws:iot:us-east-2:clientid:client/sdk-nodejs-*",
    "arn:aws:iot:us-east-2:clientid:topic/*"
      ]
    }
  ]
}

Для публикации я получаютолько подключите выход консоли и также не получите никаких журналов на облаке, поэтому я не очень уверен, удастся ли это или нет.

ОБНОВЛЕНИЕ: Хорошо, у меня возникла проблема после некоторого поиска, которая заключается в добавлении фильтра темы вместе с темой в политике.Похоже, что необходимо для подписки на темы.Обновленная политика ниже.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
    "iot:*"
      ],
      "Resource": [
    "arn:aws:iot:us-east-2:clientid:client/sdk-nodejs-*",
    "arn:aws:iot:us-east-2:clientid:topicfilter/*",
    "arn:aws:iot:us-east-2:clientid:topic/*"
      ]
    }
  ]
}

1 Ответ

0 голосов
/ 25 октября 2018

Вы также настроили политику IoT?Чтобы подключиться к платформе IoT с пользователем IAM (MQTT через WSS), вам нужна не только политика IAM, которая разрешает доступ, но и политика IoT, которая делает это.Кроме того, вы должны проверить, используют ли ваши политики правильный идентификатор ресурса.Есть разница между тем, как ресурсы определены для iot:publish против iot:subscribe.

...