Amazon Web Services ブログ

AWS IoT Device Management のセキュアトンネリングの導入、IoTデバイスのトラブルシューティングを行う新しい安全な方法

AWS IoT Device Managementには、企業があらゆる業界向けのIoTアプリケーションを構築できる幅広いツールがあります。ただし、デバイスへのリモートアクセスに関しては、通常、顧客がMQTTトピックを介して制御メッセージを送信するか、デバイスのシャドウを更新してからデバイスエージェントにそれらのメッセージに対してアクションを実行させる必要があります。これは、ハードウェア開発チームがこれらの特定の制御機能をデバイスのファームウェアに明示的に組み込む必要があることを意味します。

これらの事前構成されたフロー以外でのデバイス管理は、デバイスがファイアウォールの内側にある場合に特に注意が必要です。通常のデスクトップコンピューターでは、リモート管理アプリケーションをインストールするか、VNCなどのツールを使用するだけでよいため、これは些細な問題です。一方で、これまで、この種の機能をIoTデバイスに実装することは困難でした。

何ができるようになりますか?

2019/11/25にAWS IoT Device Managementの新機能であるセキュアトンネリングがローンチされました。これは、AWS IoTと直接統合して、どこからでもIoTデバイスにリモートアクセスできる安全なリモートアクセスソリューションを提供します。エンドポイントはIdentity and Access Management(IAM)で保護されており、通信はTransport Layer Security(TLS)で行われます。

どのように機能しますか?

まず、デバイス(Raspberry Pi)にプロキシアプリケーションをインストールします。これにより、セキュアトンネリングサービスへのセキュアなWebSocket接続が容易になります。認証トークンは、open-tunnel CLIコマンドが呼び出されたときに生成されます。これらのトークンは、デバイスで実行されているプロキシに渡されます。Thing Registryで管理されているデバイスを使用しているため、デバイストークンの配信は自分で管理できます。セキュアトンネリングサービスへの認証後、トークンはユーザーとデバイスの両方に配信されます。IoTデバイスは、トークンを受信するとプロキシを起動します。AWS Command Line Interface(CLI)を使用して、高レベルのデモンストレーションを行いましょう。始める前にCLIが設定されていることを確認する必要があります。

ターゲットデバイスでプロキシを開始する

Thing Registryにモノを登録したら、デバイスの秘密キーと証明書をデバイスにインストールします。このキーペアにより、デバイスは予約済みのMQTTトピック$aws/things/<thing-name>/tunneling/notifyをサブスクライブできます。セキュアトンネリングは、Raspberry Piへのトンネルを確立するために使用されるトークンをこのMQTTトピックに発行します。

デバイスがこのトークン情報を受信できるようになったので、AWS IoT Device SDKを使用してトンネリングプロキシを初期化できます。これを実現するために、トンネリングに関するMQTTトピックの通知をリッスンするようにIoT Device SDKを変更し、デバイスでトークンを受信したら、それを使用してプロキシを開始します。

json_message = json.loads(message.payload.decode('utf-8'))
if message.topic == "$aws/things/<thing-name>/tunneling/notify":
    subprocess.run([
        "./localproxy",
        "-t", json_message['clientAccessToken'],
        "-r", "us-east-1",
        "-d", "localhost:22"
   ])

ここでは、デモ用にホストとポートをハードコーディングしています(localhost:22)。実際には、open-tunnel CLIコマンドを介して渡されたserviceに基づいて、構成ファイルからホストとポートのマッピングを動的にロードすることができます。

ローカルマシンでプロキシを開始する

ターゲットデバイスがリッスンし、アクセスできる状態になったので、先ほどAWS認証情報を設定したローカルマシンに切り替える必要があります。CLIを使用してトンネルを開きます 。詳細についてはドキュメントを参照してください。

open-tunnel CLIコマンドは、プロキシを開始するためのsourceAccessTokenを返します。同時に、マネージドなトークンの配信を使用しているため、セキュアトンネリングは  destinationAccessTokenをデバイスの前述の特別なトピックに送信します。これにより、先ほど変更したIoT Device SDKのコードがプロキシを開始します。

プロキシが開始したら、デバイスにリモートアクセスする準備ができました!

アクセス!

今回は、デバイスへのSSHセッションを開きたいので、シェルを開き、標準のSSH接続コマンドを”-p”オプションを使用してプロキシポートを指定して実行します(ローカルマシンでソースプロキシを起動したときにこのポートを指定しました)。

ssh pi@localhost -p 8000

このように、ファイアウォールを越えてインターネット経由でデバイスに接続できました。実際には2つのファイアウォールです!

次は何をしたら良いですか?

セキュアトンネリングを使用すると、リモート操作とデバイスとのやりとりのいくつかのユースケースを実装できます。たとえば、フリートマネージャーとして、セキュアトンネリングをAWS IoTジョブまたはAWSフェデレーションIDと組み合わせることができます。ADFS、AWSシングルサインオン、Okta、Ping などのサービスを使用して、セキュアトンネリングを利用するユーザーの外部IDプロバイダーにAWSアカウントとのアクセスを統合できます。詳細については、開発者ガイドを参照してください。

マネージドのセキュアトンネリングソリューションが提供されることで、お客様がデバイスを管理およびトラブルシューティングするのがより容易になります。そして、新たなユースケースが増えることを楽しみにしています。

AWS IoT Device Managementのセキュアトンネリングは2019/11/25現在利用可能です。

 

原文はこちら
翻訳はソリューションアーキテクト 三平が担当しました。