Проблема здесь в том, что обе ваши команды немного отличаются из-за различных способов отправки данных в AWS IoT.
В команде curl
вы фактически используете x.509Подход на основе сертификата (дополнительную информацию см. здесь: https://docs.aws.amazon.com/iot/latest/developerguide/managing-device-certs.html) Для этого не требуется подписывать полезную нагрузку, он уже является доверенным, поскольку сертификат имеет значение.
Этот подход в основном уникален для IoT AWS.потому что цель состоит в том, чтобы данные поступали с большого количества устройств, и вам не нужно предоставлять им все роли IAM. На самом деле сертификат - это рекомендуемый способ отправки данных с устройства.
Вы может использовать эти сертификаты с почтальоном, если хотите, добавив их в запрос на вкладке сертификатов (вам нужны только файлы .crt
и .key
). Для получения более подробной информации см. https://www.getpostman.com/docs/v6/postman/sending_api_requests/certificatesинструкции.
Вы по-прежнему можете использовать подписи AWS v4 (https://docs.aws.amazon.com/iot/latest/developerguide/iam-users-groups-roles.html), поэтому предполагается, что вы не формируете запрос должным образом.
Просмотр этого документа(https://docs.aws.amazon.com/iot/latest/apireference/API_iotdata_Publish.html) вы должны использовать:
Метод : POST
Uri : <AWS IoT Endpoint>/<url_encoded_topic_name>?qos=1
(например, https://a1pn10j0v8htvw.iot.us-east-1.amazonaws.com:8443/topics/iotbutton/virtualButton?qos=1
)
Тип авторизации : Подпись AWS
AccessKey / SecretKey : согласно вашим учетным данным
Регион AWS : Регион, в котором находятся экземпляры IoT AWS, в
Имя службы : iotdata
Маркер сеанса : Оставьте пустым