

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
<a name="iot-secure-tunneling-troubleshooting"></a>

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 [RotateTunnelAccessToken](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-secure-tunneling_RotateTunnelAccessToken.html)API atau [rotate-tunnel-access-token](https://docs.aws.amazon.com/cli/latest/reference/iotsecuretunneling/rotate-tunnel-access-token.html) 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.

**Topics**
+ [Kesalahan token akses klien tidak valid](#invalid-access-token)
+ [Kesalahan ketidakcocokan token klien](#client-token-mismatch)
+ [Masalah konektivitas perangkat jarak jauh](#tunnel-open-device-error)

## Kesalahan token akses klien tidak valid
<a name="invalid-access-token"></a>

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, lihat[Putar contoh CAT sumber](#rotate-token-source-example).

## Kesalahan ketidakcocokan token klien
<a name="client-token-mismatch"></a>

**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](https://github.com/aws-samples/aws-iot-securetunneling-localproxy/blob/master/V2WebSocketProtocolGuide.md).

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:

### Putar contoh CAT sumber
<a name="rotate-token-source-example"></a>

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
<a name="tunnel-open-device-error"></a>

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 [DescribeTunnel](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-secure-tunneling_DescribeTunnel.html)API atau terowongan [deskripsikan.](https://docs.aws.amazon.com/cli/latest/reference/iotsecuretunneling/describe-tunnel.html) 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:

### Putar contoh CAT tujuan
<a name="rotate-token-dest-example"></a>

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 [DescribeTunnel](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-secure-tunneling_DescribeTunnel.html)API, 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 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"
}
```