

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.

# AWS IoT tunelización segura
<a name="secure-tunneling"></a>

Cuando los dispositivos se implementan detrás de firewalls restringidos en sitios remotos, necesita una forma de obtener acceso a esos dispositivos para solucionar problemas, aplicar actualizaciones de configuración y otras tareas operativas. Utilice la tunelización segura para establecer una comunicación bidireccional con dispositivos remotos a través de una conexión segura gestionada por. AWS IoT La tunelización segura no requiere actualizaciones de las reglas de firewall entrantes existentes, por lo que puede mantener el mismo nivel de seguridad proporcionado por las reglas de firewall en un sitio remoto.

Por ejemplo, un sensor instalado en una fábrica que está a varios kilómetros de distancia está teniendo problemas para medir la temperatura de la fábrica. Puede utilizar la tunelización segura para abrir e iniciar rápidamente una sesión en ese sensor. Después de identificar el problema (por ejemplo, un archivo de configuración incorrecto), puede restablecer el archivo y reiniciar el sensor a través de la misma sesión. En comparación con una solución de problemas más tradicional (por ejemplo, enviar a un técnico a la fábrica para que revise el sensor), la tunelización segura reduce la respuesta a incidentes y el tiempo de recuperación, así como los costos de explotación.

# ¿Qué es la tunelización segura?
<a name="secure-tunneling-what-is"></a>

Utilice la tunelización segura para acceder a los dispositivos que están desplegados detrás de firewalls con puertos restringidos en sitios remotos. Puede conectarse al dispositivo de destino desde su ordenador portátil o de sobremesa como dispositivo de origen mediante la Nube de AWS El origen y el destino se comunican mediante un proxy local de código abierto que se ejecuta en cada dispositivo. El proxy local se comunica con él Nube de AWS mediante un puerto abierto permitido por el firewall, normalmente el 443. Los datos que se transmiten a través del túnel se cifran mediante seguridad de la capa de transporte (TLS).

**Topics**
+ [Conceptos de tunelización segura](secure-tunneling-concepts.md)
+ [Cómo funciona la tunelización segura](how-secure-tunneling-works.md)
+ [Ciclo de vida del túnel seguro](tunnel-lifecycle.md)

# Conceptos de tunelización segura
<a name="secure-tunneling-concepts"></a>

La tunelización segura utiliza los siguientes términos al establecer la comunicación con dispositivos remotos. Para obtener información sobre cómo funciona la tunelización segura, consulte [Cómo funciona la tunelización segura](how-secure-tunneling-works.md).

