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

イマドキ!ユースケース別に見る AWS IoT への接続パターン

seiichi
November 01, 2019

イマドキ!ユースケース別に見る AWS IoT への接続パターン

クラスメソッドに入社して早1年半、今まで6つのIoT案件に関わらせて頂きました。 どのプロジェクトもPoC段階からのスタートが多く、毎回多くの時間を費やすのが「AWS IoTへの接続方法をどうするか?」という問題です。 認証方法はどうするのか?通信プロトコルはMQTTで良いのか?接続先は特定のリージョンだけで良いのか?など一言に「接続」といってもいろいろな側面での選択肢を考慮しなくてはいけません。 このセッションでは、接続方法のいくつかの段階について紐解き、最終的にユースケース別での利用方法を紹介します。

seiichi

November 01, 2019
Tweet

More Decks by seiichi

Other Decks in Technology

Transcript

  1. 2 自己紹介 新井 成一(あらい せいいち) • 社歴 (1年半) • 2018年4月にサーバーレス開発部にJoin

    • これまで携わった案件 • APIのバックエンド開発: 2件 • IoTのバックエンド開発: 6件 • 好きなAWSサービス • Amazon API Gateway, AWS IoT など
  2. 8 IoT案件でよく思うこと A「ユースケースがわからない と答えられません!!」 とりあえずつ ないでみたい MQTTで位置情 報収集と遠隔操 作がしたい Q「AWS

    IoTにどうやって接続 するのか?」 開発者 (クラウド側担当) お客様 接続方法っていろいろな パターンがあるからな…
  3. 9 IoT案件でよく思うこと A「ユースケースがわからない と答えられません!!」 とりあえずつ ないでみたい MQTTで位置情 報収集と遠隔操 作がしたい Q「AWS

    IoTにどうやって接続 するのか?」 開発者 (クラウド側担当) お客様 接続方法っていろいろな パターンがあるからな…
  4. 11 今回する/しない話 今回する話 • AWS IoTの仕様の話 • どこにつなげれるのか? (WHERE) •

    どうやってつなぐのか? (HOW) • 仕様を踏まえた上での接続パターンの紹介 今回しない話 • エッジサイドの話 • 他のクラウドベンダーの話 • AWS IoT以外のサービスとの接続パターン
  5. 13 INDEX • AWS IoTへの接続に関する話(仕様) • エンドポイント ← WHERE •

    通信プロトコル ← HOW • 認証・認可 ← HOW • ユースケース別に接続パターンを紹介 • まとめ
  6. 17 AWS IoT Core is 何? AWS IoT Core は、インターネットに接続されたデ

    バイスから、クラウドアプリケーションやその他のデ バイスに簡単かつ安全に通信するためのマネージド型 クラウドサービスです。
  7. 20 INDEX • AWS IoTへの接続に関する話(仕様) • エンドポイント • 通信プロトコル •

    認証・認可 • ユースケース別に接続パターンを紹介 • まとめ
  8. 24 INDEX • AWS IoTへの接続に関する話(仕様) • エンドポイント • 通信プロトコル •

    認証・認可 • ユースケース別に接続パターンを紹介 • まとめ
  9. 28 MQTT vs HTTPS • サーバーからデバイスへの命令(遠隔操作) • MQTT • 一度コネクションを確立すれば、サーバーが任意のタイミングでデバ

    イスに対してメッセージの通知が可能 • HTTPS • クライアントがサーバーに対し、「定期的なポーリング」もしくは 「ロングポーリング」を行う必要がある • データ通信量や命令の即時性に影響
  10. 30 INDEX • AWS IoTへの接続に関する話(仕様) • エンドポイント • 通信プロトコル •

    認証・認可 • ユースケース別に接続パターンを紹介 • まとめ
  11. 42 IoT Policyの例 { "Statement": [ { "Effect": "Allow", "Action":

    [ "iot:Connect" ], "Resource": [ "arn:aws:iot:ap-northeast-1:123456789012:client/${iot:Connection.Thing.ThingName}” ] }, { ”Effect”: ”Allow”, ”Action”: [ ”iot:Subscribe” ], ”Resource”: [ ”arn:aws:iot:ap-northeast- 1:123456789012:topicfilter/devio/${iot:Connection.Thing.ThingName}/location" ] …以下省略
  12. 43 IoT Policyの例 { "Statement": [ { "Effect": "Allow", "Action":

    [ "iot:Connect" ], "Resource": [ "arn:aws:iot:ap-northeast-1:123456789012:client/${iot:Connection.Thing.ThingName}” ] }, { ”Effect”: ”Allow”, ”Action”: [ ”iot:Subscribe” ], ”Resource”: [ ”arn:aws:iot:ap-northeast- 1:123456789012:topicfilter/devio/${iot:Connection.Thing.ThingName}/location" ] …以下省略
  13. 44 ここまでのまとめ エンドポイント シングルリージョン マルチリージョン 通信プロトコル MQTT MQTT over WebSocket

    HTTPS 認証・認可 TLSクライアント認証 SigV4認証 カスタム認証 ※分解したが無理な組み合わせもあるので注意
  14. 45 INDEX • AWS IoTへの接続に関する話(仕様) • エンドポイント • 通信プロトコル •

    認証・認可 • ユースケース別に接続パターンを紹介 • まとめ
  15. 46 代表的な接続パターン ① デバイス TSLクライアント認証 MQTT/HTTPS シングルリージョン ② ユーザー SigV4認証

    MQTT over WebSocket/HTTPS シングルリージョン ③ ユーザー カスタム認証 MQTT over WebSocket/HTTPS シングルリージョン
  16. 49 代表的な接続パターン Before ① デバイス TSLクライアント認証 MQTT/HTTPS シングルリージョン ② ユーザー

    SigV4認証 MQTT over WebSocket/HTTPS シングルリージョン ③ ユーザー カスタム認証 MQTT over WebSocket/HTTPS シングルリージョン
  17. 50 代表的な接続パターン After ①-A デバイス ? TSLクライアント認証 MQTT/HTTPS シングルリージョン ①-B

    デバイス ? TSLクライアント認証 MQTT/HTTPS シングルリージョン ①-C デバイス ? TSLクライアント認証 MQTT/HTTPS シングルリージョン ② ユーザー ? SigV4認証 MQTT over WebSocket/HTTPS シングルリージョン ③ ユーザー ? カスタム認証 MQTT over WebSocket/HTTPS シングルリージョン
  18. 61 ①-A: キッティング登録 事前準備 初回起動 IoT Policyによって アクセス制御 MQTT/HTTPS ③

    エンドポイントに対し てTLS接続を開始 ① TLSクライアント認証 ②
  19. 76 ①-B: Bootstrap 事前準備 初回起動 新規認証情報を送信 ④ デバイス初期登録用 トピックへのPublish ①

    トピックへのメッ セージでLambda起動 ② ③ 新規認証情報の発行処理 ポリシーのアタッチ
  20. 77 ①-B: Bootstrap 事前準備 初回起動 新規認証情報 で接続開始 ⑤ デバイス初期登録用 トピックへのPublish

    ① トピックへのメッ セージでLambda起動 ② 新規認証情報を送信 ④ ③ 新規認証情報の発行処理 ポリシーのアタッチ
  21. 86 ①-C: JITR (Just in Time Registration) 事前準備 初回起動 ②

    登録済みのCAから発行され た証明書かチェックする エンドポイントに対して TLS接続を開始 ①
  22. 87 ①-C: JITR (Just in Time Registration) 事前準備 初回起動 検証が通れば、クラウド

    側に証明書が登録される ③ ② 登録済みのCAから発行され た証明書かチェックする エンドポイントに対して TLS接続を開始 ①
  23. 88 ①-C: JITR (Just in Time Registration) 事前準備 初回起動 検証が通れば、クラウド

    側に証明書が登録される ③ ② 登録済みのCAから発行され た証明書かチェックする エンドポイントに対して TLS接続を開始 ① IoT Policyをアタッチし て権限を付与 ④
  24. 89 ①-C: JITR (Just in Time Registration) 事前準備 初回起動 ⑤

    そのうち接続が 確立できる IoT Policyをアタッチし て権限を付与 ④ 検証が通れば、クラウド 側に証明書が登録される ③ ② 登録済みのCAから発行され た証明書かチェックする エンドポイントに対して TLS接続を開始 ①
  25. 96 ②: Amazon Cognito Identities MQTT over WebSocket / HTTPS

    事前準備 初回 アクセストークンを送信し、 一時クレデンシャルに変換 ② ① ログイン
  26. 97 ②: Amazon Cognito Identities MQTT over WebSocket / HTTPS

    事前準備 初回 署名(SigV4)をリクエスト に追加して接続開始 ③ アクセストークンを送信し、 一時クレデンシャルに変換 ② ① ログイン
  27. 98 ②: Amazon Cognito Identities MQTT over WebSocket / HTTPS

    事前準備 初回 ④ アクセス可否 アクセストークンを送信し、 一時クレデンシャルに変換 ② ① ログイン 署名(SigV4)をリクエスト に追加して接続開始 ③
  28. 108 ③: カスタム認証 事前準備 初回 ④ JWTをリクエスト に追加して送信 ペイロードの内容から 独自の処理を実行

    ③ 公開鍵で署名検証 ② MQTT over WebSocket/HTTPS ログイン ① ポリシーを返却 ⑤
  29. 109 ③: カスタム認証 アクセス可否 事前準備 初回 ④ JWTをリクエスト に追加して送信 ペイロードの内容から

    独自の処理を実行 ③ 公開鍵で署名検証 ② MQTT over WebSocket/HTTPS ログイン ① ⑥ ポリシーを返却 ⑤