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

7cd783377515bdf8207062840b7b2f4e?s=47 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を接続するためのアプローチの選択肢は多数あります。

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

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

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

7cd783377515bdf8207062840b7b2f4e?s=128

SORACOM

November 18, 2020
Tweet

Transcript

  1. "84*P5Y403"$0. ΠϯςάϨʔγϣϯ %FFQ%JWF "NB[PO8FC4FSWJDFT ɿُా 403"$0.ɿখྊ઒ 

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

    facebook.com/harunobu.kameda/ Github : github.com/harunobukameda/ Sr. Developer Advocate Amazon Web Service Japan
  3. Control services AWS IoTのサービスレイヤー デバイスを制御、管理、保護する方法は? Device software Data services

  4. 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
  5. アーキテクチャ例 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
  6. デバイス ゲートウェイ ルール エンジン メッセージ ブローカー デバイス シャドウ レジストリ 認証

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

    IoT が発行する X.509証明書による認証が可能。他にも SigV4 やカスタム認証トークン、Cognito をサポート ポリシーによるデバイスごとの認可 デバイスごとに MQTT の Topic レベルで アクセスコントロールが可能
  8. Thing Thing レジストリ • デバイス レジストリとも言われる • 個々のデバイスで構成される組織化されたリソース • 個々のデバイスは3つまでの関連づけされたカスタム属性を登録

    可能 • 証明書やMQTTクライアントIDとの関連付けも可能で、管理や トラブルシュートで利用できる 7
  9. 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のどのリソース(トピックなど)に対し、 どのような権限を与えるか、きめ細かい権限設定が可能
  10. 利用できるプロトコルと認証認可方法 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 ロール
  11. 認証情報の安全な管理 認証情報をセキュア領域に保存する 認証情報の保存および認証操作に、 • Trusted Platform Module • Hardware Security

    Module などのハードウェア保護モジュールを使用する
  12. 証明書発行とデバイス登録方法一覧 1. AWS IoTによる秘密鍵・証明書発行&事前登録 (デバイスキッティング時登録) 2. AWS IoTによる証明書発行&事前登録 (デバイスキッティング時登録) 3.

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

    TLS 1.2 を使用した安全な通信 • 大量なデバイスとの接続
  14. MQTT Publish/ Subscribe Publisher Publisher Publisher Broker Topic: sensor/temp Subscriber

    Subscriber Subscriber
  15. MQTTトピック – ワイルドカード “ #” sensor/# sensor配下すべての トピックをsubscribe sensor/water/room1 temp

    water door temp water door
  16. MQTTトピック – ワイルドカード “ +” sensor/+/room1 room1のトピックを subscribe sensor/water/room1 temp

    water door temp water
  17. MQTT QoS QoS=0 At most once QoS=1 at least once

    PUBACK PUBLISH PUBLISH ベストエフォート型。 メッセージの到達を保証していない。 オーバーヘッドは少ない。 保証型。 メーッセージの到達は保証。 オーバーヘッドはQoS=0に比べて 大きい。
  18. ルールエンジン シンプル&慣れた構文でフィルタ 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’
  19. ルールエンジン 対応リソース

  20. 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 } ① ② ③ ④
  21. バッチ処理での プロビジョニング リアルタイムでの インデックス化と検索 デバイスロギング とモニタリング Jobの実行 AWS IoT Device

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

    キング、完了したタスクのレポートの ダウンロードが可能 新しいデバイスのプロビジョニングや デバイスの再登録(例:証明書の ローテーション) 数回のクリックで、接続されている デバイスをまとめてすばやく導入
  23. Jobs 実行したジョブの各デバイスのステータ スを受信し、可視化します グループもしくは特定の1デバイスのみ に対して実行可能 展開速度を制御し、障害基準を設定する ことによって、不具合の範囲を最小限に 留めることも可能 ジョブに署名をすることで、不正なジョ ブの実行を防ぎます

    グループに登録されているデバ イスへジョブを実行し管理する
  24. Jobsの種類 Continuous Snapshot Jobモデル • Snapshot: Jobを作成したタイミングに存在するthing が対象で一度作るとJob通知の対象は変更さ れない •

    Continuous: Jobを作成した後も配信対象となるGroup にthingが追加されると通知が行われる。
  25. セキュアトンネリング マネージメントコンソールやAPIでトンネル を開/閉 個々のデバイスにリモートデスクトップや シェルでアクセスし操作 各トンネルのアクセス権をIAMで管理し、 最大12時間のタイムアウトを設定 各デバイスはMQTTメッセージ経由でアク セストークンを受信 ファイアーウォール越しのデバイス

    にセキュアにアクセス
  26. セキュアトンネリング • セキュアトンネリングを用いることで、ファイアウォール内のIoTデバイスに対す るリモートアクセスが可能 • 出荷後のデバイスのトラブルシューティングが容易に 0. Localproxy アプリケー ションを

    install しておく (各 OS, HW に対応) 2. 専用トピックに publish される token を取得して local proxy を起動 1. トンネルを作成 3. Token を 利用して remote shell でアクセス 4. プロキシ経由でリ モートアクセス (Websocket)
  27. 監査 アラート 修正 検出 IoT設定が安全で あることを検証 デバイス動作の 異常を検出 いつ、何が起きたか 知る

    潜在的な問題を 修正 AWS IoT Device Defender
  28. アカウント内のすべてのデバイスまたは類 似した動作特性を持つデバイスのグループ に対してセキュリティプロファイルを作成 接続済デバイスとAWS IoT Coreのセキュリ ティプロファイルからセキュリティメトリ クスおよびデータに対するルールベースの 動作を定義 異常の検出

    デバイス動作の異常を検出
  29. デバイス上で取得するメトリクス • TCP 接続の確立回数 • TCP ポートのリッスン回数 • リッスンする TCP

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

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

    4*ձࣾͰ։ൃΠϯϑϥઃܭɺߏஙͳͲ෯޿͘ܦݧ • ిػϝʔΧʔͰࣗࣾαʔϏεɺࣾ಺ڞ௨ϓϥοτϑΥʔϜͷ։ൃɺӡ༻ • ֎ࢿܥΫϥ΢υͷιϦϡʔγϣϯΞʔΩςΫτͱͯ͠ ύʔτφʔ୲౰ *P5εϖγϟϦετϓϩτλΠϐϯά
  32. ιϥίϜʹ͓͚Δ"84*P5$PSFͷ࢖͍ॴ

  33. ιϥίϜͰͷ"84*P5׆༻ύλʔϯ • ར༻ϓϩτίϧɿ.2554 • 4*.௨৴ͷΈΛར༻ • 403"$0.#FBNΛ࢖ͬͨ૒ํ޲௨৴ • ར༻ϓϩτίϧ)5514 •

    403"$0.'VOOFMΛ࢖ͬͨσʔλૹ৴
  34. ιϥίϜͰͷ"84*P5$PSF׆༻ύλʔϯ SORACOM Beam 403"$0. 'VOOFM ϓϩτίϧɺϙʔτɺ4%, ͳͲ"84 *P5ඪ४ػೳΛར ༻ՄೳɺDMJFOUଆͰͷ࣮૷ ͕ඞཁ

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

    Core message broker
  36. 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番号 - 証明書
  37. 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
  38. 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へ設定した情報と依存関係を持 たない)
  39. 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バックエンドに接続可能
  40. "84*P5$PSFΛબ୒͠ͳ͍έʔε΋͋Δ • ैྔ՝ۚ ௿ස౓ͷ௨৴ɺϦΞϧλΠϜੑ͕ ௿ͯ͘ྑ͍ϢʔεέʔεͰ͸ɺ .255ͷLFFQBMJWFύέοτ͕ෆ རʹͳΔ͜ͱ΋͋Δ • όοςϦʔۦಈ ৗઃͷిݯ͕औΕͳ͍Ϣʔεέʔ

    εͷ͓٬༷Ͱ͸όοςϦʔण໋ͷ Ԇ௕͕࠷༏ઌͱͳΔͷͰɺ௨৴ͷ ճ਺ΛݮΒ͢͜ͱͰόοςϦʔෛ ՙΛ΁Β͢
  41. "84*P5$PSFΛબ୒͠ͳ͍έʔε΋͋Δ • ैྔ՝ۚ ௿ස౓ͷ௨৴ɺϦΞϧλΠϜੑ͕ ௿ͯ͘ྑ͍ϢʔεέʔεͰ͸ɺ .255ͷLFFQBMJWFύέοτ͕ෆ རʹͳΔ͜ͱ΋͋Δ • όοςϦʔۦಈ ৗઃͷిݯ͕औΕͳ͍Ϣʔεέʔ

    εͷ͓٬༷Ͱ͸όοςϦʔण໋ͷ Ԇ௕͕࠷༏ઌͱͳΔͷͰɺ௨৴ͷ ճ਺ΛݮΒ͢͜ͱͰόοςϦʔෛ ՙΛ΁Β͢ σόΠε੍ޚͷϦΞϧλΠϜੑ͕ٻΊΒΕͳ͍ʢχʔζσόΠε εϖοΫͳͲʣ৔߹ɺ.255ϕʔεͷ૒ํ޲௨৴Λબ୒͢ΔͷͰ͸ͳ͘ɺ ੍ݶࣄ߲Λݩʹϓϩτίϧ΍࣮ݱํࣜΛߟ͑ΒΕΔ͓٬༷΋ଟ͍͘·͢ɻ
  42. ηΩϡϦςΟ؍఺Ͱͷ"84*P5ͱͷ઀ଓ

  43. "84*P5ೝূػߏͱιϥίϜ SIMごとに認証、暗号化キー提供 SIMごとにユニークIDが使える モバイル通信で認証と無線の暗号化を担保

  44. 403"$0.#FBNΛ࢖ͬͨূ໌ॻӡ༻ セキュア&クラウドネイティブな プロトコル SORACOM Beam プリミティブな プロトコル MQTT MQTTS AWS

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

    IoT 証明書 SORACOM Beam がAWS IoTのエンドポイント へ接続 SORACOM Beam 証明書の発行処理、 SORACOMへ設定(APIでも 可能) AWS IoT σόΠε͝ͱʹূ໌ॻ QPMJDZఆٛͷҟͳΔ Λར༻ ͍ͨ͠৔߹ NVMUJDSFEFOUJBMTQFSHSPVQ ͱ͍͏ ػೳ΋͋Γ·͢ɻ
  46. 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とも言える。
  47. ҰํͰ4*.͸෺ཧ 4*.ͷൈ͖ग़͠౪೉ʹΑΔରࡦͱͯ͠ɺ*.&*ϩοΫ *.&* ௨৴Ϟδϡʔϧ͕࣋ͭҰҙͷ*%৘ใͱ4*.ͷ *.4*͕Ұகͯ͠ͳ͍ͱ௨৴ΛڐՄ͠ͳ͍ઃఆ 5IJOHT *OUFSOBUJPOBM.PCJMF&RVJQNFOU*EFOUJGJFSɿࠃࡍҠಈମ૷ஔࣝผ൪߸ International Mobile Subscriber

    Identity:SIMカードに発行される加入者情報
  48. ·ͱΊ "84*P5͸αʔόϨεɺϚωʔδυͰ؆୯ʹ*P5Λ࢝ΊΒ ΕΔΫϥ΢υαʔϏεɻϧʔϧΤϯδϯ΍γϟυ΢Λ׆༻͢ Δ͜ͱͰαʔϏε࿈ܞ΍σόΠε؅ཧ΋؆୯ʹͳΓ·͢ɻ ιϥίϜͱͷ࿈ܞͰɺϓϩϏδϣχϯά΍ηΩϡϦςΟ෦෼ ͷΦϑϩʔυΛ͢Δ͜ͱ΋Ͱ͖·͢ɻ *P5Λ͜Ε͔ΒॳΊͯΈΔํʹ͸ɺ"84*P5ͱ403"$0. 4*.Λ͝ར༻͍ͨͩ͘ͱΫΠοΫʹಋೖ͍ͨͩ͘͜ͱ͕Ͱ͖ ·͢ɻ

  49. ؔ࿈͢Δηογϣϯ • %BZ • σόΠεɺΫϥ΢υͷ૒ํ޲௨৴ σβΠϯύλʔϯͱ࣮ફ • %FFQ%JWFແઢςΫϊϩδʔͱ ௨৴ϓϩτίϧͱলిྗੑೳ •

    %BZ • 403"$0.͕࣮ݱ͢Δ*P5σόΠεͱ σʔλͷηΩϡϦςΟ • 403"$0.4*.*OTJEF "84༷ "84*P5$PSF#MBDL#FMU ։࠵
  50. 403"$0.ͷئ͍ Ϋϥ΢υ 㱺ଟ͘ͷϏδωεɺ8FCαʔϏε 403"$0. 㱺ଟ͘ͷ*P5ϏδωεɺγεςϜ ͨ͘͞Μͷ *P5ϓϨΠϠʔ͕ੜ·Ε·͢Α͏ʹ

  51. ੈքதͷώτͱϞϊΛͭͳ͛ ڞ໐͢Δࣾձ΁