Mosquitto non si connette ad AWS

Sep 26 2020

Sono nuovo nei servizi AWS, sto ancora studiando i documenti. Ho ricevuto un codice Python abbastanza lungo (funzionante) che scambia dati con il Cloud.

Ora voglio pubblicare / sub messaggi con mosquitto. Fondamentalmente sto provando quanto segue:

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> 

Dove:

  • <id> è il prefisso dell'host
  • <sn> è il numero di serie della scheda

Quel comando porta a:

Il client invia CONNECT

e nient'altro. Ho trovato un documento di policy all'interno di uno script Python (da utilizzare durante la creazione del 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"
      ]
    }
  ]
}

Ma non sono sicuro che questo sia "allegato" ai certificati, e anche leggendo i documenti non sono sicuro che il comando CLI sia riferito alla console del mio obiettivo (un RPi).

AGGIORNARE

Dalle AWS consolo creo un nuovo certificato e scaricato i tre file alla destinazione: <xxx>-certificate.pem.crt, <xxx>-private.pem.key, <xxx>-public.pem.key. Quindi ho allegato la policy a questo certificato (dalla stessa console AWS).

La connessione non è ancora completata e non viene ricevuta alcuna risposta.

Risposte

1 Mark Sep 28 2020 at 18:00

Ho dovuto allegare la policy al certificato e impostare la porta su 8883 perché il protocollo è MQTT e non MQTT su Websocket.