手動セットアップを使用してトンネルを開き、リモートデバイスに接続する - AWS IoT Core

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

手動セットアップを使用してトンネルを開き、リモートデバイスに接続する

トンネルを開く場合、クイックセットアップ方式または手動セットアップ方式を選択して、リモートデバイスへのトンネルを開くことができます。このチュートリアルでは、手動セットアップ方式を使用してトンネルを開き、ローカルプロキシを設定して起動し、リモートデバイスに接続する方法を説明しています。

手動セットアップ方式を使用する場合は、トンネルを作成する際にトンネル構成を手動で指定する必要があります。トンネルを作成したら、ブラウザSSH内で、または AWS IoT コンソールの外部でターミナルを開くことができます。このチュートリアルでは、コンソール外のターミナルを使用してリモートデバイスにアクセスする方法について説明します。また、ローカルプロキシを設定し、そのローカルプロキシに接続してリモートデバイスとやり取りする方法について学習します。ローカルプロキシに接続するには、トンネルを作成する際に送信元アクセストークンをダウンロードする必要があります。

この設定方法では、 以外の サービスを使用してリモートデバイスSSHFTPに接続できます。さまざまなセットアップ方式の詳細については、「トンネルのセットアップ方式」を参照してください。

手動セットアップ方式の前提条件

  • リモートデバイスが背後にあるファイアウォールは、ポート 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] (次へ) を選択します。クイックセットアップ方式を使用してトンネルを作成する方法についての詳細は、「トンネルを開き、ブラウザベースの SSH を使用してリモートデバイスにアクセスする」を参照してください。

    注記

    モノの詳細ページからセキュアトンネルを作成する場合、新しいトンネルを作成するか、既存のトンネルを使用するかを選択できます。詳細については、「リモートデバイスのトンネルを開き、ブラウザベースの を使用する SSH」を参照してください。

    トンネル接続をセットアップするための 2 つのオプション: クイックセットアップ (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. トンネルの詳細ページで、[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、 CloseTunnelAPIオペレーションを使用します。

      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