翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
クライアントデバイスを使用した AWS IoT Greengrass のセットアップとトラブルシューティング
作成者: Marouane Sefiani と Akalanka De Silva (AWS)
環境:PoC またはパイロット | テクノロジー: IoT | AWS サービス: AWS IoT Greengrass、AWSIoT Core |
[概要]
AWS IoT Greengrass は、エッジデバイスでモノのインターネット (IoT ) ソフトウェアを構築、デプロイ、管理するためのオープンソースのエッジランタイムおよびクラウドサービスです。AWS IoT Greengrass のユースケースは次のとおりです。
AWS IoT Greengrass ゲートウェイがホームオートメーションのハブとして使用されるスマートホーム
AWS IoT Greengrass が作業現場からのデータの取り込みとローカル処理を容易にできるスマートファクトリー
AWS IoT Greengrass は、他のエッジデバイス (クライアントデバイス とも呼ばれます) の安全で認証されたMQTT接続エンドポイントとして機能します。それ以外の場合は、通常は AWS IoT Core に直接接続されます。この機能は、クライアントデバイスに AWS IoT Core エンドポイントへの直接ネットワークアクセスがない場合に役立ちます。
次のユースケースでは、クライアントデバイスで使用する AWS IoT Greengrass を設定できます。
クライアントデバイスが AWS IoT Greengrass にデータを送信する場合
AWS IoT Greengrass が AWS IoT Core にデータを転送するには
高度な AWS IoT Core ルールエンジン機能を活用するには
これらの機能を使用するには、AWSIoT Greengrass デバイスに以下のコンポーネントをインストールして設定する必要があります。
MQTT ブローカー
MQTT ブリッジ
クライアントデバイス認証
IP ディテクター
さらに、クライアントデバイスから発行されるメッセージは、 JSON 形式または Protocol Buffers (protobuf)
このパターンでは、これらの必要なコンポーネントをインストールして設定する方法を説明し、トラブルシューティングのヒントやベストプラクティスを提供します。
前提条件と制限
前提条件
アクティブなAWSアカウント
Python 3.7 以降を実行する 2 台のクライアントデバイス
Java Runtime Environment (JRE) バージョン 8 以降、および Amazon Corretto 11
または OpenJDK 11 を実行する 1 つのコアデバイス
制約事項
AWS IoT Core が利用可能なAWSリージョンを選択する必要があります。AWS IoT Core のリージョンの現在のリストについては、AWS「リージョン別のサービス
」を参照してください。 コアデバイスには、少なくとも 172 MB RAMと 512 MB のディスク容量が必要です。
アーキテクチャ
このパターンのソリューションアーキテクチャを次の図に示します。
アーキテクチャには以下が含まれます。
2 つのクライアントデバイス 各デバイスには、プライベートキー、デバイス証明書、ルート認証局 (CA) 証明書が含まれます。MQTT クライアントSDKを含む AWS IoT Device は、各クライアントデバイスにもインストールされます。
IoT AWS IoT Greengrass が以下のコンポーネントでデプロイされているコアデバイス。
MQTT ブローカー
MQTT ブリッジ
クライアントデバイス認証
IP ディテクター
このアーキテクチャは、以下のシナリオをサポートします。
クライアントデバイスは、MQTTクライアントを使用して、コアデバイスのMQTTブローカーを介して相互に通信できます。
クライアントデバイスは、コアデバイスのMQTTブローカーとブリッジを介してクラウド内の AWS IoT Core MQTT と通信することもできます。
AWS クラウドの IoT Core は、MQTTテストクライアントとコアデバイスのMQTTブリッジとMQTTブローカーを介してクライアントデバイスにメッセージを送信できます。
クライアントデバイスとコアデバイス間の通信の詳細については、「追加情報」 セクションを参照してください。
ツール
AWS サービス
AWS IoT Greengrass は、オープンソースのモノのインターネット (IoT ) エッジランタイムとクラウドサービスであり、デバイス上の IoT アプリケーションの構築、デプロイ、管理に役立ちます。
AWS IoT Core は、インターネット接続されたデバイスが AWS クラウドに接続するための安全な双方向通信を提供します。
AWS IoT Device SDK
は、オープンソースライブラリ、サンプルを含むデベロッパーガイド、移植ガイドを含むソフトウェア開発キットで、選択したハードウェアプラットフォームで革新的な IoT 製品またはソリューションを構築できます。 AWS Identity and Access Management (IAM) は、誰が認証され、誰に使用を許可されているかを制御することで、AWSリソースへのアクセスを安全に管理できます。
ベストプラクティス
クライアントデバイスからのメッセージのペイロードは、変換や条件付きアクションなどの AWS IoT Core ルールエンジンの高度な機能を利用するために、 JSONまたは Protobuf 形式である必要があります。
双方向通信を許可するようにMQTTブリッジを設定します。
AWS IoT Greengrass で IP ディテクターコンポーネントを設定してデプロイし、コアデバイスの IP アドレスがMQTTブローカー証明書のサブジェクト代替名 (SAN) フィールドに含まれていることを確認します。
エピック
タスク | 説明 | 必要なスキル |
---|---|---|
コアデバイスに AWS IoT Greengrass をセットアップします。 | デベロッパーガイドの手順に従って AWS IoT Greengrass Core ソフトウェアをインストールします。 | AWS IoT Greengrass |
インストールの状態を確認します。 | 次のコマンドを使用して、コアデバイスの AWS IoT Greengrass サービスのステータスを確認します。
コマンドの期待される出力は次のようになります。
| 全般 AWS |
IAM ポリシーを設定し、Greengrass サービスロールにアタッチします。 |
| 全般 AWS |
AWS IoT Greengrass コアデバイスに必要なコンポーネントを設定してデプロイします。 | 次のコンポネントを設定、デプロイします。 | AWS IoT Greengrass |
MQTT ブリッジが双方向通信を許可していることを確認します。 | クライアントデバイスと AWS IoT Core MQTT 間でMQTTメッセージを中継するには、ブリッジコンポーネントを設定してデプロイし、中継するトピックを指定します。例を示します。
| AWS IoT Greengrass |
認証コンポーネントがクライアントデバイスに接続してトピックをパブリッシュまたはサブスクライブできることを確認します。 | 次の
| AWS IoT Greengrass |
タスク | 説明 | 必要なスキル |
---|---|---|
AWS IoT デバイス をインストールしますSDK。 | AWS IoT デバイスをSDKクライアントデバイスにインストールします。サポートされている言語と関連付けられた の完全なリストについてはSDKs、AWSIoT Core ドキュメント を参照してください。 例えば、AWSIoT Device SDK for Python SDKは にあります GitHub
または、ソースリポジトリSDKから をインストールすることもできます。
| 一般的な AWS IoT |
モノの作成 |
| AWS IoT Core |
CA 証明書を Greengrass コアデバイスからダウンロードします。 | Greengrass コアデバイスがオフライン環境で動作することが予想される場合は、MQTTブローカーの証明書 (Greengrass コア CA によって発行される) を検証できるように、Greengrass コア CA 証明書をクライアントデバイスで使用できるようにする必要があります。そのため、この証明書のコピーを入手することが重要です。CA 証明書をダウンロードするには、次のいずれかの方法を使用します。
| 全般 AWS |
認証情報をクライアントデバイスにコピーします。 | Greengrass コア CA 証明書、デバイス証明書、および秘密鍵をクライアントデバイスにコピーします。 | 全般 AWS |
クライアントデバイスをコアデバイスと関連付けます。 | クライアントデバイスをコアデバイスに関連付けて、コアデバイスを検出できるようにします。その後、クライアントデバイスは Greengrass 検出APIを使用して、関連するコアデバイスの接続情報と証明書を取得できます。詳細については、AWSIoT Greengrass ドキュメントの「クライアントデバイスを関連付ける」を参照してください。
関連付けたクライアントデバイスは、Greengrass 検出を使用してこのコアデバイスAPIを検出できるようになりました。 | AWS IoT Greengrass |
タスク | 説明 | 必要なスキル |
---|---|---|
あるクライアントデバイスから別のクライアントデバイスにデータを送信する。 | デバイスのMQTTクライアントを使用して、 | 全般 AWS |
クライアントデバイスから AWS IoT Core にデータを送信します。 | デバイスのMQTTクライアントを使用して、 MQTT テストクライアントで、デバイスがメッセージを送信するトピックをサブスクライブするか、すべてのトピックの # をサブスクライブします (詳細については「」を参照)。 | 全般 AWS |
AWS IoT Core からクライアントデバイスにメッセージを送信します。 | MQTT テストクライアントページで、トピックへの発行タブのトピック名フィールドに、メッセージのトピック名を入力します。この例では、 | 全般 AWS |
トラブルシューティング
問題 | ソリューション |
---|---|
サーバー証明書エラーを確認できません。 | このエラーは、MQTTクライアントがTLSハンドシェイク中にMQTTブローカーによって提示された証明書を検証できない場合に発生します。最も一般的な理由は、MQTTクライアントに CA 証明書がないことです。CA 証明書がMQTTクライアントに提供されることを確認するには、次の手順に従います。
|
サーバー名を確認できませんというエラーです。 | このエラーは、MQTTクライアントが正しいサーバーに接続していることを検証できない場合に発生します。最も一般的な理由は、Greengrass デバイスの IP アドレスが証明書の SANフィールドにリストされていないことです。 前のソリューションの指示に従ってMQTTブローカー証明書を取得し、追加情報セクションで説明されているように、 SAN フィールドに AWS IoT Greengrass デバイスの IP アドレスが含まれていることを確認します。そうでない場合は、IP ディテクターコンポーネントが正しくインストールされていることを確認し、コアデバイスを再起動します。 |
組み込みクライアントデバイスから接続する場合のみサーバー名を確認できない | 埋め込みデバイスで使用される一般的なTLSライブラリTLSである Mbed は現在、Mbed TLSライブラリコードに示すように、証明書の SAN フィールドでのみDNS名前の検証をサポートしています。コアデバイスには独自のドメイン名がなく、IP アドレスに依存するため、Mbed を使用するTLSクライアントTLSはTLSハンドシェイク中にサーバー名の検証に失敗し、接続に失敗します。x509_crt_check_san 関数 |
関連リソース
追加情報
このセクションでは、クライアントデバイスとコアデバイスの間の通信に関する追加情報を提供します。
MQTT ブローカーは、TLSクライアント接続の試行のためにコアデバイスのポート 8883 をリッスンします。次の図は、MQTTブローカーのサーバー証明書の例を示しています。
サンプル証明書には以下の詳細が表示されます。
証明書は、ローカルでコアデバイスに固有の AWS IoT Greengrass Core CA によって発行されます。つまり、ローカル CA として機能します。
この証明書は、次の図に示す、クライアントの認証コンポーネントによって毎週自動的にローテーションされます。この間隔は、クライアント認証コンポーネントの設定で設定できます。
サブジェクトの代替名 (SAN) は、TLSクライアント側のサーバー名の検証で重要な役割を果たします。これにより、TLSクライアントが正しいサーバーに接続し、TLSセッション設定中の man-in-the- 中間攻撃を回避できます。証明書の例では、 SANフィールドは、このサーバーが localhost (ローカル Unix ドメインソケット) をリッスンしており、ネットワークインターフェイスの IP アドレスが 192.168.1.12 であることを示します。
TLS クライアントは、証明書の SANフィールドを使用して、サーバーの検証中に正当なサーバーに接続していることを確認します。対照的に、HTTPサーバーとブラウザ間の一般的なTLSハンドシェイクでは、共通名 (CN) フィールドまたは SANフィールドのドメイン名を使用して、サーバー検証プロセス中にブラウザが実際に接続しているドメインをクロスチェックします。コアデバイスにドメイン名がない場合、 SANフィールドに含まれる IP アドレスは同じ目的を果たします。詳細については、RFC「5280 – Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile」の「Subject Alternative Name」セクション
AWS IoT Greengrass の Th IP ディテクターコンポーネントは、証明書の SANフィールドに正しい IP アドレスが含まれていることを確認します。
この例の証明書は、ローカル CA として機能する AWS IoT Greengrass デバイスによって署名されています。TLS クライアント (MQTT クライアント) はこの CA を認識していないため、次のような CA 証明書を提供する必要があります。