

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Resolvendo problemas de conectividade de tunelamento AWS IoT seguro por meio da rotação dos tokens de acesso do cliente
<a name="iot-secure-tunneling-troubleshooting"></a>

Ao usar o tunelamento AWS IoT seguro, você pode ter problemas de conectividade mesmo se o túnel estiver aberto. As seções a seguir mostram alguns possíveis problemas e como você pode resolvê-los alternando os tokens de acesso do cliente. Para alternar o token de acesso do cliente (CAT), use a [RotateTunnelAccessToken](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-secure-tunneling_RotateTunnelAccessToken.html)API ou o. [rotate-tunnel-access-token](https://docs.aws.amazon.com/cli/latest/reference/iotsecuretunneling/rotate-tunnel-access-token.html) AWS CLI Dependendo se você encontrar um erro ao usar o cliente no modo de origem ou destino, você pode alternar o CAT no modo de origem ou destino, ou em ambos.

**nota**  
Se você não tiver certeza se o CAT precisa ser alternado na origem ou no destino, você pode alternar o CAT na origem e no destino configurando como `ClientMode` ALL ao usar a `RotateTunnelAccessToken` API.
Alternar o CAT não prolonga a duração do túnel. Por exemplo, digamos que a duração do túnel seja de 12 horas e o túnel já esteja aberto há 4 horas. Quando você alterna os tokens de acesso, os novos tokens gerados só podem ser usados pelas 8 horas restantes.

**Topics**
+ [Erro de token de acesso do cliente inválido](#invalid-access-token)
+ [Erro de incompatibilidade do token do cliente](#client-token-mismatch)
+ [Problemas de conectividade com o dispositivo remoto](#tunnel-open-device-error)

## Erro de token de acesso do cliente inválido
<a name="invalid-access-token"></a>

Ao usar o tunelamento AWS IoT seguro, você pode encontrar um erro de conexão ao usar o mesmo token de acesso do cliente (CAT) para se reconectar ao mesmo túnel. Nesse caso, o proxy local não consegue se conectar ao servidor proxy de encapsulamento seguro. Se você usar um cliente no modo de origem, você poderá ver a seguinte mensagem de erro:

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

O erro ocorre porque o token de acesso do cliente (CAT) só pode ser usado uma vez pelo proxy local e, em seguida, torna-se inválido. Para resolver esse erro, alterne o token de acesso do cliente no modo `SOURCE` para gerar um novo CAT para a origem. Para obter um exemplo que mostra como alternar o CAT de origem, consulte [Exemplo de CAT da fonte alternada](#rotate-token-source-example).

## Erro de incompatibilidade do token do cliente
<a name="client-token-mismatch"></a>

**nota**  
Não é recomendável usar tokens de cliente para reutilizar o CAT. Em vez disso, recomendamos que você use a `RotateTunnelAccessToken` API para alternar os tokens de acesso do cliente para se reconectar ao túnel.

Se você estiver usando tokens de cliente, poderá reutilizar o CAT para se reconectar ao túnel. Para reutilizar o CAT, você deve fornecer o token do cliente com o CAT na primeira vez em que se conectar ao encapsulamento seguro. O encapsulamento seguro armazena o token do cliente, portanto, para tentativas de conexão subsequentes usando o mesmo token, o token do cliente também deve ser fornecido. Para obter mais informações sobre o uso de tokens de cliente, consulte a [implementação da referência de proxy local em GitHub](https://github.com/aws-samples/aws-iot-securetunneling-localproxy/blob/master/V2WebSocketProtocolGuide.md).

Se você usar um cliente no modo de origem, poderá ver a seguinte mensagem de erro:

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

O erro ocorre porque o token do cliente fornecido não corresponde ao token do cliente fornecido com o CAT ao acessar o túnel. Para resolver esse erro, alterne o CAT no modo `SOURCE` para gerar um novo CAT para a origem. Por exemplo:

### Exemplo de CAT da fonte alternada
<a name="rotate-token-source-example"></a>

Veja a seguir um exemplo de como executar a `RotateTunnelAccessToken` API no modo `SOURCE` para gerar um novo CAT para a fonte:

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

A execução desse comando gera um novo token de acesso à fonte e retorna o ARN do seu túnel.

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

Agora você pode usar o novo token de origem para conectar o proxy local no modo de origem.

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

Veja a seguir um exemplo de saída da execução do proxy local:

```
...

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

## Problemas de conectividade com o dispositivo remoto
<a name="tunnel-open-device-error"></a>

Ao usar o tunelamento AWS IoT seguro, o dispositivo pode ser desconectado inesperadamente, mesmo se o túnel estiver aberto. Para identificar se um dispositivo ainda está conectado ao túnel, você pode usar a [DescribeTunnel](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-secure-tunneling_DescribeTunnel.html)API ou o [AWS CLI describe-tunnel](https://docs.aws.amazon.com/cli/latest/reference/iotsecuretunneling/describe-tunnel.html).

Um dispositivo pode ser desconectado por vários motivos. Para resolver o problema de conectividade, você pode alternar o CAT no destino se o dispositivo estiver desconectado devido aos seguintes motivos possíveis:
+ O CAT no destino tornou-se inválido.
+ O token não foi entregue ao dispositivo pelo tópico reservado do MQTT para encapsulamento seguro:

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

O exemplo a seguir mostra como resolver o problema:

### Exemplo de CAT alternar destino
<a name="rotate-token-dest-example"></a>

Considere um dispositivo remoto, `<RemoteThing1>`. Para abrir um túnel para esse item, você pode usar o seguinte comando:

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

A execução desse comando gera os detalhes do túnel e o CAT para sua origem e destino.

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

No entanto, quando você usa a [DescribeTunnel](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-secure-tunneling_DescribeTunnel.html)API, a saída indica que o dispositivo foi desconectado, conforme ilustrado abaixo:

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

A execução desse comando mostra que o dispositivo ainda não está conectado.

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

Para resolver esse erro, execute a `RotateTunnelAccessToken` API com o cliente no modo `DESTINATION` e as configurações do destino. A execução desse comando revoga o token de acesso antigo, gera um novo token e o reenvia para o tópico do 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>
```

A execução desse comando gera o novo token de acesso, como mostrado abaixo. O token é então entregue ao dispositivo para se conectar ao túnel, se o atendente do dispositivo estiver configurado corretamente.

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