

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 수동 설정을 사용하여 터널을 열고 원격 디바이스에 연결
<a name="tunneling-tutorial-manual-setup"></a>

터널을 열 때 빠른 설정 또는 수동 설정 방법을 선택하여 원격 디바이스에 연결하도록 터널을 열 수 있습니다. 이 자습서에서는 수동 설정 방법을 사용하여 터널을 열고 로컬 프록시를 구성 및 시작하여 원격 디바이스에 연결하는 방법을 보여줍니다.

수동 설정 방법을 사용하는 경우 터널을 생성할 때 터널 구성을 수동으로 지정해야 합니다. 터널을 생성한 후 브라우저 내에서 SSH를 사용하거나 AWS IoT 콘솔 외부에서 터미널을 열 수 있습니다. 이 자습서에서는 콘솔 외부에서 터미널을 사용하여 원격 디바이스에 액세스하는 방법을 보여줍니다. 또한 로컬 프록시를 구성한 다음 로컬 프록시에 연결하여 원격 디바이스와 상호 작용하는 방법도 알아봅니다. 로컬 프록시에 연결하려면 터널을 생성할 때 소스 액세스 토큰을 다운로드해야 합니다.

이 방법을 이용하면 SSH 이외의 서비스(예: FTP)를 사용하여 원격 디바이스에 연결할 수 있습니다. 다양한 설정 방법에 대한 자세한 내용은 [터널 설정 방법](secure-tunneling-tutorial-open-tunnel.md#tunneling-tutorial-setup-methods) 섹션을 참조하세요.

## 수동 설정 방법의 사전 조건
<a name="tunneling-tutorial-manual-prerequisites"></a>
+ 원격 디바이스 뒤에 있는 방화벽에서 포트 443의 아웃바운드 트래픽을 허용해야 합니다. 생성하는 터널은 이 포트를 사용하여 원격 디바이스에 연결됩니다.
+ 디바이스 게이트웨이에 연결되고 MQTT 주제 구독으로 구성된 원격 디바이스에서 실행되는 IoT AWS IoT 디바이스 에이전트( 참조[IoT 에이전트 코드 조각](configure-remote-device.md#agent-snippet))가 있습니다. 자세한 내용은 [디바이스를 AWS IoT 디바이스 게이트웨이에 연결을 참조하세요](https://docs.aws.amazon.com/iot/latest/developerguide/sdk-tutorials.html).
+ 원격 디바이스에서 실행 중인 SSH 데몬이 있어야 합니다.
+ [GitHub](https://github.com/aws-samples/aws-iot-securetunneling-localproxy)에서 로컬 프록시 소스 코드를 다운로드하고 선택한 플랫폼에 맞게 빌드했습니다. 이 자습서에서는 이 빌드된 로컬 프록시 실행 파일을 `localproxy`(이)라고 합니다.

## 터널 열기
<a name="open-tunnel"></a>

 AWS Management Console, AWS IoT API 참조 또는를 사용하여 보안 터널을 열 수 있습니다 AWS CLI. 선택적으로 대상 이름을 구성할 수 있지만 이 자습서에서는 필요하지 않습니다. 대상을 구성하면 보안 터널링이 MQTT를 사용하여 원격 디바이스에 액세스 토큰을 자동으로 전달합니다. 자세한 내용은 [AWS IoT 콘솔의 터널 생성 방법](secure-tunneling-tutorial-open-tunnel.md#tunneling-tutorial-flows) 단원을 참조하십시오.

**콘솔에서 터널을 열려면**

1. [AWS IoT 콘솔의 터널 허브](https://console.aws.amazon.com/iot/home#/tunnelhub)로 이동하고 **Create tunnel**(터널 생성)을 선택합니다.  
![\[AWS IoT 터널 생성, 닫기 또는 삭제 옵션이 포함된 빈 터널 목록을 보여주는 콘솔입니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/tunnels-page.png)

1. 이 자습서에서는 터널 생성 방법으로 **Manual setup**(수동 설정)을 선택한 후 **Next**(다음)를 선택합니다. **Quick setup**(빠른 설정) 방법을 사용한 터널 생성에 대한 자세한 내용은 [터널을 열고 브라우저 기반 SSH를 사용하여 원격 디바이스에 액세스](tunneling-tutorial-quick-setup.md) 섹션을 참조하세요.
**참고**  
사물의 세부 정보 페이지에서 보안 터널을 만드는 경우 새 터널을 생성할지 아니면 기존 터널을 사용할지를 선택할 수 있습니다. 자세한 내용은 [원격 디바이스에 대한 터널을 열고 브라우저 기반 SSH 사용](tunneling-tutorial-existing-tunnel.md) 단원을 참조하십시오.  
![\[터널 연결을 설정하는 두 가지 옵션: 빠른 설정(SSH) 또는 수동 설정으로, 로컬 프록시를 구성하고 액세스 토큰을 관리해야 합니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/tunnels-choose-manual.PNG)

1. (선택 사항) 터널의 구성 설정을 입력합니다. 이 단계를 건너뛰고 다음 단계로 진행하여 터널을 생성할 수도 있습니다.

   리소스를 식별하는 데 도움이 되도록 터널 설명, 터널 제한 시간 및 리소스 태그를 키-값 페어로 입력합니다. 이 자습서에서는 대상 구성을 건너뛸 수 있습니다.
**참고**  
터널을 열어 둔 기간을 기준으로 요금이 청구되지 않습니다. 새 터널을 생성할 때만 요금이 부과됩니다. 요금 정보는 [AWS IoT Device Management 요금](https://aws.amazon.com/iot-device-management/pricing/)의 **보안 터널링**을 참조하세요.

1. 클라이언트 액세스 토큰을 다운로드한 다음, **Done**(완료)을 선택합니다. **완료(Done)**를 선택한 후에는 토큰을 다운로드할 수 없습니다.

   이러한 토큰은 한 번만 사용하여 터널에 연결할 수 있습니다. 토큰을 분실하거나 터널의 연결이 끊어지면 새 토큰을 생성하고 원격 디바이스로 전송하여 터널에 다시 연결할 수 있습니다.  
![\[보안 터널 연결을 생성하기 위한 소스 및 대상 액세스 토큰과 필요한 경우 토큰 교체 및 재전송에 대한 지침입니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/tunnel-success.png)

**API를 사용하여 터널을 열려면**  
새 터널을 열기 위해 [OpenTunnel](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-secure-tunneling_OpenTunnel.html) API 작업을 사용할 수 있습니다. API를 사용하여 터널 지속 시간 및 대상 구성과 같은 추가 구성을 지정할 수도 있습니다.

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

이 명령을 실행하면 새 터널이 생성되고 소스 및 대상 액세스 토큰이 제공됩니다.

```
{
    "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>"
}
```

## 터널 액세스 토큰 재전송
<a name="resend-access-tokens"></a>

터널을 생성할 때 얻은 토큰은 터널에 연결하는 데 한 번만 사용할 수 있습니다. 액세스 토큰을 잘못 배치하거나 터널 연결이 끊어지면 추가 비용 없이 MQTT를 사용하여 원격 디바이스로 새 액세스 토큰을 재전송할 수 있습니다. AWS IoT 보안 터널링은 현재 토큰을 취소하고 터널에 다시 연결하기 위한 새 액세스 토큰을 반환합니다.

**콘솔에서 토큰을 교체하려면**

1. [AWS IoT 콘솔의 터널 허브로](https://console.aws.amazon.com/iot/home#/tunnels) 이동하여 생성한 터널을 선택합니다.

1. Tunnel details(터널 세부 정보) 페이지에서 **Generate new access tokens**(새 액세스 토큰 생성)를 선택한 후 **Next**(다음)를 선택합니다.

1. 터널에 사용할 새 액세스 토큰을 다운로드하고 **Done**(완료)을 선택합니다. 이러한 토큰은 한 번만 사용할 수 있습니다. 토큰을 분실하거나 터널의 연결이 끊어지는 경우 새 액세스 토큰을 다시 전송할 수 있습니다.  
![\[소스 및 대상 디바이스에 대한 액세스 토큰을 복사하거나 다운로드할 수 있는 옵션이 있습니다. 텍스트는 회전 토큰이 현재 토큰을 취소하고 연결이 해제된 터널을 다시 연결하기 위한 새 일회용 토큰을 생성한다고 설명합니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/tunnel-token-rotated.PNG)

**API를 사용하여 액세스 토큰을 교체하려면**  
터널 액세스 토큰을 교체하려는 경우 [RotateTunnelAccessToken](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-secure-tunneling_RotateTunnelAccessToken.html) API 작업을 사용하여 현재 토큰을 취소하고 터널에 다시 연결하기 위한 새 액세스 토큰을 반환할 수 있습니다. 예를 들어, 다음 명령은 대상 디바이스 *`RemoteThing1`*의 액세스 토큰을 교체합니다.

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

이 명령을 실행하면 다음 예제와 같이 새 액세스 토큰이 생성됩니다. 그런 다음 디바이스 에이전트가 올바르게 설정된 경우 MQTT를 사용하여 토큰이 디바이스에 전달되어 터널에 연결됩니다.

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

액세스 토큰을 교체하는 방법과 시기를 보여주는 예제는 [클라이언트 액세스 토큰을 교체하여 AWS IoT 보안 터널링 연결 문제 해결](iot-secure-tunneling-troubleshooting.md) 섹션을 참조하세요.

## 로컬 프록시 구성 및 시작
<a name="start-local-proxy"></a>

원격 디바이스에 연결하려면 노트북에서 터미널을 열어 로컬 프록시를 구성하고 시작합니다. 로컬 프록시는 WebSocket 보안 연결을 통한 보안 터널링을 사용하여 소스 디바이스에서 실행되는 애플리케이션에서 보낸 데이터를 전송합니다. [GitHub](https://github.com/aws-samples/aws-iot-securetunneling-localproxy)에서 로컬 프록시 소스를 다운로드할 수 있습니다.

로컬 프록시를 구성한 후 소스 클라이언트 액세스 토큰을 복사한 다음 해당 토큰을 사용하여 로컬 프록시를 소스 모드로 시작합니다. 다음은 로컬 프록시를 시작하는 예제 명령을 보여줍니다. 다음 명령에서 로컬 프록시는 포트 5555에서 새 연결을 수신하도록 구성됩니다. 이 명령에서:
+ `-r`는 터널이 생성된 리전과 동일한 리전이어야 AWS 리전하는를 지정합니다.
+ `-s`는 프록시가 연결될 포트를 지정합니다.
+ `-t`는 클라이언트 토큰 텍스트를 지정합니다.

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

이 명령을 실행하면 로컬 프록시가 소스 모드로 시작됩니다. 이 명령을 실행한 후 다음 오류가 발생하면 CA 경로를 설정합니다. 자세한 내용은 [GitHub의 보안 터널링 로컬 프록시](https://github.com/aws-samples/aws-iot-securetunneling-localproxy)를 참조하세요.

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

다음은 `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
```

## SSH 세션 시작
<a name="start-ssh-session"></a>

다른 터미널을 열고 다음 명령을 사용하여 포트 5555의 로컬 프록시에 연결하여 새 SSH 세션을 시작합니다.

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

SSH 세션에 대한 암호를 묻는 메시지가 나타날 수 있습니다. SSH 세션을 완료했으면 **exit**을(를) 입력하여 세션을 닫습니다.

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

**터널 닫기**  
터널을 다 사용한 후에는 터널을 닫는 것이 좋습니다. 터널이 지정된 터널 지속 시간보다 더 오래 열려 있는 경우 터널이 닫힐 수도 있습니다. 터널이 닫힌 후에는 터널을 다시 열 수 없습니다. 닫힌 터널을 연 다음 **Duplicate tunnel**(터널 복제)을 선택하여 여전히 터널을 복제할 수 있습니다. 사용할 터널 지속 시간을 지정한 다음 새 터널을 생성합니다.
  +  AWS IoT 콘솔에서 개별 터널 또는 여러 터널을 닫으려면 [Tunnels hub](https://console.aws.amazon.com/iot/home#/tunnels)(터널 허브)로 이동하여 닫을 터널을 선택한 다음 **Close tunnel**(터널 닫기)을 선택합니다.
  +  AWS IoT API 참조 API를 사용하여 개별 터널 또는 여러 터널을 닫으려면 [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"
    ```
+ 

**터널 삭제**  
에서 터널을 영구적으로 삭제할 수 있습니다 AWS 계정.
**주의**  
삭제 작업은 영구적이며 취소할 수 없습니다.
  +  AWS IoT 콘솔에서 개별 터널 또는 여러 터널을 삭제하려면 [터널 허브](https://console.aws.amazon.com/iot/home#/tunnels)로 이동하여 삭제할 터널을 선택한 다음 **Delete tunnel**(터널 삭제)을 선택합니다.
  +  AWS IoT API 참조 API를 사용하여 개별 터널 또는 여러 터널을 삭제하려면 [CloseTunnel](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-secure-tunneling_CloseTunnel.html) API 작업을 사용합니다. API를 사용하는 경우 `delete` 플래그를 `true`로 설정합니다.

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