수동 설정을 사용하여 터널을 열고 원격 디바이스에 연결 - AWS IoT Core

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

수동 설정을 사용하여 터널을 열고 원격 디바이스에 연결

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

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

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

수동 설정 방법의 사전 조건

  • 원격 디바이스 뒤에 있는 방화벽에서 포트 443의 아웃바운드 트래픽을 허용해야 합니다. 생성하는 터널은 이 포트를 사용하여 원격 디바이스에 연결됩니다.

  • 장치 게이트웨이에 연결되고 MQTT 주제 구독으로 구성된 원격 장치에서 IoT AWS IoT 장치 에이전트 (참조IoT 에이전트 코드 조각) 가 실행되고 있습니다. 자세한 내용은 장치 게이트웨이에 장치 연결을 참조하십시오. AWS IoT

  • 원격 디바이스에서 실행 중인 SSH 데몬이 있어야 합니다.

  • 에서 GitHub로컬 프록시 소스 코드를 다운로드하여 선택한 플랫폼에 맞게 빌드했습니다. 이 자습서에서는 이 빌드된 로컬 프록시 실행 파일을 localproxy(이)라고 합니다.

터널 열기

AWS Management Console, AWS IoT API 참조 또는 를 사용하여 보안 터널을 열 수 AWS CLI있습니다. 선택적으로 대상 이름을 구성할 수 있지만 이 자습서에서는 필요하지 않습니다. 대상을 구성하면 보안 터널링이 MQTT를 사용하여 원격 디바이스에 액세스 토큰을 자동으로 전달합니다. 자세한 정보는 AWS IoT 콘솔의 터널 생성 메서드을 참조하세요.

콘솔에서 터널을 열려면
  1. AWS IoT 콘솔의 터널 허브로 이동하고 Create tunnel(터널 생성)을 선택합니다.

    AWS IoT 콘솔에는 터널을 생성, 종료 또는 삭제할 수 있는 옵션이 포함된 빈 터널 목록이 표시됩니다.
  2. 이 자습서에서는 터널 생성 방법으로 Manual setup(수동 설정)을 선택한 후 Next(다음)를 선택합니다. Quick setup(빠른 설정) 방법을 사용한 터널 생성에 대한 자세한 내용은 터널을 열고 브라우저 기반 SSH를 사용하여 원격 디바이스에 액세스 섹션을 참조하세요.

    참고

    사물의 세부 정보 페이지에서 보안 터널을 만드는 경우 새 터널을 생성할지 아니면 기존 터널을 사용할지를 선택할 수 있습니다. 자세한 정보는 원격 디바이스에 대한 터널을 열고 브라우저 기반 SSH 사용을 참조하세요.

    터널 연결을 설정하는 두 가지 옵션: 빠른 설정 (SSH) 또는 로컬 프록시를 구성하고 액세스 토큰을 관리해야 하는 수동 설정 (수동 설정)
  3. (선택 사항) 터널의 구성 설정을 입력합니다. 이 단계를 건너뛰고 다음 단계로 진행하여 터널을 생성할 수도 있습니다.

    리소스를 식별하는 데 도움이 되도록 터널 설명, 터널 제한 시간 및 리소스 태그를 키-값 페어로 입력합니다. 이 자습서에서는 대상 구성을 건너뛸 수 있습니다.

    참고

    터널을 열어 둔 기간을 기준으로 요금이 청구되지 않습니다. 새 터널을 생성할 때만 요금이 부과됩니다. 요금 정보는 AWS IoT Device Management 요금보안 터널링을 참조하세요.

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

    이러한 토큰은 한 번만 사용하여 터널에 연결할 수 있습니다. 토큰을 분실하거나 터널의 연결이 끊어지면 새 토큰을 생성하고 원격 디바이스로 전송하여 터널에 다시 연결할 수 있습니다.

    보안 터널 연결을 만들기 위한 소스 및 대상 액세스 토큰 (필요한 경우 토큰 교체 및 재전송에 대한 지침 포함)
API를 사용하여 터널을 열려면

새 터널을 열려면 OpenTunnelAPI 작업을 사용할 수 있습니다. 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>" }

터널 액세스 토큰 재전송

터널을 생성할 때 얻은 토큰은 터널에 연결하는 데 한 번만 사용할 수 있습니다. 액세스 토큰을 분실하거나 터널 연결이 끊긴 경우 추가 비용 없이 MQTT를 사용하여 새 액세스 토큰을 원격 장치에 다시 보낼 수 있습니다. AWS IoT 보안 터널링은 현재 토큰을 취소하고 터널에 다시 연결하기 위한 새 액세스 토큰을 반환합니다.

