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>/tunnels/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>/tunnels/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現在利用可能です。
原文はこちら。
翻訳はソリューションアーキテクト 三平が担当しました。