Upgrade to Pro — share decks privately, control downloads, hide ads and more …

SORACOM Technology Camp 2020 - Day2 AWS IoT x SORACOM インテグレーション Deep Dive/technology-camp2020-day2-s04

SORACOM
November 18, 2020

SORACOM Technology Camp 2020 - Day2 AWS IoT x SORACOM インテグレーション Deep Dive/technology-camp2020-day2-s04

AWS IoTはIoTデバイスの管理や、送信されてくるデータをクラウド上で取り扱うための様々な機能を提供してくれており、SORACOMのお客様にも多数のユーザーがいらっしゃいます。今日、SORACOMとAWS IoTを接続するためのアプローチの選択肢は多数あります。

本セッションでは、皆様ご自身がアプリケーションの設計時に適切なインテグレーションを選択するためのガイドラインや考え方をお話しします。

アマゾン ウェブ サービス ジャパン株式会社
シニアエバンジェリスト 亀田 治伸 氏

株式会社ソラコム
ソリューションアーキテクト 小梁川 貴史

SORACOM

November 18, 2020
Tweet

More Decks by SORACOM

Other Decks in Technology

Transcript

  1. Who am I ? 亀田 治伸 (Harunobu Kameda) Facebook :

    facebook.com/harunobu.kameda/ Github : github.com/harunobukameda/ Sr. Developer Advocate Amazon Web Service Japan
  2. Device software AWS IoTのサービス Data services AWS IoT Greengrass Amazon

    FreeRTOS AWS IoT Device SDK AWS IoT Core AWS IoT Device Management AWS IoT Device Defender AWS IoT Things Graph AWS IoT Device Tester AWS IoT Analytics AWS IoT SiteWise AWS IoT Events 2 1 Control services
  3. アーキテクチャ例 AWS Cloud AWS IoT Core AWS IoT Device SDK

    AWS IoT Greengrass ホームGW Amazon QuickSight AWS IoT Analytics Amazon FreeRTOS AWS IoT Device Defender AWS IoT Device Management Client TV 照明 AWS Lambda Amazon Echo Lambda function AWS IoT Things Graph
  4. デバイス ゲートウェイ ルール エンジン メッセージ ブローカー デバイス シャドウ レジストリ 認証

    サービス AWS IoT Core AWS IoT Coreは、IoTデバイスを簡単かつ、安全にクラウドアプリケー ションや他のデバイスと通信できるようにするマネージドサービスです
  5. Identity Service SigV4 X.509 Custom Auth Tokens 証明書によるデバイスごとの認証 独自もしくは AWS

    IoT が発行する X.509証明書による認証が可能。他にも SigV4 やカスタム認証トークン、Cognito をサポート ポリシーによるデバイスごとの認可 デバイスごとに MQTT の Topic レベルで アクセスコントロールが可能
  6. AWS IoTポリシー { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action":["iot:Publish"]

    "Resource": ["arn:aws:iot:ap-northeast-1-1:123456789012:topic/foo/bar"] }, { "Effect": "Allow", "Action": ["iot:Connect"], "Resource": ["*"] }] } 証明書にアタッチ デバイスに対してAWS IoTのどのリソース(トピックなど)に対し、 どのような権限を与えるか、きめ細かい権限設定が可能
  7. 利用できるプロトコルと認証認可方法 MQTT MQTT over Websocket HTTPS Pub/Sub Pub/Sub Pub/Sub Pub

    Pub 通信方向 双方向 双方向 デバイス → クラウド デバイス → クラウド ポート 8883, 443 443 8443, 443 443 認証方法 x.509 証明書 カスタム認証 Cognito SigV4 カスタム認証 x.509 証明書 カスタム認証 Cognito SigV4 カスタム認証 権限管理 IoT ポリシー IoT ポリシー IAM ロール IoT ポリシー IoT ポリシー IAM ロール
  8. 証明書発行とデバイス登録方法一覧 1. AWS IoTによる秘密鍵・証明書発行&事前登録 (デバイスキッティング時登録) 2. AWS IoTによる証明書発行&事前登録 (デバイスキッティング時登録) 3.

    Fleet Provisioning登録 4. 独自CAによる証明書発行&AWS IoTへの事前登録 5. 独自CAによる証明書発行&JITRによる登録 6. 独自CAによる証明書発行&JITPによる登録 7. CA登録無しの証明書登録(マルチアカウント登録) 詳細については AWS IoT におけるデバイスへの認証情報のプロビジョニング で解説しています
  9. AWS IoT Core - デバイスゲートウェイ • MQTT、WebSocket、HTTP のプロト コルをサポート •

    TLS 1.2 を使用した安全な通信 • 大量なデバイスとの接続
  10. MQTT QoS QoS=0 At most once QoS=1 at least once

    PUBACK PUBLISH PUBLISH ベストエフォート型。 メッセージの到達を保証していない。 オーバーヘッドは少ない。 保証型。 メーッセージの到達は保証。 オーバーヘッドはQoS=0に比べて 大きい。
  11. ルールエンジン シンプル&慣れた構文でフィルタ SQL文を使って、トピックのフィルタや、 オプションの WHERE 句で JSON ペイ ロードに対する条件を記述することが可 能

    データ変換、拡張 組み込み関数による文字列操作、算術計 算、UUID や Timestamp、シャドウの コンテキストの付与が可能 ルーティング 10を超える AWS サービスや 3rd party のサービスにルーティング可能 Analytics Kinesis Artificial Intelligence EMR Messaging SQS SNS Database Redshift DynamoDB Manage CloudWatch SELECT * FROM ‘things/thing- 2/color’ WHERE color = ‘red’
  12. Thing Mobile / Console Shadow デバイスシャドウ デバイスの状態の取得と保存に使用する JSON ドキュメント 1.

    Thing は自身の状態を reported としてシャドウに登録 2. Mobile は Thing の状態をシャドウを参照することで取得 3. Mobile は Thing の状態の更新を desired としてシャドウに登録 4. Thing は自身の状態 (reported) と要求されている状態 (desired) の差分 (delta) の通知を受け取り、要求されている状態に自身を変更する。1 に 戻って、変更した状態を通知する { "state" : { “desired" : { “color" : “RED“, “engine“ : “ON“ }, "reported" : { “color" : ”BLUE“, “engine“ : “ON“ }, "delta" : { “color" : ”RED" } }, "version" : 10 } ① ② ③ ④
  13. バッチ処理での プロビジョニング リアルタイムでの インデックス化と検索 デバイスロギング とモニタリング Jobの実行 AWS IoT Device

    Management 数回のクリックで完 了する迅速なデバイ スの 導入と設定 デバイスログを収集 して問題をすばやく 特定して修正 全デバイスのステー タスと状態を可視化 グループに登録されて いるデバイスへジョブ を実行し管理する セキュアトンネリング ファイアーウォール越 しのデバイスにセキュ アに アクセス
  14. バッチ処理での プロビジョニング デバイス全体のメタデータ、証明書、 ポリシーなどデバイス情報を登録 コンソール経由でのアップロードもし くは、すべてのデバイスを登録するた めのStartThingRegistrationTask APIを 提供 プロビジョニングの進行状況のトラッ

    キング、完了したタスクのレポートの ダウンロードが可能 新しいデバイスのプロビジョニングや デバイスの再登録(例:証明書の ローテーション) 数回のクリックで、接続されている デバイスをまとめてすばやく導入
  15. セキュアトンネリング • セキュアトンネリングを用いることで、ファイアウォール内のIoTデバイスに対す るリモートアクセスが可能 • 出荷後のデバイスのトラブルシューティングが容易に 0. Localproxy アプリケー ションを

    install しておく (各 OS, HW に対応) 2. 専用トピックに publish される token を取得して local proxy を起動 1. トンネルを作成 3. Token を 利用して remote shell でアクセス 4. プロキシ経由でリ モートアクセス (Websocket)
  16. デバイス上で取得するメトリクス • TCP 接続の確立回数 • TCP ポートのリッスン回数 • リッスンする TCP

    ポート • UDP ポートのリッスン回数 • リッスンする UDP ポート • 入力バイト数 • 入力パケット数 • 出力バイト数 • 出力パケット数 • 送信先 IP クラウド側で取得するメトリクス • 認証エラー • 接続試行 • 切断 • メッセージサイズ • 受信したメッセージ • 送信されたメッセージ • 送信元 IP メトリクス
  17. デバイスやユースケースに対して潜在的 な問題に処置を講じる AWS IoT Device ManagementのJobを利 用して 権限の取り消し デバイスの再起動 工場出荷時に戻す

    セキュリティパッチの配信 Amazon SNSに利用してアクションを自 動化 セキュリティ問題を軽減 潜在的な問題を修正
  18. ࣗݾ঺հ גࣜձࣾιϥίϜ ιϦϡʔγϣϯΞʔΩςΫτ খྊ઒ و࢙ ͜΍ͳ͕Θ ͔ͨ͠  ܦྺ •

    4*ձࣾͰ։ൃΠϯϑϥઃܭɺߏஙͳͲ෯޿͘ܦݧ • ిػϝʔΧʔͰࣗࣾαʔϏεɺࣾ಺ڞ௨ϓϥοτϑΥʔϜͷ։ൃɺӡ༻ • ֎ࢿܥΫϥ΢υͷιϦϡʔγϣϯΞʔΩςΫτͱͯ͠ ύʔτφʔ୲౰ *P5εϖγϟϦετϓϩτλΠϐϯά
  19. ιϥίϜͰͷ"84*P5$PSF׆༻ύλʔϯ SORACOM Beam 403"$0. 'VOOFM ϓϩτίϧɺϙʔτɺ4%, ͳͲ"84 *P5ඪ४ػೳΛར ༻ՄೳɺDMJFOUଆͰͷ࣮૷ ͕ඞཁ

    MQTTS/HTTPS/ MQTT over Websocket MQTTS HTTPS/TCP/UDP σόΠε΁ͷ੍ޚํ޲΋ඞ ཁɺূ໌ॻ΍ηΩϡΞϓϩ τίϧ෦෼Λ#FBN΁Ҡ؅ σόΠε΁ͷ੍ޚ͸ෆཁͰ ͋Δ MQTT HTTPS
  20. 403"$0.#FBNͷ.255௨৴ beam.soracom.io Publish Publish Subscribe Publish Subscribe Subscribe AWS IoT

    Core message broker AWS IoT Coreの情報を登録 - AWS IoT Core endpoint - port番号 - 証明書
  21. 403"$0.#FBNͷ.255௨৴ beam.soracom.io Publish Publish Subscribe Publish Subscribe Subscribe AWS IoT

    Core message broker MQTT clientの接続先はSORACOM Beam設定 - beam.soracom.io (もしくはunified endpoint) - port番号:1883
  22. 403"$0.#FBNͷ.255௨৴ beam.soracom.io Publish Publish Subscribe Publish Subscribe Subscribe AWS IoT

    Core message broker MQTTメッセージが到達すると、Beamの設定に従っ てMQTTS-proxy接続でAWS IoT CoreへSORACOM Beamが転送する (mqtt clientはbeamへ設定した情報と依存関係を持 たない)
  23. 403"$0.#FBNͷ)5515$16%1ͷ௨৴ beam.soracom.io HTTP/TC/UDP HTTPS HTTP レスポンス プロトコルのレスポンス としてバックエンドの応答を受信 TCP/UDPでもrecvでbyteデータと して受信可能

    Cloud Backend HTTP Server API Serviese MQTTと同様で、client 側はBeamへのアクセスでバックエンドの HTTPSレスポンスを受信することができる。デバイスに http client が 無いようなものでもクラウドサービスや自社HTTPバックエンドに接続可能
  24. "84*P5$PSFΛબ୒͠ͳ͍έʔε΋͋Δ • ैྔ՝ۚ ௿ස౓ͷ௨৴ɺϦΞϧλΠϜੑ͕ ௿ͯ͘ྑ͍ϢʔεέʔεͰ͸ɺ .255ͷLFFQBMJWFύέοτ͕ෆ རʹͳΔ͜ͱ΋͋Δ • όοςϦʔۦಈ ৗઃͷిݯ͕औΕͳ͍Ϣʔεέʔ

    εͷ͓٬༷Ͱ͸όοςϦʔण໋ͷ Ԇ௕͕࠷༏ઌͱͳΔͷͰɺ௨৴ͷ ճ਺ΛݮΒ͢͜ͱͰόοςϦʔෛ ՙΛ΁Β͢ σόΠε੍ޚͷϦΞϧλΠϜੑ͕ٻΊΒΕͳ͍ʢχʔζσόΠε εϖοΫͳͲʣ৔߹ɺ.255ϕʔεͷ૒ํ޲௨৴Λબ୒͢ΔͷͰ͸ͳ͘ɺ ੍ݶࣄ߲Λݩʹϓϩτίϧ΍࣮ݱํࣜΛߟ͑ΒΕΔ͓٬༷΋ଟ͍͘·͢ɻ
  25. 403"$0.#FBNΛ࢖ͬͨূ໌ॻӡ༻ セキュア&クラウドネイティブな プロトコル SORACOM Beam プリミティブな プロトコル MQTT MQTTS AWS

    IoT 証明書 SORACOM Beam がAWS IoTのエンドポイント へ接続 SORACOM Beam 証明書の発行処理、 SORACOMへ設定(APIでも 可能) AWS IoT
  26. 403"$0.#FBNΛ࢖ͬͨূ໌ॻӡ༻ セキュア&クラウドネイティブな プロトコル SORACOM Beam プリミティブな プロトコル MQTT MQTTS AWS

    IoT 証明書 SORACOM Beam がAWS IoTのエンドポイント へ接続 SORACOM Beam 証明書の発行処理、 SORACOMへ設定(APIでも 可能) AWS IoT σόΠε͝ͱʹূ໌ॻ QPMJDZఆٛͷҟͳΔ Λར༻ ͍ͨ͠৔߹ NVMUJDSFEFOUJBMTQFSHSPVQ ͱ͍͏ ػೳ΋͋Γ·͢ɻ
  27. 403"$0.,SZQUPO "84*P5 $PSFͷূ໌ॻൃߦػೳΛ୅ߦ͢Δػೳ SORACOM Krypton 1. SIMで認証 2. デバイス登録処理代行 デバイス

    4. 直接MQTTS接続 3. 鍵・接続情報 AWS IoT AWS IoT Coreでは証明発行機能を持つ共通証明書によるブートストラップ処理とほぼ同等。一方で Kryptonを使った場合は共通証明書の代わりにSIMによる認証を使うことでデバイスごとの異なる証明書 を利用しているのと同義。SIMベースでのJust in Time registrationとも言える。
  28. ؔ࿈͢Δηογϣϯ • %BZ • σόΠεɺΫϥ΢υͷ૒ํ޲௨৴ σβΠϯύλʔϯͱ࣮ફ • %FFQ%JWFແઢςΫϊϩδʔͱ ௨৴ϓϩτίϧͱলిྗੑೳ •

    %BZ • 403"$0.͕࣮ݱ͢Δ*P5σόΠεͱ σʔλͷηΩϡϦςΟ • 403"$0.4*.*OTJEF "84༷ "84*P5$PSF#MBDL#FMU ։࠵