#amazon-web-services #aws-iot
#amazon-веб-сервисы #aws-iot
Вопрос:
Я использую приведенную ниже ссылку для реализации своевременной подготовки (JITP) для AWS IoT.
https://aws.amazon.com/blogs/iot/setting-up-just-in-time-provisioning-with-aws-iot-core/
Если я использую политику по умолчанию, представленную по этой ссылке, я могу успешно зарегистрировать thing. При первом вызове mosquitto_pub я получаю сообщение об ошибке потери соединения, а последующий вызов прошел успешно, вещь была успешно создана в AWS IoT.
Я хочу извлечь дополнительные атрибуты из сертификата, например, OrganizationalUnit, и хочу добавить его в качестве атрибута к thing.
Итак, я изменил шаблон подготовки, чтобы включить этот атрибут, он не сработал. Я получаю сообщение об ошибке потери соединения для всех вызовов mosquitto_pub.
Вот строка шаблона подготовки, которую я использую —
{
"Parameters": {
"AWS::IoT::Certificate::Country": {
"Type": "String"
},
"AWS::IoT::Certificate::CommonName": {
"Type": "String"
},
"AWS::IoT::Certificate::Id": {
"Type": "String"
},
"AWS::IoT::Certificate::OrganizationalUnit": {
"Type": "String"
}
},
"Resources": {
"thing": {
"Type": "AWS::IoT::Thing",
"Properties": {
"ThingName": {
"Ref": "AWS::IoT::Certificate::CommonName"
},
"ThingGroups": [{
"Ref": "AWS::IoT::Certificate::OrganizationalUnit"
}],
"AttributePayload": {
"version": "v1",
"country": {
"Ref": "AWS::IoT::Certificate::Country"
},
"customerid": {
"Ref": "AWS::IoT::Certificate::OrganizationalUnit"
}
}
}
},
"certificate": {
"Type": "AWS::IoT::Certificate",
"Properties": {
"CertificateId": {
"Ref": "AWS::IoT::Certificate::Id"
},
"Status": "ACTIVE"
}
},
"policy": {
"Type": "AWS::IoT::Policy",
"Properties": {
"PolicyDocument": "{"Version": "2012-10-17","Statement": [{"Effect":"Allow","Action": ["iot:Connect"],"Resource" : "arn:aws:iot:*:*:client/${iot:Connection.Thing.ThingName}"},{"Effect":"Allow","Action": ["iot:Receive","iot:Subscribe","iot:Publish"],"Resource" : "arn:aws:iot:*:*:topic/${iot:Connection.Thing.ThingName}/*"}]}"
}
}
}
}
Мы также убедились, что ThingGroups с требуемым именем существуют.
Есть какие-нибудь указания?
Комментарии:
1. вы когда-нибудь разбирались в этом? В настоящее время у меня такая же проблема…
Ответ №1:
Я наткнулся на ваш пост, пытаясь решить эту проблему для себя. Я не знаю, будет ли это вам полезно, но у меня есть 2 комментария:
Правильный порядок:
Я обнаружил, что мне пришлось создать ThingGroups и ThingTypeName перед регистрацией сертификата, хотя невыполнение этого требования не вернуло никакой ошибки. Я отмечаю, что вы это уже сделали, но просто убедитесь, что вы не изменили названия групп или типов (я сделал это по рассеянности, и это меня задело).
В частности, это не сработало, когда я сделал aws iot register-ca-certificate
сначала (с ThingGroups и ThingTypeName в шаблоне подготовки), затем создал группы и типы и, наконец, начал подключать устройства. Мой совет — начать все сначала и внимательно пройтись по порядку: создать группы и типы; зарегистрировать сертификат ca. Затем попытайтесь подключиться.
Формат политики:
В качестве отправной точки я использовал следующие форматы для ресурсов политики. * Были полезны для изоляции источника проблем с форматированием. Я обнаружил, что редактирование JSON-файла политики непосредственно в консоли IoT было наиболее эффективным способом выяснить, что было не так.
Для iot: публикация, iot: получение и iot: подписка, ресурс =
"arn:aws:iot:ap-southeast-2:123456789012:*/things/${iot:Connection.Thing.ThingName}/*
И для интернета вещей: подключение, ресурс =
"arn:aws:iot:ap-southeast-2:123456789012:*/${iot:Connection.Thing.ThingName}
После этого процесс JITP начал работать. Желаю удачи.