デバイス通信プロトコル
AWS IoT Core は、MQTT および MQTT over WebSocket Secure (WSS) プロトコルを使用してメッセージを発行およびサブスクライブするデバイスとクライアント、および HTTPS プロトコルを使用してメッセージを発行するデバイスとクライアントをサポートします。すべてのプロトコルでは、IPv4 および IPv6 がサポートされています。このセクションでは、デバイスおよびクライアントのさまざまな接続オプションについて説明します。
TLS プロトコルバージョン
AWS IoT Core は、TLS
AWS IoTDevice SDKs は、MQTT および MQTT over WSS をサポートし、クライアント接続のセキュリティ要件をサポートします。AWS IoTDevice SDKs を使用してクライアントを AWS IoT に接続することをお勧めします。
プロトコル、ポートマッピング、認証
デバイスまたはクライアントがメッセージブローカーに接続する方法は、[認証タイプ] を使用して設定できます。デフォルトでは、または SNI 拡張機能が送信されない場合、認証方法は、デバイスが使用するアプリケーションプロトコル、ポート、および Application Layer Protocol Negotiation (ALPN) TLS 拡張機能に基づいています。次の表に、ポート、ポート、ALPN に基づいて予想される認証を示します。
プロトコル | サポートされているオペレーション | 認証 | ポート | ALPN プロトコル名 |
---|---|---|---|---|
MQTT over WebSocket |
発行、サブスクライブ | 署名バージョン 4 | 443 |
該当なし |
MQTT over WebSocket |
発行、サブスクライブ | カスタム認証 | 443 |
該当なし |
MQTT |
発行、サブスクライブ |
X.509 クライアント証明書 |
443† |
|
MQTT | 発行、サブスクライブ | X.509 クライアント証明書 | 8883 | 該当なし |
MQTT |
発行、サブスクライブ |
カスタム認証 |
443† |
|
HTTPS |
発行のみ |
署名バージョン 4 |
443 |
該当なし |
HTTPS |
発行のみ |
X.509 クライアント証明書 |
443† |
|
HTTPS | 発行のみ | X.509 クライアント証明書 | 8443 | 該当なし |
HTTPS | 発行のみ | カスタム認証 | 443 | 該当なし |
Application Layer Protocol Negotiation (ALPN)
† デフォルトのエンドポイント設定を使用するとき、ポート 443 で X.509 クライアント証明書認証を使用して接続するクライアントは、Application Layer Protocol Negotiation (ALPN)ClientHello
メッセージの一部としてクライアントから送信された ALPN ProtocolNameList にリストされている ALPN プロトコル名
ポート 443 では、IoT:Data-ATS エンドポイントは ALPN x-amzn-http-ca HTTP をサポートしますが、IoT:Jobs エンドポイントはサポートしません。
ALPN x-amzn-mqtt-ca を使用するポート 8443 HTTPS およびポート 443 MQTT では、カスタム認証を使用できません。
クライアントは、AWS アカウント のデバイスエンドポイントに接続します。アカウントのデバイスエンドポイントを見つける方法については、AWS IoT デバイスデータとサービスエンドポイント を参照してください。
注記
AWS SDK に完全な URL は必要ありません。必要となるのは、GitHub にある AWS IoT Device SDK for Python の pubsub.py
サンプル
プロトコル |
エンドポイントまたは URL |
---|---|
MQTT |
|
MQTT over WSS |
|
HTTPS |
|
デバイス通信用のアプリケーションプロトコルの選択
デバイスエンドポイントを介したほとんどの IoT デバイス通信では、Secure MQTT または MQTT over WebSocket Secure (WSS) プロトコルを使用することができます。ただし、デバイスエンドポイントは HTTPS もサポートします。
次の表は、AWS IoT Core が 2 つの高レベルなプロトコル (MQTT と HTTPS) をどのようにデバイス通信に使用するかを比較したものです。
機能 |
||
---|---|---|
発行/サブスクライブのサポート |
発行とサブスクライブ |
発行のみ |
SDK サポート |
AWS Device SDK は MQTT および WSS プロトコルをサポートします |
SDK のサポートはありませんが、言語固有のメソッドを使用して HTTPS リクエストを行うことができます |
サービス品質のサポート |
QoS は、クエリ文字列パラメータを渡すことによってサポートされ、?qos=qos ここで、値は0または1にすることができます。このクエリ文字列を追加して、必要な QoS 値を持つメッセージが発行できます。 |
|
デバイスがオフラインのときに受信しなかったメッセージを受信できる | はい | いいえ |
|
はい |
いいえ |
デバイスの切断検出 |
はい |
いいえ |
安全な通信 |
はい。「プロトコル、ポートマッピング、認証」を参照してください。 |
はい。「プロトコル、ポートマッピング、認証」を参照してください。 |
トピックの定義 |
定義されているアプリケーション |
定義されているアプリケーション |
メッセージデータ形式 |
定義されているアプリケーション |
定義されているアプリケーション |
プロトコルのオーバーヘッド | Lower | より高い |
消費電力 | Lower | より高い |
デバイス通信の認証タイプの選択
設定可能なエンドポイントを使用して、IoT エンドポイントの認証タイプを設定できます。または、デフォルト設定を使用して、デバイスがアプリケーションプロトコル、ポート、ALPN TLS 拡張機能の組み合わせで認証する方法を決定します。選択した認証タイプによって、AWS IoT Core への接続時にデバイスが認証する方法が決まります。5 つの認証タイプがあります。
X.509 証明書
X.509 クライアント証明書を使用してデバイスを認証します。この証明書は、AWS IoT Core がデバイスを認証することを検証します。この認証タイプは、Secure MQTT (MQTT over TLS) および HTTPS プロトコルで機能します。
カスタムオーソライザーを使用した X.509 証明書
X.509 クライアント証明書を使用してデバイスを認証し、X.509 クライアント証明書情報を受信するカスタムオーソライザーを使用して追加の認証アクションを実行します。この認証タイプは、Secure MQTT (MQTT over TLS) および HTTPS プロトコルで機能します。この認証タイプは、X.509 カスタム認証で設定可能なエンドポイントでのみ使用できます。ALPN オプションはありません。
AWS Signature Version 4 (SigV4)
Cognito またはバックエンドサービスを使用してデバイスを認証し、ソーシャルフェデレーションとエンタープライズフェデレーションをサポートします。この認証タイプは、MQTT over WebSocket Secure (WSS) および HTTPS プロトコルで機能します。
カスタムオーソライザー
Lambda 関数を設定してデバイスを認証し、AWS IoT Core に送信されるカスタム認証情報を処理します。この認証タイプは、Secure MQTT (MQTT over TLS)、HTTPS、および MQTT over WebSocket Secure (WSS) プロトコルで機能します。
デフォルト
デバイスが使用するポートおよび/または Application Layer Protocol Negotiation (ALPN) 拡張機能に基づいてデバイスを認証します。一部の追加の認証オプションはサポートされていません。詳細については、「プロトコル、ポートマッピング、認証」を参照してください。
以下の表は、サポートされている認証タイプとアプリケーションプロトコルのすべての組み合わせを示しています。
[Authentication type] (認証タイプ) | Secure MQTT (MQTT over TLS) | MQTT over WebSocket Secure (WSS) | HTTPS | デフォルト |
---|---|---|---|---|
X.509 証明書 | ✓ | ✓ | ||
カスタムオーソライザーを使用した X.509 証明書 | ✓ | ✓ | ||
AWS Signature Version 4 (SigV4) | ✓ | ✓ | ||
カスタムオーソライザー | ✓ | ✓ | ✓ | |
デフォルト | ✓ | ✓ |
接続時間の制限
HTTPS 接続では、リクエストの受信と応答にかかるよりも長い持続時間が保証されていません。
MQTT 接続時間は、使用する認証機能によって異なります。次の表では、各機能の最適な条件下での最大接続時間が一覧表示されています。
機能 |
最大時間 * |
---|---|
X.509 クライアント証明書 |
1~2 週間 |
カスタム認証 |
1~2 週間 |
署名バージョン 4 |
最長 24 時間 |
* 保証なし
X.509 証明書やカスタム認証では、接続時間に厳しい制限はありません。数分程度に短縮することも可能です。接続の中断は、さまざまな理由で発生します。次のリストには、最も一般的な理由の一部が含まれています。
-
Wi-Fi 可用性の中断
-
インターネットサービスプロバイダー (ISP) 接続の中断
-
サービスのパッチ
-
サービスのデプロイ
-
サービスのオートスケーリング
-
使用できないサービスホスト
-
ロードバランサーの問題および更新
-
クライアント側エラー
デバイスで、切断を検出して再接続するための戦略を実装する必要があります。接続解除イベントとその処理方法に関するガイダンスについては、ライフサイクルイベントの接続/切断イベントを参照してください。