Apertura di un tunnel utilizzando la configurazione manuale e connessione al dispositivo remoto - AWS IoT Core

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Apertura di un tunnel utilizzando la configurazione manuale e connessione al dispositivo remoto

Quando si apre un tunnel, è possibile scegliere il metodo di configurazione rapida o manuale per aprire un tunnel nel dispositivo remoto. In questo tutorial viene illustrato come aprire un tunnel utilizzando il metodo di configurazione manuale e configurare e avviare il proxy locale per connettersi al dispositivo remoto.

Quando si utilizza il metodo di configurazione manuale, è necessario specificare manualmente le configurazioni del tunnel durante la creazione. Dopo aver creato il tunnel, puoi usare SSH all'interno del browser o aprire un terminale all'esterno della AWS IoT console. In questo tutorial viene illustrato come utilizzare il terminale esterno alla console per accedere al dispositivo remoto. Verrà inoltre descritto come configurare il proxy locale e connettersi ad esso per interagire con il dispositivo remoto. Per connettersi al proxy locale, è necessario scaricare il token di accesso di origine durante la creazione del tunnel.

Con questo metodo di configurazione, è possibile utilizzare servizi diversi da SSH, come FTP, per connettersi al dispositivo remoto. Per ulteriori informazioni sui diversi metodi di configurazione, consulta Metodi di configurazione del tunnel.

