Mosquitto no se conecta a AWS

Sep 26 2020

Soy nuevo en los servicios de AWS, todavía estoy estudiando los documentos. Recibí un código Python bastante largo (en funcionamiento) que intercambia datos con la nube.

Ahora quiero publicar / sub mensajes con mosquitto. Básicamente estoy intentando lo siguiente:

mosquitto_sub -h <id>.iot.us-east-2.amazonaws.com -p 443 -t "$aws/things/<sn>/shadow/update/delta" --cafile ./root-CA.crt --cert ./<sn>.cert.pem --key ./<sn>.private.key -d -i <sn> 

Dónde:

  • <id> es el prefijo del anfitrión
  • <sn> es el número de serie de la placa

Ese comando conduce a:

Cliente enviando CONNECT

y nada más. Encontré un documento de política dentro de un script de Python (para usar al crear el dispositivo):

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "iot:Connect"
      ],
      "Resource": [
        "arn:aws:iot:us-east-2:<id>:client/<sn>"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "iot:Publish"
      ],
      "Resource": [
        "arn:aws:iot:us-east-2:<id>:topic/$aws/things/<sn>/shadow/update",
        "arn:aws:iot:us-east-2:<id>:topic/IoTData"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "iot:Subscribe",
        "iot:Receive"
      ],
      "Resource": [
        "arn:aws:iot:us-east-2:<id>:topicfilter/$aws/things/<sn>/shadow/update/accepted", "arn:aws:iot:us-east-2:<id>:topicfilter/$aws/things/<sn>/shadow/update/rejected",
        "arn:aws:iot:us-east-2:<id>:topicfilter/$aws/things/<sn>/shadow/update/delta"
      ]
    }
  ]
}

Pero no estoy seguro de si esto está "adjunto" a los certificados, e incluso leyendo los documentos no estoy seguro de si el comando CLI se refiere a la consola de mi objetivo (un RPi).

ACTUALIZAR

A partir de las AWS consuelo puedo crear un nuevo certificado y descargar los tres archivos a la meta: <xxx>-certificate.pem.crt, <xxx>-private.pem.key, <xxx>-public.pem.key. Luego adjunté la política a este certificado (desde la propia consola de AWS).

Aún así, la conexión no se completa y no se recibe respuesta.

Respuestas

1 Mark Sep 28 2020 at 18:00

Tuve que adjuntar la política al certificado y configurar el puerto en 8883 porque el protocolo es MQTT y no MQTT sobre Websockets.