Resolver problemas de conectividad de túneles AWS IoT seguros mediante la rotación de los tokens de acceso de los clientes - AWS IoT Core

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Resolver problemas de conectividad de túneles AWS IoT seguros mediante la rotación de los tokens de acceso de los clientes

Al utilizar la tunelización AWS IoT segura, es posible que se produzcan problemas de conectividad incluso si el túnel está abierto. En las siguientes secciones, se muestran algunos posibles problemas y cómo resolverlos rotando los tokens de acceso del cliente. Para rotar el token de acceso del cliente (CAT), utilice la RotateTunnelAccessTokenAPI o el. rotate-tunnel-access-token AWS CLI En función de si se produce un error al utilizar el cliente en el modo de origen o de destino, puede rotar el CAT en el modo de origen o de destino, o en ambos.

nota
  • Si no está seguro de si el CAT debe girar en el origen o en el destino, puede girar el CAT tanto en el origen como en el destino ajustando ClientMode a TODO cuando utilice la API RotateTunnelAccessToken.

  • La rotación del CAT no prolonga la duración del túnel. Por ejemplo, supongamos que la duración del túnel es de 12 horas y que el túnel ya lleva abierto 4 horas. Cuando rote los tokens de acceso, los nuevos tokens que se generen solo podrán utilizarse durante las 8 horas restantes.

Error de token de acceso al cliente no válido

Al utilizar la tunelización AWS IoT segura, se puede producir un error de conexión si se utiliza el mismo token de acceso de cliente (CAT) para volver a conectarse al mismo túnel. En este caso, el proxy local no puede conectarse al proxy host de tunelización segura. Si utiliza un cliente en el modo de origen, puede aparecer el siguiente mensaje de error:

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

El error se produce porque el proxy local solo puede usar el token de acceso de cliente (CAT) una vez y, entonces, deja de ser válido. Para resolver este error, gire el token de acceso del cliente al modo SOURCE para generar un nuevo CAT para la fuente. Para obtener un ejemplo que muestra cómo girar el CAT de origen, consulte Rote la fuente (ejemplo de CAT).

Error de discordancia del token del cliente

nota

No se recomienda usar tokens de cliente para reutilizar el CAT. En su lugar, le recomendamos que utilice la API RotateTunnelAccessToken para rotar los tokens de acceso del cliente y volver a conectarse al túnel.

Si utiliza tokens de cliente, puede reutilizar el CAT para volver a conectarse al túnel. Para reutilizar el CAT, debe proporcionar el token de cliente junto con el CAT la primera vez que se conecte a un túnel seguro. La tunelización segura almacena el token del cliente, por lo que, para los siguientes intentos de conexión con el mismo token, también se debe proporcionar el token del cliente. Para obtener más información sobre el uso de los tokens de cliente, consulte la implementación de referencia del proxy local en. GitHub

Si está utilizando un cliente en modo fuente, es posible que aparezca el siguiente error:

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

El error se produce porque el token de cliente proporcionado no coincide con el token de cliente que se proporcionó con el CAT al acceder al túnel. Para resolver este error, gire el CAT en el modo SOURCE para generar un nuevo CAT para la fuente. A continuación se muestra un ejemplo:

A continuación, se muestra un ejemplo de cómo ejecutar la RotateTunnelAccessToken API en el modo SOURCE para generar un nuevo CAT para la fuente:

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

La ejecución de este comando genera un nuevo token de acceso a la fuente y devuelve el ARN de su túnel.

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

Ahora puede utilizar el nuevo token de fuente para conectar el proxy local en modo fuente.

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

A continuación se muestra un ejemplo de resultado de la ejecución del proxy local en modo .

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

Problemas de conectividad de dispositivos remotos

Al utilizar la tunelización AWS IoT segura, el dispositivo podría desconectarse inesperadamente aunque el túnel esté abierto. Para identificar si un dispositivo sigue conectado al túnel, puedes usar la DescribeTunnelAPI o el describe-tunnel. AWS CLI

Un dispositivo puede desconectarse por varios motivos. Para resolver el problema de conectividad, puede girar el CAT hacia el destino si el dispositivo se desconectó por los siguientes motivos posibles:

  • El CAT del destino dejó de ser válido.

  • El token no se entregó al dispositivo a través del tema MQTT reservado para la tunelización segura:

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

El siguiente ejemplo muestra cómo resolver este problema:

Considere un dispositivo remoto, <RemoteThing1>. Para abrir un túnel para esa cosa, puede utilizar el comando siguiente:

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

Al ejecutar este comando, se generan los detalles del túnel y el CAT para el origen y el destino.

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

Sin embargo, cuando utilizas la DescribeTunnelAPI, el resultado indica que el dispositivo se ha desconectado, como se muestra a continuación:

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

Al ejecutar este comando, se muestra que el dispositivo aún no está conectado.

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

Para resolver este error, ejecute la API RotateTunnelAccessToken con el cliente en modo DESTINATION y con las configuraciones del destino. Al ejecutar este comando, se revoca el token de acceso anterior, se genera un token nuevo y se reenvía este token al tema 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>

La ejecución de este comando genera el nuevo token de acceso como se muestra a continuación. A continuación, el token se entrega al dispositivo mediante MQTT para conectarse al túnel, si el agente del dispositivo está configurado correctamente.

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