AWS IOT: своевременная подготовка (JITP), поддерживающая дополнительные атрибуты в Thing

#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 начал работать. Желаю удачи.