Мне нужно интегрировать сервис 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/*"
]
}
]
}