콘솔에서 토큰을 교체하려면
  1. AWS IoT 콘솔의 터널 허브로 이동하여 생성한 터널을 선택합니다.

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

  3. 터널에 사용할 새 액세스 토큰을 다운로드하고 Done(완료)을 선택합니다. 이러한 토큰은 한 번만 사용할 수 있습니다. 토큰을 분실하거나 터널의 연결이 끊어지는 경우 새 액세스 토큰을 다시 전송할 수 있습니다.

    복사 또는 다운로드 옵션이 있는 소스 및 대상 장치의 액세스 토큰을 사용할 수 있습니다. 텍스트에서는 토큰을 회전시키면 현재 토큰이 취소되고 연결이 끊긴 터널을 다시 연결할 수 있는 일회용 토큰이 새로 생성된다고 설명합니다.
API를 사용하여 액세스 토큰을 교체하려면

터널 액세스 토큰을 교체하려면 RotateTunnelAccessTokenAPI 작업을 사용하여 현재 토큰을 취소하고 터널에 다시 연결하는 데 사용할 새 액세스 토큰을 반환할 수 있습니다. 예를 들어, 다음 명령은 대상 디바이스 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 보안 터널링 연결 문제 해결 섹션을 참조하세요.

로컬 프록시 구성 및 시작

원격 디바이스에 연결하려면 노트북에서 터미널을 열어 로컬 프록시를 구성하고 시작합니다. 로컬 프록시는 보안 연결을 통한 보안 터널링을 사용하여 소스 장치에서 실행 중인 애플리케이션이 보낸 데이터를 전송합니다. WebSocket 에서 로컬 프록시 소스를 다운로드할 수 있습니다. GitHub

로컬 프록시를 구성한 후 소스 클라이언트 액세스 토큰을 복사한 다음 해당 토큰을 사용하여 로컬 프록시를 소스 모드로 시작합니다. 다음은 로컬 프록시를 시작하는 예제 명령을 보여줍니다. 다음 명령에서 로컬 프록시는 포트 5555에서 새 연결을 수신하도록 구성됩니다. 이 명령에서:

  • -r AWS 리전를 지정합니다. 터널이 생성된 지역과 동일해야 합니다.

  • -s는 프록시가 연결될 포트를 지정합니다.

  • -t는 클라이언트 토큰 텍스트를 지정합니다.

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

이 명령을 실행하면 로컬 프록시가 소스 모드로 시작됩니다. 이 명령을 실행한 후 다음 오류가 발생하면 CA 경로를 설정합니다. 자세한 내용은 보안 터널링 로컬 프록시 켜기를 참조하십시오. GitHub

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 세션 시작

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

ssh username@localhost -p 5555

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

정리

  • 터널 닫기

    터널을 다 사용한 후에는 터널을 닫는 것이 좋습니다. 터널이 지정된 터널 지속 시간보다 더 오래 열려 있는 경우 터널이 닫힐 수도 있습니다. 터널이 닫힌 후에는 터널을 다시 열 수 없습니다. 닫힌 터널을 연 다음 Duplicate tunnel(터널 복제)을 선택하여 여전히 터널을 복제할 수 있습니다. 사용할 터널 지속 시간을 지정한 다음 새 터널을 생성합니다.

    • AWS IoT 콘솔에서 개별 터널 또는 여러 터널을 닫으려면 터널 허브로 이동하여 닫을 터널을 선택한 다음 Close tunnel(터널 닫기)을 선택합니다.

    • AWS IoT API 참조 API를 사용하여 개별 터널 또는 여러 터널을 닫으려면 API 작업을 사용하십시오. CloseTunnel

      aws iotsecuretunneling close-tunnel \ --tunnel-id "01234567-89ab-0123-4c56-789a01234bcd"
  • 터널 삭제

    터널을 내 터널에서 영구적으로 삭제할 수 있습니다 AWS 계정.

    주의

    삭제 작업은 영구적이며 취소할 수 없습니다.

    • AWS IoT 콘솔에서 개별 터널 또는 여러 터널을 삭제하려면 터널 허브로 이동하여 삭제할 터널을 선택한 다음 Delete tunnel(터널 삭제)을 선택합니다.

    • AWS IoT API 참조 API를 사용하여 개별 터널 또는 여러 터널을 삭제하려면 CloseTunnelAPI 작업을 사용하십시오. API를 사용하는 경우 delete 플래그를 true로 설정합니다.

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