Menyelesaikan masalah konektivitas tunneling yang AWS IoT aman dengan memutar token akses klien - AWS IoT Core

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Menyelesaikan masalah konektivitas tunneling yang AWS IoT aman dengan memutar token akses klien

Saat Anda menggunakan tunneling AWS IoT aman, Anda mungkin mengalami masalah konektivitas meskipun terowongan terbuka. Bagian berikut menunjukkan beberapa kemungkinan masalah dan bagaimana Anda dapat menyelesaikannya dengan memutar token akses klien. Untuk memutar token akses klien (CAT), gunakan RotateTunnelAccessTokenAPI atau rotate-tunnel-access-token AWS CLI. Bergantung pada apakah Anda mengalami kesalahan dengan menggunakan klien dalam mode sumber atau tujuan, Anda dapat memutar CAT baik dalam mode sumber atau tujuan, atau keduanya.

catatan
  • Jika Anda tidak yakin apakah CAT perlu diputar pada sumber atau tujuan, Anda dapat memutar CAT pada sumber dan tujuan dengan menyetel ClientMode ke ALL saat menggunakan RotateTunnelAccessToken API.

  • Memutar CAT tidak memperpanjang durasi terowongan. Misalnya, katakanlah durasi terowongan adalah 12 jam dan terowongan sudah buka selama 4 jam. Saat Anda memutar token akses, token baru yang dihasilkan hanya dapat digunakan selama 8 jam tersisa.

Kesalahan token akses klien tidak valid

Saat menggunakan tunneling AWS IoT aman, Anda dapat mengalami kesalahan koneksi saat menggunakan token akses klien (CAT) yang sama untuk menyambung kembali ke terowongan yang sama. Dalam hal ini, proxy lokal tidak dapat terhubung ke server proxy tunneling yang aman. Jika Anda menggunakan klien dalam mode sumber, Anda mungkin melihat pesan galat berikut:

Invalid access token: The access token was previously used and cannot be used again

Kesalahan terjadi karena token akses klien (CAT) hanya dapat digunakan sekali oleh proxy lokal, dan kemudian menjadi tidak valid. Untuk mengatasi kesalahan ini, putar token akses klien dalam SOURCE mode untuk menghasilkan CAT baru untuk sumbernya. Untuk contoh yang menunjukkan cara memutar CAT sumber, lihatPutar contoh CAT sumber.

Kesalahan ketidakcocokan token klien

catatan

Menggunakan token klien untuk menggunakan kembali CAT tidak disarankan. Kami menyarankan Anda menggunakan RotateTunnelAccessToken API sebagai gantinya untuk memutar token akses klien untuk menyambung kembali ke terowongan.

Jika Anda menggunakan token klien, Anda dapat menggunakan kembali CAT untuk menyambung kembali ke terowongan. Untuk menggunakan kembali CAT, Anda harus memberikan token klien dengan CAT saat pertama kali Anda terhubung ke tunneling yang aman. Tunneling aman menyimpan token klien sehingga untuk upaya koneksi berikutnya menggunakan token yang sama, token klien juga harus disediakan. Untuk informasi selengkapnya tentang penggunaan token klien, lihat implementasi referensi proxy lokal di GitHub.

Saat menggunakan token klien, jika Anda menggunakan klien dalam mode sumber, Anda mungkin melihat kesalahan berikut:

Invalid client token: The provided client token does not match the client token that was previously set.

Kesalahan terjadi karena token klien yang disediakan tidak cocok dengan token klien yang disediakan dengan CAT saat mengakses terowongan. Untuk mengatasi kesalahan ini, putar CAT dalam SOURCE mode untuk menghasilkan CAT baru untuk sumbernya. Berikut ini menunjukkan contoh:

Berikut ini menunjukkan contoh cara menjalankan RotateTunnelAccessToken API dalam SOURCE mode untuk menghasilkan CAT baru untuk sumbernya:

aws iotsecuretunneling rotate-tunnel-access-token \ --region <region> \ --tunnel-id <tunnel-id> \ --client-mode SOURCE

Menjalankan perintah ini menghasilkan token akses sumber baru dan mengembalikan ARN terowongan Anda.

{ "sourceAccessToken": "<source-access-token>", "tunnelArn": "arn:aws:iot:<region>:<account-id>:tunnel/<tunnel-id>" }

Anda sekarang dapat menggunakan token sumber baru untuk menghubungkan proxy lokal dalam mode sumber.

export AWSIOT_TUNNEL_ACCESS_TOKEN=<source-access-token> ./localproxy -r <region> -s <port>

Berikut ini menunjukkan contoh output menjalankan proxy lokal:

... [info] Starting proxy in source mode ... [info] Successfully established websocket connection with proxy server ... [info] Listening for new connection on port <port> ...

Masalah konektivitas perangkat jarak jauh

Saat menggunakan tunneling AWS IoT aman, perangkat mungkin terputus secara tidak terduga bahkan jika terowongan terbuka. Untuk mengidentifikasi apakah perangkat masih terhubung ke terowongan, Anda dapat menggunakan DescribeTunnelAPI atau terowongan deskripsikan. AWS CLI

Perangkat dapat terputus karena berbagai alasan. Untuk mengatasi masalah konektivitas, Anda dapat memutar CAT di tujuan jika perangkat terputus karena kemungkinan alasan berikut:

  • CAT di tempat tujuan menjadi tidak valid.

  • Token tidak dikirim ke perangkat melalui topik MQTT yang dicadangkan terowongan aman:

    $aws/things/<thing-name>/tunnels/notify

Contoh berikut menunjukkan cara mengatasi masalah ini:

Pertimbangkan perangkat jarak jauh,<RemoteThing1>. Untuk membuka terowongan untuk hal itu, Anda dapat menggunakan perintah berikut:

aws iotsecuretunneling open-tunnel \ --region <region> \ --destination-config thingName=<RemoteThing1>,services=SSH

Menjalankan perintah ini menghasilkan detail terowongan dan CAT untuk sumber dan tujuan Anda.

{ "sourceAccessToken": "<source-access-token>", "destinationAccessToken": "<destination-access-token>", "tunnelId": "<tunnel-id>", "tunnelArn": "arn:aws:iot:<region>:<account-id>:tunnel/tunnel-id" }

Namun, saat Anda menggunakan DescribeTunnelAPI, output menunjukkan bahwa perangkat telah terputus, seperti yang diilustrasikan di bawah ini:

aws iotsecuretunneling describe-tunnel \ --tunnel-id <tunnel-id> \ --region <region>

Menjalankan perintah ini menampilkan bahwa perangkat masih tidak terhubung.

{ "tunnel": { ... "destinationConnectionState": { "status": "DISCONNECTED" }, ... } }

Untuk mengatasi kesalahan ini, jalankan RotateTunnelAccessToken API dengan klien dalam DESTINATION mode dan konfigurasi untuk tujuan. Menjalankan perintah ini akan mencabut token akses lama, menghasilkan token baru, dan mengirim ulang token ini ke topik MQTT:

$aws/things/<thing-name>/tunnels/notify

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

Menjalankan perintah ini menghasilkan token akses baru seperti yang ditunjukkan di bawah ini. Token kemudian dikirim ke perangkat untuk terhubung ke terowongan, jika agen perangkat diatur dengan benar.

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