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
PRO
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
PRO

November 18, 2020
Tweet

More Decks by SORACOM

Other Decks in Technology

Transcript

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

    View Slide

  2. Who am I ?
    亀田 治伸 (Harunobu Kameda)
    Facebook : facebook.com/harunobu.kameda/
    Github : github.com/harunobukameda/
    Sr. Developer Advocate
    Amazon Web Service Japan

    View Slide

  3. Control
    services
    AWS IoTのサービスレイヤー
    デバイスを制御、管理、保護する方法は?
    Device
    software
    Data
    services

    View Slide

  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

    View Slide

  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

    View Slide

  6. デバイス
    ゲートウェイ
    ルール
    エンジン
    メッセージ
    ブローカー
    デバイス
    シャドウ
    レジストリ
    認証
    サービス
    AWS IoT Core
    AWS IoT Coreは、IoTデバイスを簡単かつ、安全にクラウドアプリケー
    ションや他のデバイスと通信できるようにするマネージドサービスです

    View Slide

  7. Identity Service
    SigV4
    X.509
    Custom Auth
    Tokens
    証明書によるデバイスごとの認証
    独自もしくは AWS IoT が発行する
    X.509証明書による認証が可能。他にも
    SigV4 やカスタム認証トークン、Cognito
    をサポート
    ポリシーによるデバイスごとの認可
    デバイスごとに MQTT の Topic レベルで
    アクセスコントロールが可能

    View Slide

  8. Thing
    Thing レジストリ
    • デバイス レジストリとも言われる
    • 個々のデバイスで構成される組織化されたリソース
    • 個々のデバイスは3つまでの関連づけされたカスタム属性を登録
    可能
    • 証明書やMQTTクライアントIDとの関連付けも可能で、管理や
    トラブルシュートで利用できる
    7

    View Slide

  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のどのリソース(トピックなど)に対し、
    どのような権限を与えるか、きめ細かい権限設定が可能

    View Slide

  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 ロール

    View Slide

  11. 認証情報の安全な管理
    認証情報をセキュア領域に保存する
    認証情報の保存および認証操作に、
    • Trusted Platform Module
    • Hardware Security Module
    などのハードウェア保護モジュールを使用する

    View Slide

  12. 証明書発行とデバイス登録方法一覧
    1. AWS IoTによる秘密鍵・証明書発行&事前登録
    (デバイスキッティング時登録)
    2. AWS IoTによる証明書発行&事前登録
    (デバイスキッティング時登録)
    3. Fleet Provisioning登録
    4. 独自CAによる証明書発行&AWS IoTへの事前登録
    5. 独自CAによる証明書発行&JITRによる登録
    6. 独自CAによる証明書発行&JITPによる登録
    7. CA登録無しの証明書登録(マルチアカウント登録)
    詳細については AWS IoT におけるデバイスへの認証情報のプロビジョニング
    で解説しています

    View Slide

  13. AWS IoT Core - デバイスゲートウェイ
    • MQTT、WebSocket、HTTP のプロト
    コルをサポート
    • TLS 1.2 を使用した安全な通信
    • 大量なデバイスとの接続

    View Slide

  14. MQTT Publish/
    Subscribe
    Publisher
    Publisher
    Publisher
    Broker
    Topic:
    sensor/temp
    Subscriber
    Subscriber
    Subscriber

    View Slide

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

    View Slide

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

    View Slide

  17. MQTT QoS
    QoS=0
    At most once
    QoS=1
    at least once
    PUBACK
    PUBLISH
    PUBLISH
    ベストエフォート型。
    メッセージの到達を保証していない。
    オーバーヘッドは少ない。
    保証型。
    メーッセージの到達は保証。
    オーバーヘッドはQoS=0に比べて
    大きい。

    View Slide

  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’

    View Slide

  19. ルールエンジン 対応リソース

    View Slide

  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
    }
    ① ②


    View Slide

  21. バッチ処理での
    プロビジョニング
    リアルタイムでの
    インデックス化と検索
    デバイスロギング
    とモニタリング
    Jobの実行
    AWS IoT Device Management
    数回のクリックで完
    了する迅速なデバイ
    スの
    導入と設定
    デバイスログを収集
    して問題をすばやく
    特定して修正
    全デバイスのステー
    タスと状態を可視化
    グループに登録されて
    いるデバイスへジョブ
    を実行し管理する
    セキュアトンネリング
    ファイアーウォール越
    しのデバイスにセキュ
    アに
    アクセス

    View Slide

  22. バッチ処理での
    プロビジョニング
    デバイス全体のメタデータ、証明書、
    ポリシーなどデバイス情報を登録
    コンソール経由でのアップロードもし
    くは、すべてのデバイスを登録するた
    めのStartThingRegistrationTask APIを
    提供
    プロビジョニングの進行状況のトラッ
    キング、完了したタスクのレポートの
    ダウンロードが可能
    新しいデバイスのプロビジョニングや
    デバイスの再登録(例:証明書の
    ローテーション)
    数回のクリックで、接続されている
    デバイスをまとめてすばやく導入

    View Slide

  23. Jobs
    実行したジョブの各デバイスのステータ
    スを受信し、可視化します
    グループもしくは特定の1デバイスのみ
    に対して実行可能
    展開速度を制御し、障害基準を設定する
    ことによって、不具合の範囲を最小限に
    留めることも可能
    ジョブに署名をすることで、不正なジョ
    ブの実行を防ぎます
    グループに登録されているデバ
    イスへジョブを実行し管理する

    View Slide

  24. Jobsの種類
    Continuous Snapshot
    Jobモデル • Snapshot:
    Jobを作成したタイミングに存在するthing
    が対象で一度作るとJob通知の対象は変更さ
    れない
    • Continuous:
    Jobを作成した後も配信対象となるGroup
    にthingが追加されると通知が行われる。

    View Slide

  25. セキュアトンネリング
    マネージメントコンソールやAPIでトンネル
    を開/閉
    個々のデバイスにリモートデスクトップや
    シェルでアクセスし操作
    各トンネルのアクセス権をIAMで管理し、
    最大12時間のタイムアウトを設定
    各デバイスはMQTTメッセージ経由でアク
    セストークンを受信
    ファイアーウォール越しのデバイス
    にセキュアにアクセス

    View Slide

  26. セキュアトンネリング
    • セキュアトンネリングを用いることで、ファイアウォール内のIoTデバイスに対す
    るリモートアクセスが可能
    • 出荷後のデバイスのトラブルシューティングが容易に
    0. Localproxy アプリケー
    ションを install しておく
    (各 OS, HW に対応)
    2. 専用トピックに
    publish される
    token を取得して
    local proxy を起動
    1. トンネルを作成
    3. Token を
    利用して
    remote shell
    でアクセス
    4. プロキシ経由でリ
    モートアクセス
    (Websocket)

    View Slide

  27. 監査 アラート 修正
    検出
    IoT設定が安全で
    あることを検証
    デバイス動作の
    異常を検出
    いつ、何が起きたか
    知る
    潜在的な問題を
    修正
    AWS IoT Device Defender

    View Slide

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

    View Slide

  29. デバイス上で取得するメトリクス
    • TCP 接続の確立回数
    • TCP ポートのリッスン回数
    • リッスンする TCP ポート
    • UDP ポートのリッスン回数
    • リッスンする UDP ポート
    • 入力バイト数
    • 入力パケット数
    • 出力バイト数
    • 出力パケット数
    • 送信先 IP
    クラウド側で取得するメトリクス
    • 認証エラー
    • 接続試行
    • 切断
    • メッセージサイズ
    • 受信したメッセージ
    • 送信されたメッセージ
    • 送信元 IP
    メトリクス

    View Slide

  30. デバイスやユースケースに対して潜在的
    な問題に処置を講じる
    AWS IoT Device ManagementのJobを利
    用して
    権限の取り消し
    デバイスの再起動
    工場出荷時に戻す
    セキュリティパッチの配信
    Amazon SNSに利用してアクションを自
    動化
    セキュリティ問題を軽減
    潜在的な問題を修正

    View Slide

  31. ࣗݾ঺հ
    גࣜձࣾιϥίϜ ιϦϡʔγϣϯΞʔΩςΫτ
    খྊ઒ و࢙ ͜΍ͳ͕Θ ͔ͨ͠

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

    View Slide

  32. ιϥίϜʹ͓͚Δ"84*P5$PSFͷ࢖͍ॴ

    View Slide

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

    View Slide

  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

    View Slide

  35. 403"$0.#FBNͷ.255௨৴
    beam.soracom.io
    Publish Publish Subscribe
    Publish
    Subscribe
    Subscribe
    AWS IoT Core
    message
    broker

    View Slide

  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番号
    - 証明書

    View Slide

  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

    View Slide

  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へ設定した情報と依存関係を持
    たない)

    View Slide

  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バックエンドに接続可能

    View Slide

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

    View Slide

  41. "84*P5$PSFΛબ୒͠ͳ͍έʔε΋͋Δ
    • ैྔ՝ۚ
    ௿ස౓ͷ௨৴ɺϦΞϧλΠϜੑ͕
    ௿ͯ͘ྑ͍ϢʔεέʔεͰ͸ɺ
    .255ͷLFFQBMJWFύέοτ͕ෆ
    རʹͳΔ͜ͱ΋͋Δ
    • όοςϦʔۦಈ
    ৗઃͷిݯ͕औΕͳ͍Ϣʔεέʔ
    εͷ͓٬༷Ͱ͸όοςϦʔण໋ͷ
    Ԇ௕͕࠷༏ઌͱͳΔͷͰɺ௨৴ͷ
    ճ਺ΛݮΒ͢͜ͱͰόοςϦʔෛ
    ՙΛ΁Β͢
    σόΠε੍ޚͷϦΞϧλΠϜੑ͕ٻΊΒΕͳ͍ʢχʔζσόΠε
    εϖοΫͳͲʣ৔߹ɺ.255ϕʔεͷ૒ํ޲௨৴Λબ୒͢ΔͷͰ͸ͳ͘ɺ
    ੍ݶࣄ߲Λݩʹϓϩτίϧ΍࣮ݱํࣜΛߟ͑ΒΕΔ͓٬༷΋ଟ͍͘·͢ɻ

    View Slide

  42. ηΩϡϦςΟ؍఺Ͱͷ"84*P5ͱͷ઀ଓ

    View Slide

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

    View Slide

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

    View Slide

  45. 403"$0.#FBNΛ࢖ͬͨূ໌ॻӡ༻
    セキュア&クラウドネイティブな
    プロトコル
    SORACOM Beam
    プリミティブな
    プロトコル
    MQTT MQTTS
    AWS IoT
    証明書
    SORACOM Beam
    がAWS IoTのエンドポイント
    へ接続
    SORACOM Beam
    証明書の発行処理、
    SORACOMへ設定(APIでも
    可能)
    AWS IoT
    σόΠε͝ͱʹূ໌ॻ QPMJDZఆٛͷҟͳΔ
    Λར༻
    ͍ͨ͠৔߹ NVMUJDSFEFOUJBMTQFSHSPVQ ͱ͍͏
    ػೳ΋͋Γ·͢ɻ

    View Slide

  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とも言える。

    View Slide

  47. ҰํͰ4*.͸෺ཧ
    4*.ͷൈ͖ग़͠౪೉ʹΑΔରࡦͱͯ͠ɺ*.&*ϩοΫ
    *.&*

    ௨৴Ϟδϡʔϧ͕࣋ͭҰҙͷ*%৘ใͱ4*.ͷ
    *.4*͕Ұகͯ͠ͳ͍ͱ௨৴ΛڐՄ͠ͳ͍ઃఆ
    5IJOHT
    *OUFSOBUJPOBM.PCJMF&RVJQNFOU*EFOUJGJFSɿࠃࡍҠಈମ૷ஔࣝผ൪߸
    International Mobile Subscriber Identity:SIMカードに発行される加入者情報

    View Slide

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

    View Slide

  49. ؔ࿈͢Δηογϣϯ
    • %BZ
    • σόΠεɺΫϥ΢υͷ૒ํ޲௨৴
    σβΠϯύλʔϯͱ࣮ફ
    • %FFQ%JWFແઢςΫϊϩδʔͱ
    ௨৴ϓϩτίϧͱলిྗੑೳ
    • %BZ
    • 403"$0.͕࣮ݱ͢Δ*P5σόΠεͱ
    σʔλͷηΩϡϦςΟ
    • 403"$0.4*.*OTJEF
    "84༷ "84*P5$PSF#MBDL#FMU ։࠵

    View Slide

  50. 403"$0.ͷئ͍
    Ϋϥ΢υ 㱺ଟ͘ͷϏδωεɺ8FCαʔϏε
    403"$0. 㱺ଟ͘ͷ*P5ϏδωεɺγεςϜ
    ͨ͘͞Μͷ
    *P5ϓϨΠϠʔ͕ੜ·Ε·͢Α͏ʹ

    View Slide

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

    View Slide