Prerequisiti per il metodo di configurazione manuale

  • I firewall dietro cui si trova il dispositivo remoto devono consentire il traffico in uscita sulla porta 443. Il tunnel creato utilizzerà questa porta per connettersi al dispositivo remoto.

  • Sul dispositivo remoto è in esecuzione un agente per dispositivi IoT (vediSnippet dell'agente IoT) che si connette al gateway del AWS IoT dispositivo ed è configurato con un abbonamento tematico MQTT. Per ulteriori informazioni, consulta Connettere un dispositivo al gateway del AWS IoT dispositivo.

  • È necessario disporre di un daemon SSH in esecuzione sul dispositivo remoto.

  • Hai scaricato il codice sorgente del proxy locale da GitHube lo hai creato per la piattaforma di tua scelta. Faremo riferimento al file eseguibile proxy locale costruito come localproxy in questo tutorial.

Apertura di un tunnel

Puoi aprire un tunnel sicuro utilizzando AWS Management Console, AWS IoT API Reference o AWS CLI. Facoltativamente, è possibile configurare un nome di destinazione, ma non è richiesto per questo tutorial. Se si configura la destinazione, il tunneling sicuro distribuirà automaticamente il token di accesso al dispositivo remoto tramite MQTT. Per ulteriori informazioni, consulta Metodi di creazione di tunnel nella AWS IoT console.

Per aprire un tunnel tramite la console
  1. Vai a Hub dei tunnel della console AWS IoT e scegli Create tunnel (Crea tunnel).

    AWS IoT console che mostra un elenco vuoto di tunnel con opzioni per creare, chiudere o eliminare tunnel.
  2. Per questo tutorial, scegli Manual setup (Configurazione manuale) come metodo di creazione del tunnel, quindi seleziona Next (Avanti). Per informazioni sull'utilizzo del metodo Quick setup (Configurazione rapida) per creare un tunnel, consulta Apertura di un tunnel e utilizzo di SSH basato su browser per accedere al dispositivo remoto.

    Nota

    Se si crea un tunnel sicuro dalla pagina dei dettagli di un oggetto, è possibile scegliere se creare un nuovo tunnel o utilizzarne uno esistente. Per ulteriori informazioni, consulta Apertura di un tunnel per dispositivo remoto e utilizzo di SSH basato su browser.

    Due opzioni per configurare una connessione al tunnel: configurazione rapida (SSH) o configurazione manuale, che richiede la configurazione di un proxy locale e la gestione dei token di accesso.
  3. (Facoltativo) Immetti le impostazioni di configurazione per il tunnel. Puoi anche ignorare questo passaggio e andare a quello successivo per creare un tunnel.

    Immetti una descrizione del tunnel, la durata del timeout del tunnel e i tag delle risorse come coppie chiave-valore per facilitare l'identificazione della risorsa. Per questo tutorial, puoi ignorare la configurazione della destinazione.

    Nota

    Non ti verrà addebitato alcun costo in base alla durata di apertura di un tunnel. Ti vengono addebitati dei costi solo durante la creazione di un nuovo tunnel. Per informazioni sui prezzi, consulta Tunneling sicuro in Prezzi di AWS IoT Device Management.

  4. Scarica i token di accesso client e scegli Done (Fine). I token non saranno disponibili per il download dopo aver scelto Done (Fine).

    Questi token possono essere utilizzati una sola volta per connettersi al tunnel. Se i token vengono persi o il tunnel si disconnette, è possibile generare e inviare nuovi token al dispositivo remoto per riconnettersi al tunnel.

    Token di accesso all'origine e alla destinazione per creare una connessione sicura al tunnel, con istruzioni su come ruotare e inviare nuovamente i token, se necessario.
Per aprire un tunnel mediante l'API

Per aprire un nuovo tunnel, puoi utilizzare l'operazione API. OpenTunnel Utilizzando l'API è anche possibile specificare configurazioni aggiuntive, come la durata del tunnel e la configurazione della destinazione.

aws iotsecuretunneling open-tunnel \ --region us-east-1 \ --endpoint https://api.us-east-1.tunneling.iot.amazonaws.com

L'esecuzione di questo comando crea un nuovo tunnel e fornisce i token di accesso di origine e destinazione.

{ "tunnelId": "01234567-89ab-0123-4c56-789a01234bcd", "tunnelArn": "arn:aws:iot:us-east-1:123456789012:tunnel/01234567-89ab-0123-4c56-789a01234bcd", "sourceAccessToken": "<SOURCE_ACCESS_TOKEN>", "destinationAccessToken": "<DESTINATION_ACCESS_TOKEN>" }

Nuovo invio dei token di accesso al tunnel

I token ottenuti durante la creazione di un tunnel possono essere utilizzati una sola volta per connettersi al tunnel. Se si smarrisce il token di accesso o il tunnel si disconnette, è possibile inviare nuovamente nuovi token di accesso al dispositivo remoto utilizzando MQTT senza costi aggiuntivi. AWS IoT il tunneling sicuro revocherà i token attuali e restituirà nuovi token di accesso per la riconnessione al tunnel.

Rotazione dei token dalla console
  1. Vai all'hub Tunnels della AWS IoT console e scegli il tunnel che hai creato.

  2. Nella pagina dei dettagli del tunnel, scegli Generate new access tokens (Genera nuovi token di accesso), quindi scegli Next (Avanti).

  3. Scarica i nuovi token di accesso per il tunnel e scegli Done (Fine). Questi token possono essere utilizzati una sola volta. Se smarrisci questi token o il tunnel si disconnette, puoi inviare nuovi token di accesso.

    Accedi ai token per i dispositivi di origine e destinazione con opzioni per copiarli o scaricarli. Il testo spiega che i token rotanti revocano i token correnti e generano nuovi token monouso per ricollegare un tunnel disconnesso.
Rotazione dei token di accesso mediante l'API

Per ruotare i token di accesso al tunnel, puoi utilizzare l'operazione RotateTunnelAccessTokenAPI per revocare i token correnti e restituire nuovi token di accesso per la riconnessione al tunnel. Ad esempio, il comando seguente ruota i token di accesso per il dispositivo di destinazione, RemoteThing1.

aws iotsecuretunneling rotate-tunnel-access-token \ --tunnel-id <tunnel-id> \ --client-mode DESTINATION \ --destination-config thingName=<RemoteThing1>,services=SSH \ --region <region>

L'esecuzione di questo comando genera il nuovo token di accesso come mostrato nel seguente esempio. Il token viene quindi consegnato al dispositivo mediante MQTT per connettersi al tunnel, se l'agente di dispositivo è configurato correttamente.

{ "destinationAccessToken": "destination-access-token", "tunnelArn": "arn:aws:iot:region:account-id:tunnel/tunnel-id" }

Per esempi che mostrano come e quando ruotare i token di accesso, consulta Risoluzione dei problemi di connettività del tunneling AWS IoT sicuro mediante la rotazione dei token di accesso del client.

Configurazione e avvio del proxy locale

Per connettersi al dispositivo remoto, aprire un terminale sul laptop, quindi configurare e avviare il proxy locale. Il proxy locale trasmette i dati inviati dall'applicazione in esecuzione sul dispositivo di origine utilizzando il tunneling sicuro su una connessione sicura. WebSocket È possibile scaricare il sorgente proxy locale da. GitHub

Dopo aver configurato il proxy locale, copiare il token di accesso al client di origine e utilizzarlo per avviare il proxy locale in modalità di origine. Di seguito viene mostrato un comando di esempio per avviare il proxy locale. Nel comando seguente, il proxy locale è configurato per l'ascolto di nuove connessioni sulla porta 5555. In questo comando:

  • -rspecifica la Regione AWS, che deve essere la stessa regione in cui è stato creato il tunnel.

  • -s specifica la porta a cui il proxy deve connettersi.

  • -t specifica il testo del token client.

./localproxy -r us-east-1 -s 5555 -t source-client-access-token

L'esecuzione di questo comando avvierà il proxy locale in modalità di origine. Se si riceve il seguente errore dopo l'esecuzione del comando, impostare il percorso CA. Per informazioni, consulta Secure tunneling local proxy on. GitHub

Could not perform SSL handshake with proxy server: certificate verify failed

Di seguito è riportato un output di esempio dell'esecuzione del proxy locale nella modalità source.

... ... Starting proxy in source mode Attempting to establish web socket connection with endpoint wss://data.tunneling.iot.us-east-1.amazonaws.com:443 Resolved proxy server IP: 10.10.0.11 Connected successfully with proxy server Performing SSL handshake with proxy server Successfully completed SSL handshake with proxy server HTTP/1.1 101 Switching Protocols ... Connection: upgrade channel-id: 01234567890abc23-00001234-0005678a-b1234c5de677a001-2bc3d456 upgrade: websocket ... Web socket session ID: 01234567890abc23-00001234-0005678a-b1234c5de677a001-2bc3d456 Web socket subprotocol selected: aws.iot.securetunneling-2.0 Successfully established websocket connection with proxy server: wss://data.tunneling.iot.us-east-1.amazonaws.com:443 Setting up web socket pings for every 5000 milliseconds Scheduled next read: ... Starting web socket read loop continue reading... Resolved bind IP: 127.0.0.1 Listening for new connection on port 5555

Avvia una sessione SSH

Apri un altro terminale e utilizza il comando seguente per avviare una nuova sessione SSH collegandosi al proxy locale sulla porta 5555.

ssh username@localhost -p 5555

Potrebbe essere richiesta una password per la sessione SSH. Al termine della sessione SSH, digita exit per chiudere la sessione.

Pulizia

  • Chiusura del tunnel

    Al termine dell'utilizzo, si consiglia di chiudere il tunnel. Un tunnel può chiudersi anche se è rimasto aperto per un periodo di tempo superiore alla durata del tunnel specificata. Un tunnel non può essere riaperto dopo che è stato chiuso. È ancora possibile duplicare un tunnel aprendo il tunnel chiuso e quindi selezionando Duplicate tunnel (Duplica tunnel). Specificare la durata del tunnel che si desidera utilizzare, quindi creare il nuovo tunnel.

    • Per chiudere un singolo tunnel o più tunnel dalla console AWS IoT , passa all'Hub dei tunnel, scegli i tunnel che desideri chiudere, quindi seleziona Close tunnel (Chiudi tunnel).

    • Per chiudere uno o più tunnel utilizzando l' AWS IoT API Reference API, utilizza l'CloseTunneloperazione API.

      aws iotsecuretunneling close-tunnel \ --tunnel-id "01234567-89ab-0123-4c56-789a01234bcd"
  • Eliminazione del tunnel

    Puoi eliminare definitivamente un tunnel dal tuo Account AWS.

    avvertimento

    Le operazioni di eliminazione sono permanenti e non possono essere annullate.

    • Per eliminare un singolo tunnel o più tunnel dalla console AWS IoT , passa all'Hub dei tunnel, scegli i tunnel che desideri eliminare, quindi seleziona Delete tunnel (Elimina tunnel).

    • Per eliminare uno o più tunnel utilizzando l' AWS IoT API Reference API, utilizza l'operazione CloseTunnelAPI. Quando utilizzi l'API, imposta il flag delete su true.

      aws iotsecuretunneling close-tunnel \ --tunnel-id "01234567-89ab-0123-4c56-789a01234bcd" --delete true