**Token de acceso de cliente (CAT)**  
Un par de tokens generados por la tunelización segura cuando se crea un nuevo túnel. El CAT es utilizado por los dispositivos de origen y destino para conectarse al servicio de túnel seguro. El CAT solo puede utilizarse una vez para conectarse al túnel. Para volver a conectarse al túnel, rote los tokens de acceso del cliente mediante la operación [RotateTunnelAccessToken](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-secure-tunneling_RotateTunnelAccessToken.html)API o el comando [rotate-tunnel-access-token](https://docs.aws.amazon.com/cli/latest/reference/iotsecuretunneling/rotate-tunnel-access-token.html)CLI.

**Token de cliente**  
Un valor único generado por el cliente que AWS IoT Secure Tunneling puede utilizar en todas las conexiones de reintento posteriores al mismo túnel. Este campo es opcional. Si no se proporciona el token del cliente, el token de acceso del cliente (CAT) solo se puede usar una vez para el mismo túnel. Se rechazarán los intentos de conexión posteriores que utilicen el mismo CAT. Para obtener más información sobre el uso de los tokens de cliente, consulte la implementación de [referencia del proxy local](https://github.com/aws-samples/aws-iot-securetunneling-localproxy/blob/master/V2WebSocketProtocolGuide.md) en. GitHub

**Aplicación de destino**  
La aplicación que se ejecuta en el dispositivo de destino. Por ejemplo, la aplicación de destino puede ser un daemon SSH para establecer una sesión SSH mediante tunelización segura.

**Dispositivo de destino**  
El dispositivo remoto al que desea obtener acceso.

**Agente de dispositivo**  
Una aplicación de IoT que se conecta a la puerta de enlace del AWS IoT dispositivo y escucha las notificaciones de nuevos túneles a través de MQTT. Para obtener más información, consulte [Fragmento de agente de IoT](configure-remote-device.md#agent-snippet).

**Proxy local**  
Un proxy de software que se ejecuta en los dispositivos de origen y destino y retransmite un flujo de datos entre la tunelización segura y la aplicación del dispositivo. El proxy local se puede ejecutar en modo de origen o modo de destino. Para obtener más información, consulte [Proxy local](local-proxy.md).

**Dispositivo de origen**  
El dispositivo que un operador utiliza para iniciar una sesión en el dispositivo de destino, normalmente un equipo portátil o de sobremesa.

**Túnel**  
 Una ruta lógica AWS IoT que permite la comunicación bidireccional entre un dispositivo de origen y un dispositivo de destino.

# Cómo funciona la tunelización segura
<a name="how-secure-tunneling-works"></a>

A continuación, se muestra cómo la tunelización segura establece una conexión entre el dispositivo de origen y el de destino. Para obtener información sobre los distintos términos, como el token de acceso de cliente (CAT), consulte [Conceptos de tunelización segura](secure-tunneling-concepts.md).

1. 

**Abrir un túnel**  
[Para abrir un túnel para iniciar una sesión con el dispositivo de destino remoto, puede utilizar el Consola de administración de AWS comando [AWS CLI open-tunnel](https://docs.aws.amazon.com/cli/latest/reference/iotsecuretunneling/open-tunnel.html) o la API. OpenTunnel](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-secure-tunneling_OpenTunnel)

1. 

**Descargue el par de tokens de acceso de cliente**  
Después de abrir un túnel, puede descargar el token de acceso de cliente (CAT) para su origen y destino y guardarlo en su dispositivo de origen. Debe recuperar el CAT y guardarlo ahora antes de iniciar el proxy local.

1. 

**Inicie el proxy local en modo de destino**  
El agente de IoT que se ha instalado y se está ejecutando en el dispositivo de destino se suscribirá al tema MQTT reservado `$aws/things/thing-name/tunnels/notify` y recibirá el CAT. Este *thing-name* es el nombre de AWS IoT lo que has creado para tu destino. Para obtener más información, consulte [Temas de tunelización segura](reserved-topics.md#reserved-topics-secure).

   Luego, el agente de IoT usa el CAT para iniciar el proxy local en modo de destino y configurar una conexión en el lado de destino del túnel. Para obtener más información, consulte [Fragmento de agente de IoT](configure-remote-device.md#agent-snippet).

1. 

**Inicie el proxy local en modo fuente**  
Una vez abierto el túnel, AWS IoT Device Management proporciona el CAT de la fuente que puede descargar en el dispositivo fuente. Puede usar el CAT para iniciar el proxy local en modo fuente, que luego conecta el lado fuente del túnel. Para obtener más información sobre las sondas locales, consulte [Proxy local](local-proxy.md).

1. 

**Abra una sesión SSH**  
Como ambos lados del túnel están conectados, puede iniciar una sesión SSH utilizando el proxy local en el lado de origen.

Para obtener más información sobre cómo utilizar el Consola de administración de AWS para abrir un túnel e iniciar una sesión SSH, consulte[Abra un túnel e inicie una sesión SSH en el dispositivo remoto](secure-tunneling-tutorial-open-tunnel.md).

 En el siguiente vídeo se describe cómo funciona la tunelización segura y se explica el proceso de configuración de una sesión SSH en un dispositivo Raspberry Pi.

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/Vq67jKZTR-c/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/Vq67jKZTR-c)


# Ciclo de vida del túnel seguro
<a name="tunnel-lifecycle"></a>

Los túneles pueden tener el estado `OPEN` o `CLOSED`. Las conexiones al túnel pueden tener el estado `CONNECTED` o `DISCONNECTED`. A continuación se muestra cómo funcionan los diferentes estados del túnel y de la conexión.

1. Cuando se abre un túnel, este tiene el estado `OPEN`. El estado de conexión de origen y destino del túnel se establece en `DISCONNECTED`.

1. Cuando un dispositivo (origen o destino) se conecta al túnel, el estado de conexión correspondiente cambia a `CONNECTED`.

1. Cuando un dispositivo se desconecta del túnel mientras el estado del túnel permanece `OPEN`, el estado de la conexión correspondiente vuelve a cambiar a `DISCONNECTED`. Un dispositivo puede conectarse y desconectarse de un túnel varias veces mientras el túnel tenga el estado `OPEN`.
**nota**  
Los tokens de acceso de cliente (CAT) sólo pueden utilizarse una vez para conectarse a un túnel. Para volver a conectarse al túnel, rote los tokens de acceso del cliente mediante la operación [RotateTunnelAccessToken](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-secure-tunneling_RotateTunnelAccessToken.html)API o el comando [rotate-tunnel-access-token](https://docs.aws.amazon.com/cli/latest/reference/iotsecuretunneling/rotate-tunnel-access-token.html)CLI. Para ver ejemplos, consulte [Resolver problemas de conectividad de túneles AWS IoT seguros mediante la rotación de los tokens de acceso de los clientes](iot-secure-tunneling-troubleshooting.md).

1. Cuando se llama a `CloseTunnel` o el túnel permanece `OPEN` durante más tiempo que el valor `MaxLifetimeTimeout`, el estado de un túnel se convierte en `CLOSED`. Puede configurar `MaxLifetimeTimeout` al llamar a `OpenTunnel`. `MaxLifetimeTimeout` está establecido de forma predeterminada en 12 horas si no se especifica un valor.
**nota**  
Un túnel no se puede volver a abrir cuando tiene el estado `CLOSED`.

1. Mientras el túnel está visible, puede llamar a `DescribeTunnel` y `ListTunnels` para ver los metadatos del túnel. El túnel puede estar visible en la AWS IoT consola durante al menos tres horas antes de que se elimine. 

# AWS IoT tutoriales de tunelización segura
<a name="secure-tunneling-tutorial"></a>

AWS IoT la tunelización segura ayuda a los clientes a establecer una comunicación bidireccional con los dispositivos remotos que se encuentran detrás de un firewall a través de una conexión segura gestionada por. AWS IoT

[Para hacer una demostración de la tunelización AWS IoT segura, utilice nuestra AWS IoT demostración de tunelización segura en. GitHub](https://github.com/aws-samples/iot-secure-tunneling-demo)

Los siguientes tutoriales le ayudarán a aprender cómo empezar a utilizar la tunelización segura. Aprenderá a:

1. Cree un túnel seguro utilizando los métodos de configuración rápida y manual para acceder al dispositivo remoto.

1. Configure el proxy local cuando utilice el método de configuración manual y conéctese al túnel para acceder al dispositivo de destino.

1. Acceda por SSH al dispositivo remoto desde un navegador sin tener que configurar el proxy local.

1. Convierta un túnel creado con el método de configuración manual AWS CLI o utilice el método de configuración rápida.

## Tutoriales en esta sección
<a name="tunneling-tutorial-overview"></a>

Los tutoriales de esta sección se centran en la creación de un túnel utilizando la referencia Consola de administración de AWS y la AWS IoT API. En la AWS IoT consola, puedes crear un túnel desde la página [central de túneles](https://console.aws.amazon.com/iot/home#/tunnels) o desde la página de detalles de un elemento que hayas creado. Para obtener más información, consulte [Métodos de creación de túneles en la AWS IoT consola](secure-tunneling-tutorial-open-tunnel.md#tunneling-tutorial-flows).

Este tutorial contiene las siguientes secciones:
+ 

**[Abra un túnel y usa SSH basado en un navegador para acceder al dispositivo remoto](tunneling-tutorial-quick-setup.md)**  
Este tutorial muestra cómo abrir un túnel desde la página [Central de túneles](https://console.aws.amazon.com/iot/home#/tunnels) mediante el método de configuración rápida. También aprenderás a usar el SSH basado en un navegador para acceder al dispositivo remoto mediante una interfaz de línea de comandos contextual dentro de la consola. AWS IoT 

  
+ 

**[Abra un túnel mediante la configuración manual y conéctelo a un dispositivo remoto](tunneling-tutorial-manual-setup.md)**  
Este tutorial muestra cómo abrir un túnel desde la página [Central de túneles](https://console.aws.amazon.com/iot/home#/tunnels) mediante el método de configuración manual. También aprenderá a configurar e iniciar el proxy local desde una terminal de su dispositivo fuente y a conectarse al túnel.
+ 

**[Abra un túnel para el dispositivo remoto y utilice SSH basado en navegador](tunneling-tutorial-existing-tunnel.md)**  
En este tutorial se muestra cómo abrir un túnel desde la página de detalles de un objeto que haya creado. Aprenderá a crear un túnel nuevo y a utilizar uno existente. El túnel existente corresponde al túnel abierto más reciente que se creó para el dispositivo. También puede utilizar el SSH basado en navegador para acceder al dispositivo remoto.

**Topics**
+ [Tutoriales en esta sección](#tunneling-tutorial-overview)
+ [Abra un túnel e inicie una sesión SSH en el dispositivo remoto](secure-tunneling-tutorial-open-tunnel.md)
+ [Abra un túnel para el dispositivo remoto y utilice SSH basado en navegador](tunneling-tutorial-existing-tunnel.md)

# Abra un túnel e inicie una sesión SSH en el dispositivo remoto
<a name="secure-tunneling-tutorial-open-tunnel"></a>

En estos tutoriales, aprenderá a acceder de forma remota a un dispositivo que se encuentra detrás de un firewall. No puede iniciar una sesión SSH directa en el dispositivo porque el firewall bloquea todo el tráfico entrante. En los tutoriales se muestra cómo abrir un túnel y, a continuación, utilizarlo para iniciar una sesión de SSH en un dispositivo remoto.

## Requisitos previos para los tutoriales
<a name="tunneling-tutorial-prerequisites"></a>

Los requisitos previos para ejecutar el tutorial pueden variar en función de si se utilizan los métodos de configuración manual o rápida para abrir un túnel y acceder al dispositivo remoto. 

**nota**  
Para ambos métodos de configuración, debe permitir el tráfico saliente en el puerto 443. 
+ Para obtener información sobre los requisitos previos para el tutorial del método de configuración rápida, consulte [Requisitos previos para el método de configuración rápida](tunneling-tutorial-quick-setup.md#tunneling-tutorial-quick-prerequisites).
+ Para obtener información sobre los requisitos previos para el tutorial del método de configuración manual, consulte [Requisitos previos para el método de configuración manual](tunneling-tutorial-manual-setup.md#tunneling-tutorial-manual-prerequisites). Si utiliza este método de configuración, debe configurar el proxy local en el dispositivo de origen. Para descargar el código fuente del proxy local, consulte Implementación de [referencia del proxy local](https://github.com/aws-samples/aws-iot-securetunneling-localproxy) en. GitHub

## Métodos de configuración de túnel
<a name="tunneling-tutorial-setup-methods"></a>

En estos tutoriales, aprenderá sobre los métodos de configuración manual y rápida para abrir un túnel y conectarse al dispositivo remoto. La siguiente table muestra las diferencias entre los métodos de configuración. Tras crear el túnel, puede utilizar una interfaz de línea de comandos integrada en el navegador para conectarse mediante SSH al dispositivo remoto. Si pierde los tokens o el túnel se desconecta, puede enviar nuevos tokens de acceso para volver a conectarse al túnel.


**Métodos de configuración rápida y manual**  

| Criterios | Configuración rápida | Configuración manual | 
| --- | --- | --- | 
| Creación de túnel | Cree un túnel nuevo con configuraciones editables por defecto. Para acceder a su dispositivo remoto, solo puede usar SSH como servicio de destino. | Cree un túnel especificando manualmente las configuraciones del túnel. Puede usar este método para conectarse al dispositivo remoto mediante servicios distintos de SSH. | 
| Tokens de acceso | El token de acceso de destino se entregará automáticamente a su dispositivo en el [tema reservado de MQTT](https://docs.aws.amazon.com/iot/latest/developerguide/reserved-topics.html#reserved-topics-secure) si se especifica un nombre al crear el túnel. No tiene que descargar ni gestionar el token en su dispositivo de origen. | Tendrá que descargar y gestionar manualmente el token en su dispositivo de origen. El token de acceso de destino se entrega automáticamente al dispositivo remoto en el [tema reservado de MQTT](https://docs.aws.amazon.com/iot/latest/developerguide/reserved-topics.html#reserved-topics-secure) si se especifica un nombre al crear el túnel.  | 
| Proxy local | Se configura automáticamente un proxy local basado en la web para que interactúes con el dispositivo. No hace falta configurar manualmente el proxy local. | Tendrá que configurar e iniciar manualmente el proxy local. Para configurar el proxy local, puede utilizar el cliente del AWS IoT dispositivo o descargar la [implementación de referencia del proxy local en GitHub](https://github.com/aws-samples/aws-iot-securetunneling-localproxy). | 

## Métodos de creación de túneles en la AWS IoT consola
<a name="tunneling-tutorial-flows"></a>

Los tutoriales de esta sección muestran cómo crear un túnel mediante la API Consola de administración de AWS y la [OpenTunnel](https://docs.aws.amazon.com/iot/latest/apireference/)API. Si configura el destino al crear un túnel, la tunelización AWS IoT segura envía el token de acceso del cliente de destino al dispositivo remoto a través de MQTT y del tema MQTT reservado,). `$aws/things/RemoteDeviceA/tunnels/notify` Al recibir el mensaje de MQTT, el agente IoT del dispositivo remoto inicia el proxy local en modo de destino. Para obtener más información, consulte [Temas reservados](reserved-topics.md).

**nota**  
Puede omitir la configuración de destino si desea entregar el token de acceso de cliente de destino al dispositivo remoto a través de otro método. Para obtener más información, consulte [Configuración de un dispositivo remoto y uso de un agente de IoT](configure-remote-device.md).

En la AWS IoT consola, puede crear un túnel mediante uno de los métodos siguientes. Para obtener información sobre los tutoriales que le ayudarán a aprender a crear un túnel con estos métodos, consulte [Tutoriales en esta sección](secure-tunneling-tutorial.md#tunneling-tutorial-overview).
+ 

**[Central de túneles](https://console.aws.amazon.com/iot/home#/tunnels)**  
Al crear el túnel, podrá especificar si desea utilizar los métodos de configuración rápida o manual para crear el túnel y proporcionar los detalles de configuración del túnel opcionales. Los detalles de configuración también incluyen el nombre del dispositivo de destino y el servicio que desea utilizar para conectarse al dispositivo. Después de crear un túnel, puedes usar SSH en el navegador o abrir un terminal fuera de la AWS IoT consola para acceder a tu dispositivo remoto.
+ 

**Detalles de la cosa**  
Cuando cree el túnel, también podrá especificar si desea utilizar el túnel abierto más reciente o crear uno nuevo para el dispositivo, además de elegir los métodos de configuración y proporcionar cualquier detalle opcional de configuración del túnel. Los detalles de configuración de un túnel existente no se pueden editar. Puede usar el método de configuración rápida para transferir los tokens de acceso y el SSH al dispositivo remoto desde el navegador. Para abrir un túnel con este método, debe haber creado algo de IoT (por ejemplo,`RemoteDeviceA`) en el AWS IoT registro. Para obtener más información, consulte [Registrar un dispositivo en el AWS IoT registro](https://docs.aws.amazon.com/iot/latest/developerguide/register-device.html). 

**Topics**
+ [Requisitos previos para los tutoriales](#tunneling-tutorial-prerequisites)
+ [Métodos de configuración de túnel](#tunneling-tutorial-setup-methods)
+ [Métodos de creación de túneles en la AWS IoT consola](#tunneling-tutorial-flows)
+ [Abra un túnel y usa SSH basado en un navegador para acceder al dispositivo remoto](tunneling-tutorial-quick-setup.md)
+ [Abra un túnel mediante la configuración manual y conéctelo a un dispositivo remoto](tunneling-tutorial-manual-setup.md)

# Abra un túnel y usa SSH basado en un navegador para acceder al dispositivo remoto
<a name="tunneling-tutorial-quick-setup"></a>

Puede utilizar el método de configuración rápida o manual para crear un túnel. Este tutorial muestra cómo abrir un túnel mediante el método de configuración rápida y cómo utilizar el SSH basado en el navegador para conectarse al dispositivo remoto. Para obtener un ejemplo que muestra cómo abrir un túnel mediante el método de configuración manual, consulte [Abra un túnel mediante la configuración manual y conéctelo a un dispositivo remoto](tunneling-tutorial-manual-setup.md).

Con el método de configuración rápida, puede crear un túnel nuevo con las configuraciones predeterminadas que se pueden editar. Se configura un proxy local basado en la web para usted y el token de acceso se entrega automáticamente a su dispositivo de destino remoto mediante MQTT. Tras crear un túnel, puede empezar a interactuar con su dispositivo remoto mediante una interfaz de línea de comandos dentro de la consola.

Con el método de configuración rápida, debe usar SSH como servicio de destino para acceder al dispositivo remoto. Para más información sobre los distintos métodos de configuración, consulte [Métodos de configuración de túnel](secure-tunneling-tutorial-open-tunnel.md#tunneling-tutorial-setup-methods).

## Requisitos previos para el método de configuración rápida
<a name="tunneling-tutorial-quick-prerequisites"></a>
+ Los firewalls detrás del dispositivo remoto deben permitir el tráfico saliente en el puerto 443. El túnel que cree utilizará este puerto para conectarse al dispositivo remoto.
+ Tiene un agente de dispositivo de IoT (consulte[Fragmento de agente de IoT](configure-remote-device.md#agent-snippet)) ejecutándose en el dispositivo remoto que se conecta a la puerta de enlace del AWS IoT dispositivo y está configurado con una suscripción a un tema de MQTT. Para obtener más información, consulte [conectar un dispositivo a la puerta de enlace del AWS IoT dispositivo](https://docs.aws.amazon.com/iot/latest/developerguide/sdk-tutorials.html).
+ Debe tener un daemon SSH ejecutándose en el dispositivo remoto.

## Abrir un túnel
<a name="open-tunnel-quick"></a>

Puede abrir un túnel seguro mediante la Consola de administración de AWS referencia de la AWS IoT API o la AWS CLI. Si lo desea, puede configurar un nombre de destino, pero no es obligatorio para este tutorial. Si configura el destino, la tunelización segura entregará automáticamente el token de acceso al dispositivo remoto mediante MQTT. Para obtener más información, consulte [Métodos de creación de túneles en la AWS IoT consola](secure-tunneling-tutorial-open-tunnel.md#tunneling-tutorial-flows).

**Para abrir un túnel mediante la consola**

1. Vaya al [Centro de túneles de la consola de AWS IoT](https://console.aws.amazon.com/iot/home#/tunnels) y elija **Crear túnel**.  
![\[AWS IoT consola que muestra una lista vacía de túneles con opciones para crear, cerrar o eliminar túneles.\]](http://docs.aws.amazon.com/es_es/iot/latest/developerguide/images/tunnels-page.png)

1. Para este tutorial, seleccione **Configuración rápida** como método de creación del túnel y, a continuación, seleccione **Siguiente**.
**nota**  
Si crea un túnel seguro desde la página de detalles de un elemento que ha creado, puede elegir si desea crear un túnel nuevo o utilizar uno existente. Para obtener más información, consulte [Abra un túnel para el dispositivo remoto y utilice SSH basado en navegador](tunneling-tutorial-existing-tunnel.md).  
![\[Sección de métodos de configuración con opciones para una configuración rápida mediante SSH o una configuración manual, en la que se explica cómo la configuración rápida define automáticamente el proxy y el token de acceso.\]](http://docs.aws.amazon.com/es_es/iot/latest/developerguide/images/tunnels-choose-quick.PNG)

1. Revise y confirme los detalles de configuración del túnel. Para crear un túnel, elija **Confirmar y crear**. Si desea editar estos detalles, seleccione **Anterior** para volver a la página anterior y, a continuación, confirme y cree el túnel.
**nota**  
Al utilizar la configuración rápida, no se puede editar el nombre del servicio. Debe usar **SSH** como **servicio**.

1. Para crear el túnel, selecciona **Listo**. 

   Para este tutorial, no hace falta descargar los tokens de acceso de origen o destino. Estas fichas solo se pueden utilizar una vez para conectarse al túnel. Si su túnel se desconecta, puede generar y enviar nuevos tokens a su dispositivo remoto para volver a conectarse al túnel. Para obtener más información, consulte [Reenviar los tokens de acceso al túnel](tunneling-tutorial-manual-setup.md#resend-access-tokens).  
![\[Un cuadro de diálogo que muestra los tokens de acceso de origen y destino para crear una conexión de túnel segura, con instrucciones sobre cómo rotar y reenviar los tokens si es necesario.\]](http://docs.aws.amazon.com/es_es/iot/latest/developerguide/images/tunnel-success.png)

**Para abrir un túnel mediante la API**  
Para abrir un túnel nuevo, puede utilizar la operación [OpenTunnel](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-secure-tunneling_OpenTunnel.html)API.

**nota**  
Puede crear un túnel mediante el método de configuración rápida solo desde la consola de AWS IoT . Cuando utilices la AWS IoT API de referencia o la AWS CLI, utilizará el método de configuración manual. Puede abrir el túnel existente que creó y, a continuación, cambiar el método de configuración del túnel para utilizar la configuración rápida. Para obtener más información, consulte [Abra un túnel existente y use SSH basado en un navegador](tunneling-tutorial-existing-tunnel.md#tunneling-tutorial-existing-convert-tunnel).

A continuación, mostramos un ejemplo de cómo ejecutar esta operación de API. Si lo desea, si desea especificar el nombre del objeto y el servicio de destino, utilice el parámetro `DestinationConfig`. Para ver un ejemplo que muestra cómo utilizar este parámetro, consulte [Abra un túnel nuevo para el dispositivo remoto](tunneling-tutorial-existing-tunnel.md#tunneling-tutorial-existing-open-tunnel).

```
aws iotsecuretunneling open-tunnel
```

Al ejecutar este comando, se crea un túnel nuevo y se proporcionan los tokens de acceso de origen y destino. 

```
{
    "tunnelId": "01234567-89ab-0123-4c56-789a01234bcd",
    "tunnelArn": "arn:aws:iot:us-east-1:123456789012:tunnel/01234567-89ab-0123-4c56-789a01234bcd",
    "sourceAccessToken": "<SOURCE_ACCESS_TOKEN>",
    "destinationAccessToken": "<DESTINATION_ACCESS_TOKEN>"
}
```

## Utilización del SSH basado en navegador
<a name="tunneling-tutorial-quick-browser"></a>

Después de crear un túnel mediante el método de configuración rápida y de que el dispositivo de destino se haya conectado al túnel, podrá acceder al dispositivo remoto mediante un SSH basado en un navegador. Con el SSH basado en un navegador, puede comunicarse directamente con el dispositivo remoto introduciendo comandos en una interfaz de línea de comandos contextual dentro de la consola. Esta característica facilita la interacción con el dispositivo remoto, ya que no es necesario abrir un terminal externo a la consola ni configurar el proxy local. 

**Utilización del SSH basado en navegador**

1. Vaya al [Centro de túneles de la consola de AWS IoT](https://console.aws.amazon.com/iot/home#/tunnels) y elija Crear túnel.

1. Expanda la sección **Secure Shell (SSH)** y, a continuación, elija **Conectar**.

1. Elija si desea autenticarse en la conexión SSH proporcionando su nombre de usuario y contraseña o, para una autenticación más segura, puede utilizar la clave privada de su dispositivo. Si te estás autenticando con la clave privada, ten en cuenta que solo las claves RSA con formato PEM (256 y 512) funcionan con la consola SSH. AWS IoT Secure Tunneling 
   + **Para conectarse con su nombre de usuario y contraseña, elija Usar contraseña.** A continuación, puede introducir su nombre de usuario y contraseña y empezar a utilizar la CLI del navegador.
   + Para conectarse con la clave privada del dispositivo de destino, seleccione **Usar clave privada**. Especifique su nombre de usuario y cargue el archivo de clave privada del dispositivo y, a continuación, elija **Conectar** para empezar a utilizar la CLI del navegador.  
![\[Cuadro de diálogo de formulario para conectarse mediante la CLI del navegador con clave privada, que muestra un campo de nombre de usuario y una opción para elegir o usar un archivo de clave privada preseleccionado.\]](http://docs.aws.amazon.com/es_es/iot/latest/developerguide/images/tunnel-browser-private-key.png)

Una vez que se haya autenticado en la conexión SSH, podrá empezar rápidamente a introducir comandos e interactuar con el dispositivo mediante la CLI del navegador, ya que el proxy local ya está configurado para usted.

![\[Fragmento de código que muestra los enlaces de React para gestionar el estado y las preferencias de una aplicación. JavaScript\]](http://docs.aws.amazon.com/es_es/iot/latest/developerguide/images/tunnel-browser-cli.PNG)


Si la CLI del navegador permanece abierta después de la duración del túnel, podría agotarse el tiempo de espera y provocar la desconexión de la interfaz de línea de comandos. Puede duplicar el túnel e iniciar otra sesión para interactuar con el dispositivo remoto dentro de la propia consola.

## Solucionar problemas al usar SSH basado en navegador
<a name="tunneling-tutorial-browser-troubleshoot"></a>

A continuación, se muestra cómo solucionar algunos problemas que pueden surgir al utilizar el SSH basado en un navegador.
+ 

**Aparece un error en lugar de la interfaz de línea de comandos**  
Es posible que el error se deba a que el dispositivo de destino se ha desconectado. Puede elegir **Generar nuevos identificadores de acceso** para generar nuevos identificadores de acceso y enviarlos a su dispositivo remoto mediante MQTT. Los nuevos tokens se pueden usar para volver a conectarse al túnel. Al volver a conectarse al túnel, se borra el historial y se actualiza la sesión de línea de comandos.
+ 

**Aparece un error de desconexión del túnel al autenticarse con una clave privada**  
Es posible que vea el error porque su clave privada no haya sido aceptada por el dispositivo de destino. Para solucionar este error, compruebe el archivo de clave privada que cargó para la autenticación. Si sigue viendo un error, compruebe los registros de su dispositivo. También puede intentar volver a conectarse al túnel enviando nuevos tokens de acceso a su dispositivo remoto.
+ 

**El túnel estaba cerrado al usar la sesión**  
Si el túnel se cerró porque permaneció abierto durante más tiempo del especificado, es posible que la sesión de línea de comandos se desconecte. Un túnel no se puede volver a abrir una vez cerrado. Para volver a conectarse, debe abrir otro túnel hacia el dispositivo.

  Puede duplicar un túnel para crear uno nuevo con las mismas configuraciones que el túnel cerrado. Puedes duplicar un túnel cerrado desde la AWS IoT consola. Para duplicar el túnel, elija el túnel que estaba cerrado para ver sus detalles y, a continuación, elija **Duplicar túnel**. Especifique la duración del túnel que quiere usar y, a continuación, cree el túnel nuevo.

## Limpieza
<a name="tunnel-cleanup-quick"></a>
+ 

**Cerrar el túnel**  
Le recomendamos que cierre el túnel una vez que haya terminado de usarlo. Un túnel también puede cerrarse si permanece abierto durante más tiempo del especificado. Un túnel no se puede volver a abrir una vez cerrado. Aún puede duplicar un túnel si selecciona el túnel cerrado y, a continuación, selecciona **Duplicar túnel**. Especifique la duración del túnel que quiere usar y, a continuación, cree el túnel nuevo.
  + Para cerrar un túnel individual o varios túneles desde la AWS IoT consola, vaya al [centro de túneles](https://console.aws.amazon.com/iot/home#/tunnels), elija los túneles que desee cerrar y, a continuación, elija **Cerrar túnel**.
  + Para cerrar un túnel individual o varios túneles mediante la AWS IoT API de referencia de la API, utilice la [CloseTunnel](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-secure-tunneling_CloseTunnel.html)API.

    ```
    aws iotsecuretunneling close-tunnel \ 
        --tunnel-id "01234567-89ab-0123-4c56-789a01234bcd"
    ```
+ 

**Eliminar túnel**  
Puedes eliminar un túnel de forma permanente de tu Cuenta de AWS. 
**aviso**  
Las acciones de eliminación son permanentes y no se pueden deshacer.
  + Para eliminar un túnel individual o varios túneles desde la consola de AWS IoT , vaya al [centro de túneles](https://console.aws.amazon.com/iot/home#/tunnels), elija los túneles que desee cerrar y, a continuación, elija **Eliminar túnel**.
  + Para eliminar un túnel individual o varios túneles mediante la AWS IoT API de referencia de la API, usa la [CloseTunnel](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-secure-tunneling_CloseTunnel.html)API. Cuando utilice la API, ajuste la marca `delete` a `true`.

    ```
    aws iotsecuretunneling close-tunnel \ 
        --tunnel-id "01234567-89ab-0123-4c56-789a01234bcd"
        --delete true
    ```

# Abra un túnel mediante la configuración manual y conéctelo a un dispositivo remoto
<a name="tunneling-tutorial-manual-setup"></a>

Al abrir un túnel, puede elegir el método de configuración rápida o manual para abrir un túnel en el dispositivo remoto. Este tutorial muestra cómo abrir un túnel mediante el método de configuración manual y cómo configurar e iniciar el proxy local para conectarse al dispositivo remoto.

Si utiliza el método de configuración manual, debe especificar manualmente las configuraciones del túnel al crear el túnel. Tras crear el túnel, puedes usar SSH en el navegador o abrir un terminal fuera de la AWS IoT consola. Este tutorial muestra cómo usar el terminal externo a la consola para acceder al dispositivo remoto. También aprenderá a configurar el proxy local y a conectarse a él para interactuar con el dispositivo remoto. Para conectarse al proxy local, debe descargar el token de acceso de origen al crear el túnel.

Con este método de configuración, puede utilizar servicios distintos de SSH, como FTP para conectarse al dispositivo remoto. Para más información sobre los distintos métodos de configuración, consulte [Métodos de configuración de túnel](secure-tunneling-tutorial-open-tunnel.md#tunneling-tutorial-setup-methods).

## Requisitos previos para el método de configuración manual
<a name="tunneling-tutorial-manual-prerequisites"></a>
+ Los firewalls detrás del dispositivo remoto deben permitir el tráfico saliente en el puerto 443. El túnel que cree utilizará este puerto para conectarse al dispositivo remoto.
+ Tiene un agente de dispositivo de IoT (consulte[Fragmento de agente de IoT](configure-remote-device.md#agent-snippet)) ejecutándose en el dispositivo remoto que se conecta a la puerta de enlace del AWS IoT dispositivo y está configurado con una suscripción a un tema de MQTT. Para obtener más información, consulte [conectar un dispositivo a la puerta de enlace del AWS IoT dispositivo](https://docs.aws.amazon.com/iot/latest/developerguide/sdk-tutorials.html).
+ Debe tener un daemon SSH ejecutándose en el dispositivo remoto.
+ Ha descargado el código fuente del proxy local [GitHub](https://github.com/aws-samples/aws-iot-securetunneling-localproxy)y lo ha creado para la plataforma que ha elegido. Nos referiremos al archivo ejecutable del proxy local compilado como `localproxy` en este tutorial.

## Abrir un túnel
<a name="open-tunnel"></a>

Puede abrir un túnel seguro utilizando la Consola de administración de AWS referencia de la AWS IoT API o la AWS CLI. Si lo desea, puede configurar un nombre de destino, pero no es obligatorio para este tutorial. Si configura el destino, la tunelización segura entregará automáticamente el token de acceso al dispositivo remoto mediante MQTT. Para obtener más información, consulte [Métodos de creación de túneles en la AWS IoT consola](secure-tunneling-tutorial-open-tunnel.md#tunneling-tutorial-flows).

**Para abrir un túnel en la consola**

1. Vaya al [Centro de túneles de la consola de AWS IoT](https://console.aws.amazon.com/iot/home#/tunnelhub) y elija **Crear túnel**.  
![\[AWS IoT consola que muestra una lista vacía de túneles con opciones para crear, cerrar o eliminar túneles.\]](http://docs.aws.amazon.com/es_es/iot/latest/developerguide/images/tunnels-page.png)

1. Para este tutorial, seleccione **Configuración manual** como método de creación del túnel y, a continuación, seleccione **Siguiente**. Para obtener información sobre el uso del método de **configuración rápida** para crear un túnel, consulte [Abra un túnel y usa SSH basado en un navegador para acceder al dispositivo remoto](tunneling-tutorial-quick-setup.md).
**nota**  
Si crea un túnel seguro desde la página de detalles de una cosa que ha creado, puede elegir si desea crear un túnel nuevo o utilizar uno existente. Para obtener más información, consulte [Abra un túnel para el dispositivo remoto y utilice SSH basado en navegador](tunneling-tutorial-existing-tunnel.md).  
![\[Hay dos opciones para configurar una conexión de túnel: configuración rápida (SSH) o configuración manual, que requiere configurar un proxy local y administrar los tokens de acceso.\]](http://docs.aws.amazon.com/es_es/iot/latest/developerguide/images/tunnels-choose-manual.PNG)

1. (Opcional) Introduzca los ajustes de configuración del túnel. También puede omitir este paso y continuar con el siguiente paso para crear un túnel. 

   Introduzca la descripción del túnel, la duración del tiempo de espera del túnel y las etiquetas de recursos como pares clave-valor para ayudarle a identificar el recurso. Para este tutorial, puede omitir la configuración de destino.
**nota**  
No se le cobrará en función de la duración durante la que mantenga abierto un túnel. Solo incurrirá en cargos al crear un túnel nuevo. Para obtener información sobre los precios, consulte **Tunelización segura** en [precios de AWS IoT Device Management](https://aws.amazon.com/iot-device-management/pricing/)

1. Descargue los tokens de acceso del cliente y, a continuación, seleccione **Listo**. Los tokens no estarán disponibles para su descarga después de seleccionar **Listo**.

   Estas fichas solo se pueden utilizar una vez para conectarse al túnel. Si extravía los tokens o el túnel se desconecta, puede generar y enviar nuevos tokens a su dispositivo remoto para volver a conectarse al túnel.  
![\[Tokens de acceso de origen y destino para crear una conexión de túnel segura, con instrucciones sobre cómo rotar y reenviar los tokens si es necesario.\]](http://docs.aws.amazon.com/es_es/iot/latest/developerguide/images/tunnel-success.png)

**Para abrir un túnel mediante la API**  
Para abrir un túnel nuevo, puede utilizar la operación [OpenTunnel](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-secure-tunneling_OpenTunnel.html)API. También puede especificar configuraciones adicionales mediante la API, como la duración del túnel y la configuración de destino.

```
aws iotsecuretunneling open-tunnel \ 
    --region us-east-1 \ 
    --endpoint https://api.us-east-1.tunneling.iot.amazonaws.com
```

Al ejecutar este comando, se crea un túnel nuevo y se proporcionan los tokens de acceso de origen y destino. 

```
{
    "tunnelId": "01234567-89ab-0123-4c56-789a01234bcd",
    "tunnelArn": "arn:aws:iot:us-east-1:123456789012:tunnel/01234567-89ab-0123-4c56-789a01234bcd",
    "sourceAccessToken": "<SOURCE_ACCESS_TOKEN>",
    "destinationAccessToken": "<DESTINATION_ACCESS_TOKEN>"
}
```

## Reenviar los tokens de acceso al túnel
<a name="resend-access-tokens"></a>

Los tokens que se obtienen al crear un túnel sólo se pueden utilizar una vez para conectarse al mismo. Si pierdes el token de acceso o el túnel se desconecta, puedes volver a enviar nuevos tokens de acceso al dispositivo remoto mediante MQTT sin coste adicional. AWS IoT Un túnel seguro revocará los tokens actuales y devolverá los nuevos al volver a conectarse al túnel.

**Para girar los tokens desde la consola**

1. Ve al [centro de túneles de la AWS IoT consola y elige el](https://console.aws.amazon.com/iot/home#/tunnels) túnel que has creado.

1. En la página de detalles del túnel, seleccione **Generar nuevos tokens de acceso** y, a continuación, seleccione **Siguiente**.

1. Descargue los nuevos tokens de acceso para tu túnel y seleccione **Listo**. Estos tokens solo se pueden usar una vez. Si extravía estos tokens o el túnel se desconecta, puede volver a enviar nuevas fichas de acceso.  
![\[Tokens de acceso para dispositivos de origen y destino con opciones para copiarlos o descargarlos. El texto explica que al rotar los tokens se revocan los tokens actuales y se generan nuevos de un solo uso para volver a conectar un túnel desconectado.\]](http://docs.aws.amazon.com/es_es/iot/latest/developerguide/images/tunnel-token-rotated.PNG)

**Para rotar los tokens de acceso mediante la API**  
Para rotar los tokens de acceso al túnel, puedes usar la operación de la [RotateTunnelAccessToken](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-secure-tunneling_RotateTunnelAccessToken.html)API para revocar los tokens actuales y devolver nuevos tokens de acceso para volver a conectarte al túnel. Por ejemplo, el siguiente comando rota los tokens de acceso del dispositivo de destino, *`RemoteThing1`*. 

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

Al ejecutar este comando, se genera el nuevo token de acceso, como se muestra en el siguiente ejemplo. 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"
}
```

Para ver ejemplos que muestran cómo y cuándo rotar los tokens de acceso, consulte [Resolver problemas de conectividad de túneles AWS IoT seguros mediante la rotación de los tokens de acceso de los clientes](iot-secure-tunneling-troubleshooting.md).

## Configure e inicie el proxy local
<a name="start-local-proxy"></a>

Para conectarse al dispositivo remoto, abra un terminal en su portátil y configure e inicie el proxy local. El proxy local transmite los datos enviados por la aplicación que se ejecuta en el dispositivo de origen mediante una tunelización segura a través de una conexión segura. WebSocket Puede descargar la fuente del proxy local desde. [GitHub](https://github.com/aws-samples/aws-iot-securetunneling-localproxy)

Después de configurar el proxy local, copie el token de acceso del cliente de origen y utilícelo para iniciar el proxy local en modo origen. A continuación se muestra un ejemplo de comando para iniciar el proxy local. En el siguiente comando, el proxy local está configurado para atender nuevas conexiones en el puerto 5555. En este comando:
+ `-r`especifica la Región de AWS, que debe ser la misma región en la que se creó el túnel.
+ `-s` especifica el puerto al que debe conectarse el proxy.
+ `-t` especifica el texto del token del cliente.

```
./localproxy -r us-east-1 -s 5555 -t source-client-access-token
```

Al ejecutar este comando, se iniciará el proxy local en modo fuente. Si recibe el siguiente error después de ejecutar el comando, configure la ruta CA. Para obtener más información, consulte [Proteger el proxy local de tunelización](https://github.com/aws-samples/aws-iot-securetunneling-localproxy) en. GitHub

```
Could not perform SSL handshake with proxy server: certificate verify failed
```

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

```
...
...

Starting proxy in source mode
Attempting to establish web socket connection with endpoint wss://data.tunneling.iot.us-east-1.amazonaws.com:443
Resolved proxy  server IP: 10.10.0.11
Connected successfully with proxy server
Performing SSL handshake with proxy server	
Successfully completed SSL handshake with proxy server
HTTP/1.1 101 Switching Protocols

...

Connection: upgrade
channel-id: 01234567890abc23-00001234-0005678a-b1234c5de677a001-2bc3d456
upgrade: websocket

...

Web socket session ID: 01234567890abc23-00001234-0005678a-b1234c5de677a001-2bc3d456
Web socket subprotocol selected: aws.iot.securetunneling-2.0
Successfully established websocket connection with proxy server: wss://data.tunneling.iot.us-east-1.amazonaws.com:443
Setting up web socket pings for every 5000 milliseconds
Scheduled next read:

...

Starting web socket read loop continue reading...
Resolved bind IP: 127.0.0.1
Listening for new connection on port 5555
```

## Iniciar una sesión SSH
<a name="start-ssh-session"></a>

Abra otro terminal y utilice el siguiente comando para iniciar una nueva sesión SSH conectándose al proxy local en el puerto 5555.

```
ssh username@localhost -p 5555
```

Es posible que se pida una contraseña para la sesión SSH. Cuando haya terminado con la sesión SSH, escriba **exit** para cerrar la sesión.

## Limpieza
<a name="tunnel-cleanup-manual"></a>
+ 

**Cerrar el túnel**  
Le recomendamos que cierre el túnel una vez que haya terminado de usarlo. Un túnel también puede cerrarse si permanece abierto durante más tiempo del especificado. Un túnel no se puede volver a abrir una vez cerrado. Aún puede duplicar un túnel abriendo el túnel cerrado y, a continuación, seleccionando **Duplicar túnel**. Especifique la duración del túnel que quiere usar y, a continuación, cree el túnel nuevo.
  + Para cerrar un túnel individual o varios túneles desde la AWS IoT consola, vaya al [centro de túneles](https://console.aws.amazon.com/iot/home#/tunnels), elija los túneles que desee cerrar y, a continuación, elija **Cerrar túnel**.
  + Para cerrar un túnel individual o varios túneles mediante la AWS IoT API de referencia de la API, utilice la operación de la [CloseTunnel](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-secure-tunneling_CloseTunnel.html)API.

    ```
    aws iotsecuretunneling close-tunnel \ 
        --tunnel-id "01234567-89ab-0123-4c56-789a01234bcd"
    ```
+ 

**Eliminar túnel**  
Puedes eliminar un túnel de forma permanente de tu Cuenta de AWS.
**aviso**  
Las acciones de eliminación son permanentes y no se pueden deshacer.
  + Para eliminar un túnel individual o varios túneles desde la consola de AWS IoT , vaya al [centro de túneles](https://console.aws.amazon.com/iot/home#/tunnels), elija los túneles que desee cerrar y, a continuación, elija **Eliminar túnel**.
  + Para eliminar un túnel individual o varios túneles mediante la AWS IoT API de referencia de la API, utilice la operación [CloseTunnel](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-secure-tunneling_CloseTunnel.html)API. Cuando utilice la API, ajuste la marca `delete` a `true`.

    ```
    aws iotsecuretunneling close-tunnel \ 
        --tunnel-id "01234567-89ab-0123-4c56-789a01234bcd"
        --delete true
    ```

# Abra un túnel para el dispositivo remoto y utilice SSH basado en navegador
<a name="tunneling-tutorial-existing-tunnel"></a>

Desde la AWS IoT consola, puedes crear un túnel desde el **hub de túneles** o desde la página de detalles de un elemento de IoT que hayas creado. Al crear un túnel desde el centro de **túneles**, puede especificar si desea crear un túnel mediante la configuración rápida o la configuración manual. Para ver un tutorial de ejemplo, consulte [Abra un túnel e inicie una sesión SSH en el dispositivo remoto](secure-tunneling-tutorial-open-tunnel.md).

Al crear un túnel desde la página de detalles del objeto de la AWS IoT consola, también puede especificar si desea crear un túnel nuevo o abrir uno existente para ese elemento, tal y como se muestra en este tutorial. Si elige un túnel existente, podrá acceder al túnel abierto más reciente que haya creado para este dispositivo. A continuación, puede utilizar la interfaz de línea de comandos dentro del terminal para SSH en el dispositivo. 

## Requisitos previos
<a name="tunneling-tutorial-existing-prerequisites"></a>
+ Los firewalls detrás del dispositivo remoto deben permitir el tráfico saliente en el puerto 443. El túnel que cree utilizará este puerto para conectarse al dispositivo remoto.
+ Ha creado una cosa de IoT (por ejemplo,`RemoteDevice1`) en el AWS IoT registro. Esto corresponde a la representación de su dispositivo remoto en la nube. Para obtener más información, consulte [Registro de un dispositivo en el registro AWS IoT](https://docs.aws.amazon.com/iot/latest/developerguide/register-device.html).
+ Tiene un agente de dispositivo de IoT (consulte[Fragmento de agente de IoT](configure-remote-device.md#agent-snippet)) ejecutándose en el dispositivo remoto que se conecta a la puerta de enlace del AWS IoT dispositivo y está configurado con una suscripción a un tema de MQTT. Para obtener más información, consulte [conectar un dispositivo a la puerta de enlace del AWS IoT dispositivo](https://docs.aws.amazon.com/iot/latest/developerguide/sdk-tutorials.html).
+ Debe tener un daemon SSH ejecutándose en el dispositivo remoto.

## Abra un túnel nuevo para el dispositivo remoto
<a name="tunneling-tutorial-existing-open-tunnel"></a>

Supongamos que desea abrir un túnel hacia su dispositivo remoto, `RemoteDevice1`. Primero, cree una cosa de IoT con el nombre `RemoteDevice1` en el registro AWS IoT . A continuación, puede crear un túnel mediante la Consola de administración de AWS AWS IoT API de referencia o la AWS CLI. 

Al configurar un destino al crear un túnel, el servicio de tunelización segura entrega el token de acceso del cliente de destino al dispositivo remoto a través de MQTT y el tema MQTT reservado (`$aws/things/RemoteDeviceA/tunnels/notify`). Para obtener más información, consulte [Métodos de creación de túneles en la AWS IoT consola](secure-tunneling-tutorial-open-tunnel.md#tunneling-tutorial-flows).

**Para crear un túnel para un dispositivo remoto desde la consola**

1. Seleccione el objeto, `RemoteDevice1`, para ver sus detalles y, a continuación, seleccione **Crear túnel seguro**.  
![\[Detalles de un dispositivo denominado «RemoteDevice1" con su nombre de recurso de Amazon (ARN) mostrado.\]](http://docs.aws.amazon.com/es_es/iot/latest/developerguide/images/tunnel-create-thing.PNG)

1. Elija si desea crear un túnel nuevo o abrir uno existente. Para crear un túnel nuevo, elija **Crear túnel nuevo**. A continuación, puede elegir si desea utilizar el método de configuración manual o el de configuración rápida para crear el túnel. Para obtener más información, consulte [Abra un túnel mediante la configuración manual y conéctelo a un dispositivo remoto](tunneling-tutorial-manual-setup.md) y [Abra un túnel y usa SSH basado en un navegador para acceder al dispositivo remoto](tunneling-tutorial-quick-setup.md).

**Para crear un túnel para un dispositivo remoto mediante la API**  
Para abrir un túnel nuevo, puede utilizar la operación [OpenTunnel](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-secure-tunneling_OpenTunnel.html)API. El siguiente código muestra un ejemplo de ejecución de este comando.

```
aws iotsecuretunneling open-tunnel \ 
    --region us-east-1 \ 
    --endpoint https://api.us-east-1.tunneling.iot.amazonaws.com
    --cli-input-json file://input.json
```

A continuación se muestra el contenido del archivo `input.json`. Puede usar el parámetro `destinationConfig` para especificar el nombre del dispositivo de destino (por ejemplo, `RemoteDevice1`) y el servicio que desea usar para acceder al dispositivo de destino, por ejemplo, `SSH`. Si lo desea, también puede especificar parámetros adicionales, como etiquetas y descripción del túnel.

**Contenido de input.json**

```
{
   "description": "Tunnel to remote device1",
   "destinationConfig": { 
      "services": [ "SSH" ],
      "thingName": "RemoteDevice1"
   }
}
```

Al ejecutar este comando, se crea un túnel nuevo y se proporcionan los tokens de acceso de origen y destino. 

```
{
    "tunnelId": "01234567-89ab-0123-4c56-789a01234bcd",
    "tunnelArn": "arn:aws:iot:us-east-1:123456789012:tunnel/01234567-89ab-0123-4c56-789a01234bcd",
    "sourceAccessToken": "<SOURCE_ACCESS_TOKEN>",
    "destinationAccessToken": "<DESTINATION_ACCESS_TOKEN>"
}
```

## Abra un túnel existente y use SSH basado en un navegador
<a name="tunneling-tutorial-existing-convert-tunnel"></a>

Supongamos que ha creado el túnel para su dispositivo remoto mediante el método de configuración manual o mediante la AWS IoT API de referencia de la API. `RemoteDevice1` A continuación, puede abrir el túnel existente para el dispositivo y elegir **Configuración rápida** para utilizar la característica SSH basada en el navegador. Las configuraciones de un túnel existente no se pueden editar, por lo que no puede usar el método de configuración manual.

Para usar la característica SSH basada en el navegador, no tendrás que descargar el token de acceso a la fuente ni configurar el proxy local. Se configurará automáticamente un proxy local basado en la web para que pueda empezar a interactuar con su dispositivo remoto.

**Para usar el método de configuración rápida y el SSH basado en el navegador**

1. Vaya a la página de detalles de la cosa que ha creado y seleccione **Crear un túnel seguro `RemoteDevice1`**.

1. Seleccione **Usar un túnel existente** para abrir el túnel abierto más reciente que haya creado para el dispositivo remoto. Las configuraciones del túnel no se pueden editar, por lo que no puede utilizar el método de configuración manual del túnel. Para usar el método de configuración rápida, seleccione **Configuración rápida**.

1. Proceda a revisar y confirmar los detalles de la configuración del túnel y cree el túnel. Las configuraciones del túnel no se pueden editar.

   Al crear el túnel, la tunelización segura utilizará la operación de la [RotateTunnelAccessToken](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-secure-tunneling_RotateTunnelAccessToken.html)API para revocar los tokens de acceso originales y generar nuevos. Si su dispositivo remoto utiliza MQTT, estos tokens se entregarán automáticamente al dispositivo remoto en el tema MQTT al que esté suscrito. También puede optar por descargar estos tokens manualmente en su dispositivo de origen.

Una vez creado el túnel, puede usar el SSH basado en el navegador para interactuar con el dispositivo remoto directamente desde la consola mediante la interfaz de línea de comandos contextual. Para usar esta interfaz de línea de comandos, elige el túnel para lo que has creado y, en la página de detalles, expande la sección **Interfaz de línea de comandos.** Como el proxy local ya está configurado para usted, puede empezar a introducir comandos para empezar rápidamente a acceder a su dispositivo remoto e interactuar con él, `RemoteDevice1`

Para obtener más información sobre el método de configuración rápida y el uso del SSH basado en un navegador, consulte. [Abra un túnel y usa SSH basado en un navegador para acceder al dispositivo remoto](tunneling-tutorial-quick-setup.md)

## Limpieza
<a name="tunnel-cleanup-existing"></a>
+ 

**Cerrar el túnel**  
Le recomendamos que cierre el túnel una vez que haya terminado de usarlo. Un túnel también puede cerrarse si permanece abierto durante más tiempo del especificado. Un túnel no se puede volver a abrir una vez cerrado. Aún puede duplicar un túnel abriendo el túnel cerrado y, a continuación, seleccionando **Duplicar túnel**. Especifique la duración del túnel que quiere usar y, a continuación, cree el túnel nuevo.
  + Para cerrar un túnel individual o varios túneles desde la AWS IoT consola, vaya al [centro de túneles](https://console.aws.amazon.com/iot/home#/tunnels), elija los túneles que desee cerrar y, a continuación, elija **Cerrar túnel**.
  + Para cerrar un túnel individual o varios túneles mediante la AWS IoT API de referencia de la API, utilice la operación de la [CloseTunnel](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-secure-tunneling_CloseTunnel.html)API.

    ```
    aws iotsecuretunneling close-tunnel \ 
        --tunnel-id "01234567-89ab-0123-4c56-789a01234bcd"
    ```
+ 

**Eliminar túnel**  
Puedes eliminar un túnel de forma permanente de tu Cuenta de AWS.
**aviso**  
Las acciones de eliminación son permanentes y no se pueden deshacer.
  + Para eliminar un túnel individual o varios túneles desde la consola de AWS IoT , vaya al [centro de túneles](https://console.aws.amazon.com/iot/home#/tunnels), elija los túneles que desee cerrar y, a continuación, elija **Eliminar túnel**.
  + Para eliminar un túnel individual o varios túneles mediante la AWS IoT API de referencia de la API, utilice la operación [CloseTunnel](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-secure-tunneling_CloseTunnel.html)API. Cuando utilice la API, ajuste la marca `delete` a `true`.

    ```
    aws iotsecuretunneling close-tunnel \ 
        --tunnel-id "01234567-89ab-0123-4c56-789a01234bcd"
        --delete true
    ```

# Proxy local
<a name="local-proxy"></a>

El proxy local transmite los datos enviados por la aplicación que se ejecuta en el dispositivo de origen mediante una tunelización segura a través de una conexión WebSocket segura. Puede descargar la fuente del proxy local desde. [GitHub](https://github.com/aws-samples/aws-iot-securetunneling-localproxy) 

El proxy local puede ejecutarse en dos modos: `source` o `destination`. En el modo de origen, el proxy local se ejecuta en el mismo dispositivo o red que la aplicación cliente que inicia la conexión TCP. En el modo de destino, el proxy local se ejecuta en el dispositivo remoto, junto con la aplicación de destino. Un único túnel puede admitir hasta tres flujos de datos a la vez mediante la multiplexación de túneles. Para cada flujo de datos, la tunelización segura utiliza varias conexiones TCP, lo que reduce la posibilidad de que se agote el tiempo de espera. Para obtener más información, consulte [Multiplex flujos de datos y uso de conexiones TCP simultáneas en un túnel seguro](multiplexing.md).

# Cómo usar el proxy local
<a name="how-use-local-proxy"></a>

Puede ejecutar el proxy local en los dispositivos de origen y destino para transmitir datos a los puntos de conexión de tunelización seguros. Si sus dispositivos están en una red que utiliza un proxy web, este puede interceptar las conexiones antes de reenviarlas a Internet. En este caso, tendrá que configurar su proxy local para utilizar el proxy web. Para obtener más información, consulte [Configure el proxy local para los dispositivos que utilizan el proxy web](configure-local-proxy-web-proxy.md). 

## Flujo de trabajo de proxy local
<a name="local-proxy-workflow"></a>

Los siguientes pasos muestran cómo se ejecuta el proxy local en los dispositivos de origen y destino.

1. 

**Conecta el proxy local a una tunelización segura**  
En primer lugar, el proxy local debe establecer una conexión para asegurar el túnel. Al iniciar el proxy local, utilice los siguientes argumentos:
   + El `-r` argumento para especificar el lugar Región de AWS en el que se abre el túnel.
   + El argumento `-t` para pasar el token de acceso del cliente de origen o de destino devuelto por el `OpenTunnel`.
**nota**  
Dos proxies locales que utilicen el mismo valor de token de acceso de cliente no se pueden conectar al mismo tiempo.

1. 

**Realizar acciones de origen o destino**  
Una vez establecida la WebSocket conexión, el proxy local realiza acciones en modo de origen o en modo de destino, según su configuración.

   De forma predeterminada, el proxy local intenta volver a conectarse a un túnel seguro si se produce algún error input/output (de E/S) o si la WebSocket conexión se cierra inesperadamente. Esto hace que la conexión TCP se cierre. Si se produce algún error de socket TCP, el proxy local envía un mensaje a través del túnel para notificar al otro extremo que cierre su conexión TCP. De forma predeterminada, el proxy local siempre usa la comunicación SSL.

1. 

**Detener el proxy local**  
Después de utilizar el túnel, puede detener el proceso del proxy local sin problemas. Le recomendamos que cierre explícitamente el túnel llamando a `CloseTunnel`. Es posible que los clientes del túnel activos no se cierren inmediatamente después de llamar a `CloseTunnel`.

Para obtener más información sobre cómo utilizar el Consola de administración de AWS para abrir un túnel e iniciar una sesión SSH, consulte. [Abra un túnel e inicie una sesión SSH en el dispositivo remoto](secure-tunneling-tutorial-open-tunnel.md)

## Mejores prácticas del proxy local
<a name="local-proxy-security"></a>

Al ejecutar el proxy local, siga estas prácticas recomendadas:
+ Evite el uso del argumento `-t` del proxy local para pasar un token de acceso. Se recomienda utilizar la variable de entorno `AWSIOT_TUNNEL_ACCESS_TOKEN` para establecer el token de acceso del proxy local.
+ Ejecute el ejecutable del proxy local con privilegios mínimos en el sistema operativo o en el entorno.
  + Evite ejecutar el proxy local como administrador en Windows.
  + Evite ejecutar el proxy local como raíz en Linux y macOS.
+ Considere la posibilidad de ejecutar el proxy local en hosts distintos, contenedores, entornos de pruebas, chroot jail o en un entorno virtualizado.
+ Cree el proxy local con indicadores de seguridad relevantes, en función de su cadena de herramientas.
+ En dispositivos con varias interfaces de red, utilice el argumento `-b` para enlazar el socket TCP a la interfaz de red utilizada para comunicarse con la aplicación de destino. 

## Comando y salida de ejemplo
<a name="example-cmd-output-localproxy"></a>

A continuación se muestra un ejemplo de comando que se ejecuta y el resultado correspondiente. El ejemplo muestra cómo se puede configurar el proxy local en ambos modos `source` y `destination`. El proxy local actualiza el protocolo HTTPS para establecer una conexión duradera y, WebSockets a continuación, comienza a transmitir datos a través de la conexión a los puntos finales del dispositivo de tunelización segura.

**Antes de ejecutar estos comandos:**  
Debe haber abierto un túnel y haber obtenido los tokens de acceso del cliente para el origen y el destino. También debe haber creado el proxy local tal y como se describió anteriormente. Para crear el proxy local, abra el [código fuente del proxy local](https://github.com/aws-samples/aws-iot-securetunneling-localproxy) en el GitHub repositorio y siga las instrucciones para crear e instalar el proxy local.

**nota**  
Los siguientes comandos utilizados en los ejemplos usan la marca `verbosity` para ilustrar una descripción general de los diferentes pasos descritos anteriormente después de ejecutar el proxy local. Le recomendamos que utilice esta marca sólo con fines de prueba.

**Ejecutar el proxy local en modo fuente**  
En los siguientes comandos se muestra cómo ejecutar el proxy local en modo origen.

------
#### [ Linux/macOS ]

En Linux o macOS, ejecute los siguientes comandos en el terminal para configurar e iniciar el proxy local en su fuente.

```
export AWSIOT_TUNNEL_ACCESS_TOKEN=${access_token}
./localproxy -s 5555 -v 5 -r us-west-2
```

Donde:
+ `-s` es el puerto de escucha de origen, que inicia el proxy local en modo fuente.
+ `-v` es la verbosidad de la salida, que puede tener un valor entre cero y seis.
+ `-r` es la región del punto de conexión en la que se abre el túnel.

Para obtener más información sobre los parámetros, consulte [Opciones configuradas mediante argumentos de línea de comandos](https://github.com/aws-samples/aws-iot-securetunneling-localproxy#options-set-via-command-line-arguments).

------
#### [ Windows ]

En Windows, el proxy local se configura de forma similar a como se hace en Linux o macOS, pero la forma en que se definen las variables de entorno es diferente a la de otras plataformas. Ejecute los siguientes comandos en la ventana `cmd` para configurar e iniciar el proxy local en su fuente.

```
set AWSIOT_TUNNEL_ACCESS_TOKEN=${access_token}
.\localproxy -s 5555 -v 5 -r us-west-2
```

Donde:
+ `-s` es el puerto de escucha de origen, que inicia el proxy local en modo fuente.
+ `-v` es la verbosidad de la salida, que puede tener un valor entre cero y seis.
+ `-r` es la región del punto de conexión en la que se abre el túnel.

Para obtener más información sobre los parámetros, consulte [Opciones configuradas mediante argumentos de línea de comandos](https://github.com/aws-samples/aws-iot-securetunneling-localproxy#options-set-via-command-line-arguments).

------

**nota**  
Si utiliza la última versión del proxy local en modo fuente, debe incluir el AWS CLI parámetro `--destination-client-type V1` en el dispositivo de origen para garantizar la compatibilidad con versiones anteriores. Esto se aplica cuando se conecta a cualquiera de estos modos destino:  
AWS IoT Dispositivo: cliente
AWS IoT Componente de tunelización segura o componente de tunelización AWS IoT Greengrass Version 2 segura
Cualquier código de demostración de AWS IoT Secure Tunneling escrito antes de 2022
Versiones 1.X del proxy local
Este parámetro garantiza una comunicación adecuada entre el proxy de origen actualizado y los clientes de destino anteriores. Para obtener más información sobre las versiones de proxy locales, consulte [AWS IoT Secure Tunneling](https://github.com/aws-samples/aws-iot-securetunneling-localproxy/blob/main/README.md#as-of-312-may-2024-update---destination-client-type-v1-will-be-a-required-parameter-when-connecting-with-the-following) on. *GitHub*

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

```
...
...

Starting proxy in source mode
Attempting to establish web socket connection with endpoint wss://data.tunneling.iot.us-west-2.amazonaws.com:443
Resolved proxy  server IP: 10.10.0.11
Connected successfully with proxy server
Performing SSL handshake with proxy server	
Successfully completed SSL handshake with proxy server
HTTP/1.1 101 Switching Protocols

...

Connection: upgrade
channel-id: 01234567890abc23-00001234-0005678a-b1234c5de677a001-2bc3d456
upgrade: websocket

...

Web socket session ID: 01234567890abc23-00001234-0005678a-b1234c5de677a001-2bc3d456
Web socket subprotocol selected: aws.iot.securetunneling-2.0
Successfully established websocket connection with proxy server: wss://data.tunneling.iot.us-west-2.amazonaws.com:443
Setting up web socket pings for every 5000 milliseconds
Scheduled next read:

...

Starting web socket read loop continue reading...
Resolved bind IP: 127.0.0.1
Listening for new connection on port 5555
```

**Ejecutar el proxy local en el modo de destino**  
En los siguientes comandos se muestra cómo ejecutar el proxy local en el modo destino.

------
#### [ Linux/macOS ]

En Linux o macOS, ejecute los siguientes comandos en el terminal para configurar e iniciar el proxy local en su destino.

```
export AWSIOT_TUNNEL_ACCESS_TOKEN=${access_token}
./localproxy -d 22 -v 5 -r us-west-2
```

Donde:
+ `-d` es la aplicación de destino que inicia el proxy local en modo de destino.
+ `-v` es la verbosidad de la salida, que puede tener un valor entre cero y seis.
+ `-r` es la región del punto de conexión en la que se abre el túnel.

Para obtener más información sobre los parámetros, consulte [Opciones configuradas mediante argumentos de línea de comandos](https://github.com/aws-samples/aws-iot-securetunneling-localproxy#options-set-via-command-line-arguments).

------
#### [ Windows ]

En Windows, el proxy local se configura de forma similar a como se hace en Linux o macOS, pero la forma en que se definen las variables de entorno es diferente a la de otras plataformas. Ejecute los siguientes comandos en la ventana `cmd` para configurar e iniciar el proxy local en su destino.

```
set AWSIOT_TUNNEL_ACCESS_TOKEN=${access_token}
.\localproxy -d 22 -v 5 -r us-west-2
```

Donde:
+ `-d` es la aplicación de destino que inicia el proxy local en modo de destino.
+ `-v` es la verbosidad de la salida, que puede tener un valor entre cero y seis.
+ `-r` es la región del punto de conexión en la que se abre el túnel.

Para obtener más información sobre los parámetros, consulte [Opciones configuradas mediante argumentos de línea de comandos](https://github.com/aws-samples/aws-iot-securetunneling-localproxy#options-set-via-command-line-arguments).

------

**nota**  
Si utiliza la última versión del proxy local en el modo de destino, debe incluir el AWS CLI parámetro `--destination-client-type V1` en el dispositivo de destino para garantizar la compatibilidad con versiones anteriores. Esto se aplica cuando se conecta a cualquiera de estos modos origen:  
Tunelización segura basada en el navegador desde la consola. AWS 
Versiones 1.X del proxy local
Este parámetro garantiza una comunicación adecuada entre el proxy de destino actualizado y los clientes de origen anteriores. [Para obtener más información sobre las versiones de proxy locales, consulte AWS IoT Secure Tunneling on. *GitHub*](https://github.com/aws-samples/aws-iot-securetunneling-localproxy/blob/main/README.md#as-of-312-may-2024-update---destination-client-type-v1-will-be-a-required-parameter-when-connecting-with-the-following)

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

```
...
...

Starting proxy in destination mode
Attempting to establish web socket connection with endpoint wss://data.tunneling.iot.us-west-2.amazonaws.com:443
Resolved proxy  server IP: 10.10.0.11
Connected successfully with proxy server
Performing SSL handshake with proxy server	
Successfully completed SSL handshake with proxy server
HTTP/1.1 101 Switching Protocols

...

Connection: upgrade
channel-id: 01234567890abc23-00001234-0005678a-b1234c5de677a001-2bc3d456
upgrade: websocket

...

Web socket session ID: 01234567890abc23-00001234-0005678a-b1234c5de677a001-2bc3d456
Web socket subprotocol selected: aws.iot.securetunneling-2.0
Successfully established websocket connection with proxy server: wss://data.tunneling.iot.us-west-2.amazonaws.com:443
Setting up web socket pings for every 5000 milliseconds
Scheduled next read:

...

Starting web socket read loop continue reading...
```

# Configure el proxy local para los dispositivos que utilizan el proxy web
<a name="configure-local-proxy-web-proxy"></a>

Puede usar el proxy local en AWS IoT los dispositivos para comunicarse mediante túneles AWS IoT seguros. APIs El proxy local transmite los datos enviados por la aplicación del dispositivo mediante una tunelización segura a través de una conexión segura. WebSocket El proxy local puede funcionar en modo `source` o `destination`. En el modo `source`, se ejecuta en el mismo dispositivo o red que inicia la conexión TCP. En el modo `destination`, el proxy local se ejecuta en el dispositivo remoto, junto con la aplicación de destino. Para obtener más información, consulte [Proxy local](local-proxy.md).

El proxy local debe conectarse directamente a Internet para utilizar una tunelización AWS IoT segura. Para una conexión TCP duradera con tunelización segura, el proxy local actualiza la solicitud HTTPS para establecer una WebSockets conexión con uno de los puntos finales de conexión del dispositivo de tunelización [segura](https://docs.aws.amazon.com/general/latest/gr/iot_device_management.html).

Si sus dispositivos están en una red que utiliza un proxy web, este puede interceptar las conexiones antes de reenviarlas a Internet. Para establecer una conexión duradera con los puntos de conexión de conexión seguros del dispositivo de tunelización, configura tu proxy local para que utilice el proxy web tal y como se describe en la [especificación de websocket.](https://tools.ietf.org/html/rfc6455#section-4.1)

**nota**  
El [Cliente de dispositivo de AWS IoT](iot-sdks.md#iot-sdk-device-client) no es compatible con los dispositivos que utilizan un proxy web. Para trabajar con el proxy web, tendrás que usar un proxy local y configurarlo para que funcione con un proxy web tal y como se describe a continuación.

Los siguientes pasos muestran cómo funciona el proxy local con un proxy web.

1. El proxy local envía una solicitud `CONNECT` HTTP al proxy web que contiene la dirección remota del servicio de tunelización segura, junto con la información de autenticación del proxy web.

1. A continuación, el proxy web creará una conexión duradera con los puntos de conexión remotos de tunelización segura.

1. La conexión TCP está establecida y el proxy local ahora funcionará tanto en el modo de origen como en el de destino para la transmisión de datos.

**Topics**
+ [Cree el proxy local](#build-local-proxy)
+ [Configure su proxy web](#configure-web-proxy)
+ [Configure e inicie el proxy local](#configure-start-local-proxy)

## Cree el proxy local
<a name="build-local-proxy"></a>

Abre el [código fuente del proxy local](https://github.com/aws-samples/aws-iot-securetunneling-localproxy) en el GitHub repositorio y sigue las instrucciones para crear e instalar el proxy local.

## Configure su proxy web
<a name="configure-web-proxy"></a>

El proxy local se basa en el mecanismo de tunelización HTTP descrito en la especificación [HTTP/1.1](https://tools.ietf.org/html/rfc7231#section-4.3.6). Para cumplir con las especificaciones, el proxy web debe permitir que los dispositivos utilicen el método. `CONNECT`

La forma de configurar el proxy web depende del proxy web que utilice y de la versión del proxy web. Para asegurarse de que configura el proxy web correctamente, consulte la documentación de su proxy web.

Para configurar el proxy web, primero identifique la URL del proxy web y confirme si el proxy web admite la tunelización HTTP. La URL del proxy web se utilizará más adelante cuando configure e inicie el proxy local.

1. 

**Identifique la URL de su proxy web**  
La URL del proxy web tendrá el siguiente formato.

   ```
   protocol://web_proxy_host_domain:web_proxy_port
   ```

   AWS IoT La tunelización segura solo admite la autenticación básica para el proxy web. Para utilizar la autenticación básica, debe especificar **username** y **password** como parte de la URL del proxy web. La URL del proxy web tendrá el siguiente formato.

   ```
   protocol://username:password@web_proxy_host_domain:web_proxy_port
   ```
   + *protocol*puede ser `http` o. `https` Le recomendamos que utilice `https`.
   + *web\$1proxy\$1host\$1domain*es la dirección IP de su proxy web o un nombre DNS que se convierte en la dirección IP de su proxy web.
   + *web\$1proxy\$1port*es el puerto en el que escucha el proxy web.
   + El proxy web utiliza este **username** y **password** para autenticar la solicitud.

1. 

**Pruebe la URL de su proxy web**  
Para confirmar si su proxy web soporta el túnel TCP, utilice un comando `curl` y asegúrese de que obtiene una respuesta `2xx` o `3xx`.

   Por ejemplo, si la URL de su proxy web es `https://server.com:1235`, utilice una marca `proxy-insecure` con el comando `curl`, ya que el proxy web podría basarse en un certificado autofirmado.

   ```
   export HTTPS_PROXY=https://server.com:1235
   curl -I https://aws.amazon.com --proxy-insecure
   ```

   Si la URL de su proxy web tiene un puerto `http` (por ejemplo, `http://server.com:1234`), no tienes que usar la marca `proxy-insecure`.

   ```
   export HTTPS_PROXY=http://server.com:1234
   curl -I https://aws.amazon.com
   ```

## Configure e inicie el proxy local
<a name="configure-start-local-proxy"></a>

Para configurar el proxy local para utilizar un proxy web, debe configurar la variable de entorno `HTTPS_PROXY` con los nombres de dominio DNS o las direcciones IP y los números de puerto que utiliza su proxy web.

Después de configurar el proxy local, puede usarlo tal y como se explica en este documento [README](https://github.com/aws-samples/aws-iot-securetunneling-localproxy#readme).

**nota**  
La declaración de variables de entorno distingue entre mayúsculas y minúsculas. Recomendamos que defina cada variable solo con mayúsculas o minúsculas. Los siguientes ejemplos muestran la variable de entorno declarada en mayúsculas. Si la misma variable se especifica con letras mayúsculas y minúsculas, prevalecerá la variable especificada con letras minúsculas. 

Los siguientes comandos muestran cómo configurar el proxy local que se ejecuta en el destino para que utilice el proxy web e inicie el proxy local.
+ `AWSIOT_TUNNEL_ACCESS_TOKEN`: Esta variable contiene el token de acceso de cliente (CAT) del destino.
+ `HTTPS_PROXY`: Esta variable contiene la URL del proxy web o la dirección IP para configurar el proxy local.

Los comandos que se muestran en los siguientes ejemplos dependen del sistema operativo que utilice y de si el proxy web escucha en un puerto HTTP o HTTPS.

### El proxy web escucha en un puerto HTTP
<a name="configure-start-local-proxy-http"></a>

Si su proxy web escucha en un puerto HTTP, puede proporcionar la URL o la dirección IP del proxy web para la variable `HTTPS_PROXY`.

------
#### [ Linux/macOS ]

En Linux o macOS, ejecute los siguientes comandos en el terminal para configurar e iniciar el proxy local en su destino para utilizar un proxy web a la escucha de un puerto HTTP.

```
export AWSIOT_TUNNEL_ACCESS_TOKEN=${access_token}
export HTTPS_PROXY=http:proxy.example.com:1234
./localproxy -r us-east-1 -d 22
```

Si tiene que autenticarse con el proxy, debe especificar un **username** y **password** como parte de la variable `HTTPS_PROXY`.

```
export AWSIOT_TUNNEL_ACCESS_TOKEN=${access_token}
export HTTPS_PROXY=http://username:password@proxy.example.com:1234
./localproxy -r us-east-1 -d 22
```

------
#### [ Windows ]

En Windows, el proxy local se configura de forma similar a como se hace en Linux o macOS, pero la forma en que se definen las variables de entorno es diferente a la de otras plataformas. Ejecute los siguientes comandos en la ventana `cmd` para configurar e iniciar el proxy local en su destino para utilizar un proxy web a la escucha de un puerto HTTP.

```
set AWSIOT_TUNNEL_ACCESS_TOKEN=${access_token}
set HTTPS_PROXY=http://proxy.example.com:1234
.\localproxy -r us-east-1 -d 22
```

Si tiene que autenticarse con el proxy, debe especificar un **username** y **password** como parte de la variable `HTTPS_PROXY`.

```
set AWSIOT_TUNNEL_ACCESS_TOKEN=${access_token}
set HTTPS_PROXY=http://username:password@10.15.20.25:1234
.\localproxy -r us-east-1 -d 22
```

------

### El proxy web escucha en un puerto HTTPS
<a name="configure-start-local-proxy-https"></a>

Ejecute los siguientes comandos si su proxy web escucha en un puerto HTTPS. 

**nota**  
Si utilizas un certificado autofirmado para el proxy web o si ejecutas el proxy local en un sistema operativo que no admite OpenSSL nativo ni tiene configuraciones predeterminadas, tendrás que configurar tus certificados de proxy web tal y como se describe en [la sección Configuración de certificados del repositorio](https://github.com/aws-samples/aws-iot-securetunneling-localproxy#certificate-setup). GitHub 

Los siguientes comandos tendrán un aspecto similar al que configuró su proxy web para un proxy HTTP, con la excepción de que también especificará la ruta a los archivos de certificado que instaló, tal como se describió anteriormente.

------
#### [ Linux/macOS ]

En Linux o macOS, ejecute los siguientes comandos en el terminal para configurar el proxy local que se ejecuta en su destino para utilizar un proxy web que escuche en un puerto HTTPS.

```
export AWSIOT_TUNNEL_ACCESS_TOKEN=${access_token}
export HTTPS_PROXY=http:proxy.example.com:1234
./localproxy -r us-east-1 -d 22 -c /path/to/certs
```

Si tiene que autenticarse con el proxy, debe especificar un **username** y **password** como parte de la variable `HTTPS_PROXY`.

```
export AWSIOT_TUNNEL_ACCESS_TOKEN=${access_token}
export HTTPS_PROXY=http://username:password@proxy.example.com:1234
./localproxy -r us-east-1 -d 22 -c /path/to/certs
```

------
#### [ Windows ]

En Windows, ejecute los siguientes comandos en la ventana `cmd` para configurar e iniciar el proxy local que se ejecuta en su destino para utilizar un proxy web a la escucha de un puerto HTTP.

```
set AWSIOT_TUNNEL_ACCESS_TOKEN=${access_token}
set HTTPS_PROXY=http://proxy.example.com:1234
.\localproxy -r us-east-1 -d 22 -c \path\to\certs
```

Si tiene que autenticarse con el proxy, debe especificar un **username** y **password** como parte de la variable `HTTPS_PROXY`.

```
set AWSIOT_TUNNEL_ACCESS_TOKEN=${access_token}
set HTTPS_PROXY=http://username:password@10.15.20.25:1234
.\localproxy -r us-east-1 -d 22 -c \path\to\certs
```

------

### Comando y salida de ejemplo
<a name="example-cmd-output-localproxy-webproxy"></a>

A continuación se muestra un ejemplo de un comando que se ejecuta en un sistema operativo Linux y la salida correspondiente. En el ejemplo, se muestra un proxy web que escucha en un puerto HTTP y cómo se puede configurar el proxy local para que utilice el proxy web en ambos modos `source` y `destination`. Antes de poder ejecutar estos comandos, debe haber abierto ya un túnel y obtenido los tokens de acceso de cliente para el origen y el destino. También debe haber construido el proxy local y configurado su proxy web como se ha descrito anteriormente.

A continuación, se muestra información general de los pasos después de iniciar el proxy local. El proxy local:
+ Identifica la URL del proxy web para que pueda utilizarla para conectarse al servidor proxy.
+ Establece una conexión TCP con el proxy web.
+ Envía una solicitud `CONNECT` HTTP al proxy web y espera la respuesta `HTTP/1.1 200`, que indica que se ha establecido la conexión.
+ Actualiza el protocolo HTTPS para WebSockets establecer una conexión duradera.
+ Comienza a transmitir datos a través de la conexión a los puntos de conexión del dispositivo de tunelización seguro. 

**nota**  
Los siguientes comandos utilizados en los ejemplos usan la marca `verbosity` para ilustrar una descripción general de los diferentes pasos descritos anteriormente después de ejecutar el proxy local. Le recomendamos que utilice esta marca sólo con fines de prueba.

**Ejecutar el proxy local en modo fuente**  
En los siguientes comandos se muestra cómo ejecutar el proxy local en modo fuente.

```
export AWSIOT_TUNNEL_ACCESS_TOKEN=${access_token}
export HTTPS_PROXY=http:username:password@10.15.10.25:1234
./localproxy -s 5555 -v 5 -r us-west-2
```

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

```
...

Parsed basic auth credentials for the URL
Found Web proxy information in the environment variables, will use it to connect via the proxy.

...

Starting proxy in source mode
Attempting to establish web socket connection with endpoint wss://data.tunneling.iot.us-west-2.amazonaws.com:443
Resolved Web proxy IP: 10.10.0.11
Connected successfully with Web Proxy
Successfully sent HTTP CONNECT to the Web proxy
Full response from the Web proxy:
HTTP/1.1 200 Connection established
TCP tunnel established successfully
Connected successfully with proxy server
Successfully completed SSL handshake with proxy server
Web socket session ID: 0a109afffee745f5-00001341-000b8138-cc6c878d80e8adb0-f186064b
Web socket subprotocol selected: aws.iot.securetunneling-2.0
Successfully established websocket connection with proxy server: wss://data.tunneling.iot.us-west-2.amazonaws.com:443
Seting up web socket pings for every 5000 milliseconds
Scheduled next read:

...

Starting web socket read loop continue reading...
Resolved bind IP: 127.0.0.1
Listening for new connection on port 5555
```

**Ejecutar el proxy local en el modo de destino**  
En los siguientes comandos se muestra cómo ejecutar el proxy local en modo destino.

```
export AWSIOT_TUNNEL_ACCESS_TOKEN=${access_token}
export HTTPS_PROXY=http:username:password@10.15.10.25:1234
./localproxy -d 22 -v 5 -r us-west-2
```

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

```
...

Parsed basic auth credentials for the URL
Found Web proxy information in the environment variables, will use it to connect via the proxy.

...

Starting proxy in destination mode
Attempting to establish web socket connection with endpoint wss://data.tunneling.iot.us-west-2.amazonaws.com:443
Resolved Web proxy IP: 10.10.0.1
Connected successfully with Web Proxy
Successfully sent HTTP CONNECT to the Web proxy
Full response from the Web proxy:
HTTP/1.1 200 Connection established
TCP tunnel established successfully
Connected successfully with proxy server
Successfully completed SSL handshake with proxy server
Web socket session ID: 06717bfffed3fd05-00001355-000b8315-da3109a85da804dd-24c3d10d
Web socket subprotocol selected: aws.iot.securetunneling-2.0
Successfully established websocket connection with proxy server: wss://data.tunneling.iot.us-west-2.amazonaws.com:443
Seting up web socket pings for every 5000 milliseconds
Scheduled next read:

...

Starting web socket read loop continue reading...
```

# Multiplex flujos de datos y uso de conexiones TCP simultáneas en un túnel seguro
<a name="multiplexing"></a>

Puede utilizar varios flujos de datos por túnel mediante la característica de multiplexación por túnel segura. Con la multiplexación, puede solucionar problemas de los dispositivos que utilizan varios flujos de datos. También puede reducir la carga operativa al eliminar la necesidad de crear, implementar e iniciar varios proxies locales o abrir varios túneles en el mismo dispositivo. Por ejemplo, la multiplexación se puede utilizar en el caso de un navegador web que requiera enviar varios flujos de datos HTTP y SSH.

Para cada flujo de datos, la tunelización AWS IoT segura admite conexiones TCP simultáneas. El uso de conexiones simultáneas reduce la posibilidad de que se agote el tiempo de espera en caso de que el cliente presente varias solicitudes. Por ejemplo, puede reducir el tiempo de carga al acceder de forma remota a un servidor web local del dispositivo de destino.

En las siguientes secciones se explica más acerca de la multiplexación y el uso de conexiones TCP simultáneas, así como sus diferentes casos de uso.

**Topics**
+ [Multiplexación de varios flujos de datos en un túnel seguro](multiplexing-multiple-streams.md)
+ [Uso de conexiones TCP simultáneas en un túnel seguro](multiplexing-simultaneous-tcp.md)

# Multiplexación de varios flujos de datos en un túnel seguro
<a name="multiplexing-multiple-streams"></a>

Puede utilizar la característica de multiplexación para dispositivos que utilizan varias conexiones o puertos. La multiplexación también se puede utilizar cuando se necesitan varias conexiones a un dispositivo remoto para solucionar cualquier problema. Por ejemplo, puede utilizarse en el caso de un navegador web que requiera el envío de múltiples flujos de datos HTTP y SSH. Los datos de aplicación de ambos flujos se envían al dispositivo simultáneamente a través del túnel multiplexado.

## Ejemplo de caso de uso
<a name="multiplexing-use-case"></a>

Supongamos que necesita conectarse a una aplicación web integrada en el dispositivo para cambiar algunos parámetros de red y, al mismo tiempo, emitir comandos de consola a través del terminal para comprobar que el dispositivo funciona correctamente con los nuevos parámetros de red. En este escenario, es posible que deba conectarse al dispositivo a través de HTTP y SSH y transferir dos flujos de datos paralelos para acceder simultáneamente a la aplicación web y al terminal. Con la característica de multiplexación, estos dos flujos independientes se pueden transferir a través del mismo túnel al mismo tiempo.

![\[Un diagrama que muestra la arquitectura de nube de IoT con dispositivos de origen, servidores proxy y dispositivos de destino para transmitir datos a través de diferentes protocolos.\]](http://docs.aws.amazon.com/es_es/iot/latest/developerguide/images/tunnel-multiplexing.png)


## Cómo configurar un túnel multiplexado
<a name="multiplexing-tutorial"></a>

El siguiente procedimiento explica cómo configurar un túnel multiplexado para solucionar problemas de dispositivos que utilizan aplicaciones que requieren conexiones a varios puertos. Configurará un túnel con dos flujos multiplexados: un flujo HTTP y un flujo SSH.

1. 

**(Opcional) Cree archivos de configuración**

   Si lo desea, puede configurar el dispositivo de origen y destino con archivos de configuración. Utilice archivos de configuración si es probable que las asignaciones de puertos cambien con frecuencia. Puede omitir este paso si prefiere especificar la asignación de puertos de forma explícita mediante la CLI o si no necesita iniciar el proxy local en los puertos de escucha designados. Para obtener más información sobre cómo usar los archivos de configuración, consulte [las opciones configuradas mediante --config](https://github.com/aws-samples/aws-iot-securetunneling-localproxy#options-set-via---config) en. GitHub

   1. En su dispositivo fuente, en la carpeta donde se ejecutará su proxy local, cree una carpeta de configuración llamada `Config`. Dentro de esta carpeta, cree un archivo llamado `SSHSource.ini` con el siguiente contenido:

      ```
      HTTP1 = 5555
      SSH1 = 3333
      ```

   1. En su dispositivo de destino, en la carpeta donde se ejecutará su proxy local, cree una carpeta de configuración llamada `Config`. Dentro de esta carpeta, cree un archivo llamado `SSHDestination.ini` con el siguiente contenido:

      ```
      HTTP1 = 80
      SSH1 = 22
      ```

1. 

**Abrir un túnel**

   Abra un túnel mediante la operación API `OpenTunnel` o el comando de CLI `open-tunnel`. Configure el destino especificando `SSH1` y `HTTP1` como los servicios y el nombre de AWS IoT lo que corresponde a su dispositivo remoto. Sus aplicaciones SSH y HTTP se ejecutan en este dispositivo remoto. Debes haber creado ya lo de IoT en el AWS IoT registro. Para obtener más información, consulte [Administración de objetos con el registro](thing-registry.md).

   ```
   aws iotsecuretunneling open-tunnel \
   	--destination-config thingName=RemoteDevice1,services=HTTP1,SSH1
   ```

   Al ejecutar este comando, se generan los tokens de acceso de origen y destino que utilizarás para ejecutar el proxy local.

   ```
   {
   	"tunnelId": "b2de92a3-b8ff-46c0-b0f2-afa28b00cecd",
   	"tunnelArn": "arn:aws:iot:us-west-2:431600097591:tunnel/b2de92a3-b8ff-46c0-b0f2-afa28b00cecd",
   	"sourceAccessToken": source_client_access_token,
   	"destinationAccessToken": destination_client_access_token
   }
   ```

1. 

**Configure e inicie el proxy local**

   Antes de poder ejecutar el proxy local, configura el cliente del AWS IoT dispositivo o descarga el código fuente del proxy local [GitHub](https://github.com/aws-samples/aws-iot-securetunneling-localproxy)y compruébalo para la plataforma que prefieras. A continuación, puede iniciar el proxy local de destino y de origen para conectarse al túnel seguro. Para obtener más información sobre la configuración y el uso del proxy local, consulte [Cómo usar el proxy local](how-use-local-proxy.md).
**nota**  
En el dispositivo de origen, si no utiliza ningún archivo de configuración ni especifica la asignación de puertos mediante la CLI, puede seguir utilizando el mismo comando para ejecutar el proxy local. El proxy local en modo fuente recogerá automáticamente los puertos disponibles para usarlos y las asignaciones por usted.

------
#### [ Start local proxy using configuration files ]

   Ejecute los siguientes comandos para ejecutar el proxy local en los modos de origen y destino mediante archivos de configuración.

   ```
   // ----------------- Start the destination local proxy -----------------------
   ./localproxy -r us-east-1 -m dst -t destination_client_access_token
   
   // ----------------- Start the source local proxy ----------------------------
   // You also run the same command below if you want the local proxy to
   // choose the mappings for you instead of using configuration files.
   ./localproxy -r us-east-1 -m src -t source_client_access_token
   ```

------
#### [ Start local proxy using CLI port mapping ]

   Ejecute los siguientes comandos para ejecutar el proxy local en los modos de origen y destino especificando las asignaciones de puertos de forma explícita mediante la CLI.

   ```
   // ----------------- Start the destination local proxy -----------------------------------
   ./localproxy -r us-east-1 -d HTTP1=80,SSH1=22 -t destination_client_access_token
   
   // ----------------- Start the source local proxy ----------------------------------------
   ./localproxy -r us-east-1 -s HTTP1=5555,SSH1=33 -t source_client_access_token
   ```

------

Los datos de la aplicación de la conexión SSH y HTTP ahora se pueden transferir simultáneamente a través del túnel multiplexado. Como se ve en el siguiente mapa, el identificador de servicio actúa como un formato legible para traducir la asignación de puertos entre el dispositivo de origen y el de destino. Con esta configuración, la tunelización segura reenvía todo el tráfico HTTP entrante del puerto *5555* del dispositivo de origen al puerto *80* del dispositivo de destino y cualquier tráfico SSH entrante de un puerto *3333* *22* a otro del dispositivo de destino.

![\[Proceso de traducción para asignar los identificadores del servicio desde los proxies locales de origen y destino a las asignaciones de puertos traducidas después del procesamiento.\]](http://docs.aws.amazon.com/es_es/iot/latest/developerguide/images/multiplexing-post-mapping-translation.png)


# Uso de conexiones TCP simultáneas en un túnel seguro
<a name="multiplexing-simultaneous-tcp"></a>

AWS IoT La tunelización segura admite más de una conexión TCP simultáneamente para cada flujo de datos. Puede utilizar esta capacidad cuando necesite conexiones simultáneas a un dispositivo remoto. El uso de conexiones TCP simultáneas reduce la posibilidad de que se agote el tiempo de espera en caso de peticiones múltiples del cliente. Por ejemplo, al acceder a un servidor web que tiene varios componentes ejecutándose, las conexiones TCP simultáneas pueden reducir el tiempo que se tarda en cargar el sitio. 

**nota**  
Las conexiones TCP simultáneas tienen un límite de ancho de banda de 800 kilobytes por segundo para cada una. Cuenta de AWS AWS IoT La tunelización segura puede configurar este límite por usted en función del número de solicitudes entrantes.

## Ejemplo de caso de uso
<a name="tcp-use-case"></a>

Supongamos que necesita acceder de forma remota a un servidor web que sea local en el dispositivo de destino y que tenga varios componentes ejecutándose en él. Con una sola conexión TCP, al intentar acceder al servidor web, la carga secuencial puede aumentar el tiempo que se tarda en cargar los recursos del sitio. Las conexiones TCP simultáneas pueden reducir el tiempo de carga al cumplir con los requisitos de recursos del sitio y, por lo tanto, reducir el tiempo de acceso. El siguiente diagrama muestra cómo se admiten las conexiones TCP simultáneas para el flujo de datos a la aplicación del servidor web que se ejecuta en el dispositivo remoto.

**nota**  
Si desea acceder a varias aplicaciones que se ejecutan en el dispositivo remoto mediante el túnel, puede utilizar la multiplexación por túnel. Para obtener más información, consulte [Multiplexación de varios flujos de datos en un túnel seguro](multiplexing-multiple-streams.md).

![\[Una ilustración que muestra la configuración de la nube de IoT con el dispositivo de origen, el proxy local, los servidores proxy y el dispositivo de destino con la aplicación de servidor web, conectada a través de los protocolos TCP y WSS.\]](http://docs.aws.amazon.com/es_es/iot/latest/developerguide/images/tcp-tunneling.png)


## Cómo utilizar conexiones TCP simultáneas
<a name="multiple-tcp-tutorial"></a>

El siguiente procedimiento explica cómo utilizar conexiones TCP simultáneas para acceder al navegador web del dispositivo remoto. Cuando hay varias solicitudes del cliente, la tunelización AWS IoT segura configura automáticamente conexiones TCP simultáneas para gestionar las solicitudes, lo que reduce el tiempo de carga.

1. 

**Abrir un túnel**

   Abra un túnel mediante la operación API `OpenTunnel` o el comando de CLI `open-tunnel`. Configure el destino especificando `HTTP` como servicio y el nombre de la cosa AWS IoT que corresponde a su dispositivo remoto. La aplicación de su servidor web se está ejecutando en este dispositivo remoto. Debes haber creado ya lo de IoT en el AWS IoT registro. Para obtener más información, consulte [Administración de objetos con el registro](thing-registry.md).

   ```
   aws iotsecuretunneling open-tunnel \
   	--destination-config thingName=RemoteDevice1,services=HTTP
   ```

   Al ejecutar este comando, se generan los tokens de acceso de origen y destino que utilizarás para ejecutar el proxy local.

   ```
   {
   	"tunnelId": "b2de92a3-b8ff-46c0-b0f2-afa28b00cecd",
   	"tunnelArn": "arn:aws:iot:us-west-2:431600097591:tunnel/b2de92a3-b8ff-46c0-b0f2-afa28b00cecd",
   	"sourceAccessToken": source_client_access_token,
   	"destinationAccessToken": destination_client_access_token
   }
   ```

1. 

**Configure e inicie el proxy local**

   Antes de poder ejecutar el proxy local, descarga el código fuente del proxy local [GitHub](https://github.com/aws-samples/aws-iot-securetunneling-localproxy)y compruébalo para la plataforma que prefieras. A continuación, puede iniciar el proxy local de destino y de origen para conectarse al túnel seguro y empezar a utilizar la aplicación del servidor web remoto.
**nota**  
Para que la tunelización AWS IoT segura utilice conexiones TCP simultáneas, debe actualizar el proxy local a la versión más reciente. Esta característica no está disponible si configura el proxy local mediante el cliente del dispositivo AWS IoT .

   ```
   // Start the destination local proxy
   ./localproxy -r us-east-1 -d HTTP=80 -t destination_client_access_token
   
   // Start the source local proxy
   ./localproxy -r us-east-1 -s HTTP=5555 -t source_client_access_token
   ```

   Para obtener más información sobre la configuración y el uso del proxy local, consulte [Cómo usar el proxy local](how-use-local-proxy.md).

Ahora puede usar el túnel para acceder a la aplicación del servidor web. AWS IoT secure tunneling configurará y gestionará automáticamente las conexiones TCP simultáneas cuando haya varias solicitudes del cliente.

# Configuración de un dispositivo remoto y uso de un agente de IoT
<a name="configure-remote-device"></a>

El agente IoT se utiliza para recibir el mensaje MQTT que incluye el token de acceso de cliente e iniciar un proxy local en el dispositivo remoto. Debe instalar y ejecutar el agente IoT en el dispositivo remoto si desea un túnel seguro para entregar el token de acceso del cliente mediante MQTT. El agente de IoT debe suscribirse al siguiente tema reservado de MQTT de IoT:

**nota**  
Si desea entregar el token de acceso del cliente de destino al dispositivo remoto mediante métodos distintos de la suscripción al tema MQTT reservado, es posible que necesite un oyente del token de acceso del cliente (CAT) de destino y un proxy local. El oyente CAT debe funcionar con el mecanismo de entrega de los tokens de acceso al cliente que haya elegido y poder iniciar un proxy local en el modo de destino.

## Fragmento de agente de IoT
<a name="agent-snippet"></a>

El agente de IoT debe suscribirse al siguiente tema reservado de MQTT sobre IoT para poder recibir el mensaje MQTT e iniciar el proxy local:

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

¿Dónde `thing-name` está el nombre de la AWS IoT cosa asociada al dispositivo remoto?

A continuación, se muestra un ejemplo de una carga útil de mensaje MQTT:

```
{
    "clientAccessToken": "destination-client-access-token",
    "clientMode": "destination",
    "region": "aws-region",
    "services": ["destination-service"]
}
```

Después de recibir un mensaje MQTT, el agente IoT debe iniciar un proxy local en el dispositivo remoto con los parámetros apropiados.

El siguiente código de Java muestra cómo utilizar el [SDK de AWS IoT dispositivos](https://github.com/aws/aws-iot-device-sdk-java) y la biblioteca [ProcessBuilder](https://docs.oracle.com/javase/8/docs/api/java/lang/ProcessBuilder.html)de Java para crear un agente de IoT sencillo que funcione con túneles seguros.

```
// Find the IoT device endpoint for your Cuenta de AWS
final String endpoint = iotClient.describeEndpoint(new DescribeEndpointRequest().withEndpointType("iot:Data-ATS")).getEndpointAddress();

// Instantiate the IoT Agent with your AWS credentials
final String thingName = "RemoteDeviceA";
final String tunnelNotificationTopic = String.format("$aws/things/%s/tunnels/notify", thingName);
final AWSIotMqttClient mqttClient = new AWSIotMqttClient(endpoint, thingName,
                 "your_aws_access_key", "your_aws_secret_key");

try {
    mqttClient.connect();
    final TunnelNotificationListener listener = new TunnelNotificationListener(tunnelNotificationTopic);
    mqttClient.subscribe(listener, true);
}
finally {
    mqttClient.disconnect();
}

private static class TunnelNotificationListener extends AWSIotTopic {
    public TunnelNotificationListener(String topic) {
        super(topic);
    }

    @Override
    public void onMessage(AWSIotMessage message) {
        try {
            // Deserialize the MQTT message
            final JSONObject json = new JSONObject(message.getStringPayload());
 
            final String accessToken = json.getString("clientAccessToken");
            final String region = json.getString("region");
            
            final String clientMode = json.getString("clientMode");
            if (!clientMode.equals("destination")) {
                throw new RuntimeException("Client mode " + clientMode + " in the MQTT message is not expected");
            }

            final JSONArray servicesArray = json.getJSONArray("services");
            if (servicesArray.length() > 1) {
                throw new RuntimeException("Services in the MQTT message has more than 1 service");
            }
            final String service = servicesArray.get(0).toString();
            if (!service.equals("SSH")) {
                throw new RuntimeException("Service " + service + " is not supported");
            }

            // Start the destination local proxy in a separate process to connect to the SSH Daemon listening port 22
            final ProcessBuilder pb = new ProcessBuilder("localproxy",
                        "-t", accessToken,
                        "-r", region,
                        "-d", "localhost:22");
            pb.start();
        }
        catch (Exception e) {
            log.error("Failed to start the local proxy", e);
        }
    }
}
```

# Control del acceso a los túneles
<a name="tunnel-access"></a>

La tunelización segura proporciona acciones, recursos y claves contextuales de condiciones específicas del servicio para su uso en las políticas de permisos de IAM.

## Requisitos previos de acceso al túnel
<a name="tunnel-access-prereq"></a>
+ Aprenda a proteger los AWS recursos mediante políticas de [IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_controlling.html).
+ Aprenda a crear y evaluar [condiciones de IAM](      https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_multi-value-conditions.html).
+ Aprenda a proteger los AWS recursos mediante [etiquetas de recursos](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html).

## Políticas de acceso a túnel
<a name="tunnel-access-policies"></a>

Debe utilizar las siguientes políticas para autorizar los permisos de uso de la API de tunelización segura. Para obtener más información sobre AWS IoT la seguridad, consulte[Gestión de identidad y acceso para AWS IoT](security-iam.md).

### IoT: OpenTunnel
<a name="open-tunnel-action"></a>

La acción de política `iot:OpenTunnel` concede un permiso a la entidad principal para llamar a [OpenTunnel](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-secure-tunneling_OpenTunnel.html).

En el elemento `Resource` de la declaración de política de IAM:
+ Especifique el ARN del túnel comodín:

  `arn:aws:iot:aws-region:aws-account-id:tunnel/*`
+ Especifique un ARN de cosa para administrar el permiso `OpenTunnel` para cosas específicas de IoT:

  `arn:aws:iot:aws-region:aws-account-id:thing/thing-name`

Por ejemplo, la siguiente instrucción de política le permite abrir un túnel con el objeto de IoT llamado `TestDevice`.

```
{
    "Effect": "Allow",
    "Action": "iot:OpenTunnel",
    "Resource": [
        "arn:aws:iot:aws-region:aws-account-id:tunnel/*",
        "arn:aws:iot:aws-region:aws-account-id:thing/TestDevice"
    ]
}
```

La acción de política `iot:OpenTunnel` admite las siguientes claves de condición:
+ `iot:ThingGroupArn`
+ `iot:TunnelDestinationService`
+ `aws:RequestTag`/*tag-key*
+ `aws:SecureTransport`
+ `aws:TagKeys`

La siguiente instrucción de política le permite abrir un túnel con el objeto si el objeto pertenece a un grupo de objetos con un nombre que comienza por `TestGroup` y el servicio de destino configurado en el túnel es SSH.

```
{
    "Effect": "Allow",
    "Action": "iot:OpenTunnel",
    "Resource": [
        "arn:aws:iot:aws-region:aws-account-id:tunnel/*"
    ],
    "Condition": {
        "ForAnyValue:StringLike": {
            "iot:ThingGroupArn": [
                "arn:aws:iot:aws-region:aws-account-id:thinggroup/TestGroup*"
            ]
        },
        "ForAllValues:StringEquals": {
            "iot:TunnelDestinationService": [
                "SSH"
            ]
        }
    }
}
```

También puede utilizar etiquetas de recursos para controlar los permisos para abrir túneles. Por ejemplo, la siguiente instrucción de política permite abrir un túnel si la clave de etiqueta `Owner` está presente con un valor de `Admin` y no se especifica ninguna otra etiqueta. Para obtener más información acerca del uso de etiquetas, consulte [Etiquetar sus recursos AWS IoT](tagging-iot.md).

```
{
    "Effect": "Allow",
    "Action": "iot:OpenTunnel",
    "Resource": [
        "arn:aws:iot:aws-region:aws-account-id:tunnel/*"
    ],
    "Condition": {
        "StringEquals": {
            "aws:RequestTag/Owner": "Admin"
        },
        "ForAllValues:StringEquals": {
            "aws:TagKeys": "Owner"
        }
    }
}
```

### IoT: RotateTunnelAccessToken
<a name="rotate-tunnel-action"></a>

La acción de política `iot:RotateTunnelAccessToken` concede un permiso a la entidad principal para llamar a [RotateTunnelAccessToken](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-secure-tunneling_RorateTunnelAccessToken.html).

En el elemento `Resource` de la declaración de política de IAM:
+ Especifique un ARN de túnel totalmente cualificado:

  `arn:aws:iot:aws-region: aws-account-id:tunnel/tunnel-id`

  También puede utilizar el ARN del túnel comodín:

  `arn:aws:iot:aws-region:aws-account-id:tunnel/*`
+ Especifique un ARN de cosa para administrar el permiso `RotateTunnelAccessToken` para cosas específicas de IoT:

  `arn:aws:iot:aws-region:aws-account-id:thing/thing-name`

Por ejemplo, la siguiente declaración de política le permite rotar el token de acceso de origen de un túnel o el token de acceso de destino de un cliente para el elemento de IoT denominado `TestDevice`.

```
{
    "Effect": "Allow",
    "Action": "iot:RotateTunnelAccessToken",
    "Resource": [
        "arn:aws:iot:aws-region:aws-account-id:tunnel/*",
        "arn:aws:iot:aws-region:aws-account-id:thing/TestDevice"
    ]
}
```

La acción de política `iot:RotateTunnelAccessToken` admite las siguientes claves de condición:
+ `iot:ThingGroupArn`
+ `iot:TunnelDestinationService`
+ `iot:ClientMode`
+ `aws:SecureTransport`

La siguiente declaración de política le permite rotar el token de acceso de destino a la cosa si la cosa pertenece a un grupo de cosas con un nombre que empiece por `TestGroup`, el servicio de destino configurado en el túnel es SSH, y el cliente está en modo `DESTINATION`.

```
{
    "Effect": "Allow",
    "Action": "iot:RotateTunnelAccessToken",
    "Resource": [
        "arn:aws:iot:aws-region:aws-account-id:tunnel/*"
    ],
    "Condition": {
        "ForAnyValue:StringLike": {
            "iot:ThingGroupArn": [
                "arn:aws:iot:aws-region:aws-account-id:thinggroup/TestGroup*"
            ]
        },
        "ForAllValues:StringEquals": {
            "iot:TunnelDestinationService": [
                "SSH"
            ],
            "iot:ClientMode": "DESTINATION"
        }
    }
}
```

### IoT: DescribeTunnel
<a name="describe-tunnel-action"></a>

La acción de política `iot:DescribeTunnel` concede un permiso a la entidad principal para llamar a [DescribeTunnel](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-secure-tunneling_DescribeTunnel.html).

En el elemento `Resource` de la declaración de política de IAM, especifique un ARN de túnel totalmente cualificado:

`arn:aws:iot:aws-region: aws-account-id:tunnel/tunnel-id`

También puede utilizar el ARN comodín:

`arn:aws:iot:aws-region:aws-account-id:tunnel/*`

La acción de política `iot:DescribeTunnel` admite las siguientes claves de condición:
+ `aws:ResourceTag/tag-key`
+ `aws:SecureTransport`

La siguiente instrucción de política le permite llamar a `DescribeTunnel` si el túnel solicitado está etiquetado con la clave `Owner` con un valor de `Admin`.

```
{
    "Effect": "Allow",
    "Action": "iot:DescribeTunnel",
    "Resource": [
        "arn:aws:iot:aws-region:aws-account-id:tunnel/*"
    ],
    "Condition": {
        "StringEquals": {
            "aws:ResourceTag/Owner": "Admin"
        }
    }
}
```

### IoT: ListTunnels
<a name="list-tunnels-action"></a>

La acción de política `iot:ListTunnels` concede un permiso a la entidad principal para llamar a [ListTunnels](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-secure-tunneling_ListTunnels.html).

En el elemento `Resource` de la declaración de política de IAM:
+ Especifique el ARN del túnel comodín:

  `arn:aws:iot:aws-region:aws-account-id:tunnel/*`
+ Especifique un ARN de cosa para administrar el permiso `ListTunnels`s en determinadas cosas de IoT:

  `arn:aws:iot:aws-region:aws-account-id:thing/thing-name`

La acción de política `iot:ListTunnels` admite la clave de condición `aws:SecureTransport`:

La siguiente instrucción de política le permite mostrar los túneles del objeto denominado `TestDevice`.

```
{
    "Effect": "Allow",
    "Action": "iot:ListTunnels",
    "Resource": [
        "arn:aws:iot:aws-region:aws-account-id:tunnel/*",
        "arn:aws:iot:aws-region:aws-account-id:thing/TestDevice"
    ]
}
```

### IoT: ListTagsForResource
<a name="list-tags-for-resource-action"></a>

La acción de política `iot:ListTagsForResource` concede un permiso a la entidad principal para llamar a `ListTagsForResource`.

En el elemento `Resource` de la declaración de política de IAM, especifique un ARN de túnel totalmente cualificado:

`arn:aws:iot:aws-region: aws-account-id:tunnel/tunnel-id`

También puede utilizar el ARN del túnel comodín:

`arn:aws:iot:aws-region:aws-account-id:tunnel/*`

La acción de política `iot:ListTagsForResource` admite la clave de condición `aws:SecureTransport`:

### IoT: CloseTunnel
<a name="close-tunnel-action"></a>

La acción de política `iot:CloseTunnel` concede un permiso a la entidad principal para llamar a [CloseTunnel](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-secure-tunneling_CloseTunnel.html).

En el elemento `Resource` de la declaración de política de IAM, especifique un ARN de túnel totalmente cualificado:

`arn:aws:iot:aws-region: aws-account-id:tunnel/tunnel-id`

También puede utilizar el ARN del túnel comodín:

`arn:aws:iot:aws-region:aws-account-id:tunnel/*`

La acción de política `iot:CloseTunnel` admite las siguientes claves de condición:
+ `iot:Delete`
+ `aws:ResourceTag/tag-key`
+ `aws:SecureTransport`

La siguiente instrucción de política le permite llamar a `CloseTunnel` si el parámetro `Delete` de la solicitud es `false` y el túnel solicitado está etiquetado con la clave `Owner` y el valor `QATeam`.

```
{
    "Effect": "Allow",
    "Action": "iot:CloseTunnel",
    "Resource": [
        "arn:aws:iot:aws-region:aws-account-id:tunnel/*"
    ],
    "Condition": {
        "Bool": {
            "iot:Delete": "false"
        },
        "StringEquals": {
            "aws:ResourceTag/Owner": "QATeam"
        }
    }
}
```

### IoT: TagResource
<a name="tag-resource-action"></a>

La acción de política `iot:TagResource` concede un permiso a la entidad principal para llamar a `TagResource`.

En el elemento `Resource` de la declaración de política de IAM, especifique un ARN de túnel totalmente cualificado:

`arn:aws:iot:aws-region: aws-account-id:tunnel/tunnel-id`

También puede utilizar el ARN del túnel comodín:

`arn:aws:iot:aws-region:aws-account-id:tunnel/*`

La acción de política `iot:TagResource` admite la clave de condición `aws:SecureTransport`:

### IoT: UntagResource
<a name="untag-resource-action"></a>

La acción de política `iot:UntagResource` concede un permiso a la entidad principal para llamar a `UntagResource`.

En el elemento `Resource` de la declaración de política de IAM, especifique un ARN de túnel totalmente cualificado:

`arn:aws:iot:aws-region: aws-account-id:tunnel/tunnel-id`

También puede utilizar el ARN del túnel comodín:

`arn:aws:iot:aws-region:aws-account-id:tunnel/*`

La acción de política `iot:UntagResource` admite la clave de condición `aws:SecureTransport`:

# Resolver problemas de conectividad de túneles AWS IoT seguros mediante la rotación de los tokens de acceso de los clientes
<a name="iot-secure-tunneling-troubleshooting"></a>

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

**Topics**
+ [Error de token de acceso al cliente no válido](#invalid-access-token)
+ [Error de discordancia del token del cliente](#client-token-mismatch)
+ [Problemas de conectividad de dispositivos remotos](#tunnel-open-device-error)

## Error de token de acceso al cliente no válido
<a name="invalid-access-token"></a>

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)](#rotate-token-source-example).

## Error de discordancia del token del cliente
<a name="client-token-mismatch"></a>

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

### Rote la fuente (ejemplo de CAT)
<a name="rotate-token-source-example"></a>

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

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

### Ejemplo de rotación (CAT) de destino
<a name="rotate-token-dest-example"></a>

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