Resolvendo problemas de conectividade de tunelamento AWS IoT seguro por meio da rotação dos tokens de acesso do cliente - AWS IoT Core

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

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 RotateTunnelAccessTokenAPI ou o. rotate-tunnel-access-token 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.

Erro de token de acesso do cliente inválido

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.

Erro de incompatibilidade do token do cliente

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.

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:

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

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 DescribeTunnelAPI ou o AWS CLI describe-tunnel.

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:

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 DescribeTunnelAPI, 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" }