Slide 1

Slide 1 text

イマドキ!ユースケース別に見る AWS IoT への接続パターン CX事業本部 新井成一

Slide 2

Slide 2 text

2 自己紹介 新井 成一(あらい せいいち) • 社歴 (1年半) • 2018年4月にサーバーレス開発部にJoin • これまで携わった案件 • APIのバックエンド開発: 2件 • IoTのバックエンド開発: 6件 • 好きなAWSサービス • Amazon API Gateway, AWS IoT など

Slide 3

Slide 3 text

3 IoT案件開始するとき、 いつも思うことがあります

Slide 4

Slide 4 text

4 「AWS IoT使いたいんですが、 どうやって接続するんですか?」

Slide 5

Slide 5 text

5 答えるのが難しい…

Slide 6

Slide 6 text

6 IoT案件でよく思うこと Q「AWS IoTにどうやって接続 するのか?」 開発者 (クラウド側担当) お客様 接続方法っていろいろな パターンがあるからな…

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

10 ユースケース別に 接続パターンをまとめてみました

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

12 対象者 IoTやAWSをなんとなく知っている アカウント持ってるけどAWS IoTまだ使ったことない AWS IoT使っているけど接続パターンを整理したい

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

14 AWS IoTのサービス全体像

Slide 15

Slide 15 text

15 AWS IoTのサービス全体像 エッジサイド向 け クラウド側でのデ バイス管理など データ収集後の 分析向け

Slide 16

Slide 16 text

16 AWS IoTのサービス全体像 接続に関する 機能はココ

Slide 17

Slide 17 text

17 AWS IoT Core is 何? AWS IoT Core は、インターネットに接続されたデ バイスから、クラウドアプリケーションやその他のデ バイスに簡単かつ安全に通信するためのマネージド型 クラウドサービスです。

Slide 18

Slide 18 text

18 AWS IoT Coreのいろいろな機能

Slide 19

Slide 19 text

19 AWS IoT Coreのいろいろな機能 今回お話する 機能はココ

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

21 エンドポイント アカウント・リージョンごとに1つ 東京リージョンを含むアジア、米国、欧州などの全13 リージョンで利用可能

Slide 22

Slide 22 text

22 コンソールから簡単に確認できます

Slide 23

Slide 23 text

23 忘れがちだけど大事なこと グローバルに展開するIoTシステム • 全デバイスが同一リージョンにアクセスする必要はない • 近場のリージョンに接続するパターンを考える 複数環境(本番・開発)を持ちたい場合 • 1アカウント内の同じエンドポイントを共有するとアクセ スログの混在する • アカウント毎のエンドポイントに接続するパターンを考 える

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

25 通信プロトコル MQTT MQTT over WebSocket HTTPS

Slide 26

Slide 26 text

26 MQTTとは? Pub/Sub型のメッセージングモデルによる双方向通信 • ネットワークが不安定な場所でも動作しやすいように設計され ているので、軽量かつシンプル Publisher: メッセージの送信者 Subscriber: メッセージの受信者 Topic: メッセージの送受信先 Broker: メッセージを仕分けする仲介者

Slide 27

Slide 27 text

27 HTTPSとは? クライアント・サーバー間のリクエスト/レスポンス型 通信 • クライアントがサーバーに要求(HTTPリクエスト)を送信 • サーバが応答(HTTPレスポンス)を返却

Slide 28

Slide 28 text

28 MQTT vs HTTPS • サーバーからデバイスへの命令(遠隔操作) • MQTT • 一度コネクションを確立すれば、サーバーが任意のタイミングでデバ イスに対してメッセージの通知が可能 • HTTPS • クライアントがサーバーに対し、「定期的なポーリング」もしくは 「ロングポーリング」を行う必要がある • データ通信量や命令の即時性に影響

Slide 29

Slide 29 text

29 AWS IoTのMQTTでは QoS2と Retain がサポートされていないので注意 ※その他は基本的にMQTTv3.1.1に準拠

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

31 認証と認可について 認証とは? • 相手が誰(何)であるかを確認すること 認可とは? • 相手に特定の権限を与えること

Slide 32

Slide 32 text

32 認証方法と認証情報 X.509 クライアント 証明書 TLSクライ アント認証 AWSアクセスキー (クレデンシャル) で作成する署名 (SigV4) SigV4認証 ベアラートークン カスタム認 証

Slide 33

Slide 33 text

33 TLSクライアント認証の例

Slide 34

Slide 34 text

34 TLSクライアント認証の例 AWSコンソールからワンクリックで発行できます!

Slide 35

Slide 35 text

35 TLSクライアント認証の例

Slide 36

Slide 36 text

36 TLSクライアント認証の例 接続を要求

Slide 37

Slide 37 text

37 TLSクライアント認証の例 サーバー証明書 ください クライアント証明書 ください ① ②

Slide 38

Slide 38 text

38 TLSクライアント認証の例 TLSのセッション確立 サーバー証明書 ください ① ② クライアント証明書 ください

Slide 39

Slide 39 text

39 SigV4認証の例 後ほど紹介します。

Slide 40

Slide 40 text

40 カスタム認証の例 後ほど紹介します。

Slide 41

Slide 41 text

41 認可はIoT Policyでおこなう IoT Policyは… • クライアント証明書にアタッチすることで権限を付与 • AWS IoT Coreへの細かい接続制限が可能

Slide 42

Slide 42 text

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" ] …以下省略

Slide 43

Slide 43 text

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" ] …以下省略

Slide 44

Slide 44 text

44 ここまでのまとめ エンドポイント シングルリージョン マルチリージョン 通信プロトコル MQTT MQTT over WebSocket HTTPS 認証・認可 TLSクライアント認証 SigV4認証 カスタム認証 ※分解したが無理な組み合わせもあるので注意

Slide 45

Slide 45 text

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

Slide 46

Slide 46 text

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

Slide 47

Slide 47 text

47 おしらせ 接続パターンを洗い出してみて わかったこと

Slide 48

Slide 48 text

48 おしらせ 認証情報を いつ?どうやって? 払い出すのかが重要だった

Slide 49

Slide 49 text

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

Slide 50

Slide 50 text

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

Slide 51

Slide 51 text

51 注意事項 あくまでパターンで ベストプラクティスではないです 分かりやすさ重視のため 細かな手順は省いています

Slide 52

Slide 52 text

52 凡例

Slide 53

Slide 53 text

53 とりあえず デバイスをAWS IoTへ接続したい場合 (※主観ですが一番シンプル)

Slide 54

Slide 54 text

54 ①-A: キッティング登録 ①-A デバイス AWS IoTからデバイス毎に発行したクライアント証明書 TLSクライアント認証 MQTT/HTTPS シングルリージョン

Slide 55

Slide 55 text

55 ①-A: キッティング登録 事前準備 初回起動

Slide 56

Slide 56 text

56 ①-A: キッティング登録 事前準備 初回起動 各デバイス固有のクライアント証明 書・秘密鍵(以下、認証情報)を発行 ①

Slide 57

Slide 57 text

57 ①-A: キッティング登録 事前準備 初回起動 各デバイス固有のクライアント証明 書・秘密鍵(以下、認証情報)を発行 ① クライアント証明書へIoT Policy(権限)をアタッチ ②

Slide 58

Slide 58 text

58 ①-A: キッティング登録 事前準備 初回起動 デバイス毎に固有の 認証情報を埋め込み ③ クライアント証明書へIoT Policy(権限)をアタッチ ② 各デバイス固有のクライアント証明 書・秘密鍵(以下、認証情報)を発行 ①

Slide 59

Slide 59 text

59 ①-A: キッティング登録 事前準備 初回起動 エンドポイントに対し てTLS接続を開始 ① MQTT/HTTPS

Slide 60

Slide 60 text

60 ①-A: キッティング登録 事前準備 初回起動 MQTT/HTTPS TLSクライアント認証 ② エンドポイントに対し てTLS接続を開始 ①

Slide 61

Slide 61 text

61 ①-A: キッティング登録 事前準備 初回起動 IoT Policyによって アクセス制御 MQTT/HTTPS ③ エンドポイントに対し てTLS接続を開始 ① TLSクライアント認証 ②

Slide 62

Slide 62 text

62 Tips クラウド側は楽

Slide 63

Slide 63 text

63 Tips 生産現場でいろいろやることがある

Slide 64

Slide 64 text

64 ①-A: キッティング登録 事前準備 初回起動 各デバイス固有のクライアント証明 書・秘密鍵(以下、認証情報)を発行 クライアント証明書へ IoT Policyをアタッチ ① ② デバイス毎に固有の 認証情報を埋め込み ③

Slide 65

Slide 65 text

65 ①-A: キッティング登録 事前準備 初回起動 各デバイス固有のクライアント証明 書・秘密鍵(以下、認証情報)を発行 クライアント証明書へ IoT Policyをアタッチ ① ② デバイス毎に固有の 認証情報を埋め込み ③

Slide 66

Slide 66 text

66 ①-A: キッティング登録 事前準備 初回起動 各デバイス固有のクライアント証明 書・秘密鍵(以下、認証情報)を発行 クライアント証明書へ IoT Policyをアタッチ ① ② デバイス毎に固有の 認証情報を埋め込み ③

Slide 67

Slide 67 text

67 Tips インターネット接続 証明書を個別に発行&埋め込み作業 生産ラインを専用に用意

Slide 68

Slide 68 text

68 生産現場でデバイス毎の認証情報を 払い出すのが難しい場合

Slide 69

Slide 69 text

69 ①-B: Bootstrap ①-B デバイス 初回起動時にMQTTで取得したクライアント証明書 TLSクライアント認証 MQTT(must)/HTTPS シングルリージョン

Slide 70

Slide 70 text

70 ①-B: Bootstrap 事前準備 初回起動 デバイス初期登録用トピックのPub/Sub のみ行える認証情報を事前に発行

Slide 71

Slide 71 text

71 ①-B: Bootstrap 事前準備 初回起動 共通の認証情報を埋め込む

Slide 72

Slide 72 text

72 ①-B: Bootstrap 事前準備 初回起動 デバイス初期登録トピックで起動し、新 規認証情報を発行するLambdaを用意

Slide 73

Slide 73 text

73 ①-B: Bootstrap 事前準備 初回起動 デバイス初期登録用 トピックへのPublish ①

Slide 74

Slide 74 text

74 ①-B: Bootstrap 事前準備 初回起動 トピックへのメッ セージでLambda起動 ② デバイス初期登録用 トピックへのPublish ①

Slide 75

Slide 75 text

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

Slide 76

Slide 76 text

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

Slide 77

Slide 77 text

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

Slide 78

Slide 78 text

78 Tips 全デバイスに共通の情報なので 生産現場での作業は簡易化

Slide 79

Slide 79 text

79 Tips 共通の認証情報が漏洩が全デバイスに影響 デバイス・クラウドともに実装が追加 初回起動時の動作確認を入念にやる必要ある

Slide 80

Slide 80 text

80 生産現場でインターネットにはつなげない 社内ネットワークにはつなげる & 自前の認証局を用意できる場合

Slide 81

Slide 81 text

81 ①-C: JITR (Just in Time Registration) ①-C デバイス 自前の認証局からデバイス毎に発行したクライアント証明書 TLSクライアント認証 MQTT/HTTPS シングルリージョン

Slide 82

Slide 82 text

82 ①-C: JITR (Just in Time Registration) 事前準備 初回起動 自前の認証局のCA証明書 を事前登録

Slide 83

Slide 83 text

83 ①-C: JITR (Just in Time Registration) 事前準備 初回起動 各デバイスに固有の認証 情報の発行と埋め込み

Slide 84

Slide 84 text

84 ①-C: JITR (Just in Time Registration) 事前準備 初回起動 JITR登録完了通知で起 動するLambdaを用意

Slide 85

Slide 85 text

85 ①-C: JITR (Just in Time Registration) 事前準備 初回起動 エンドポイントに対して TLS接続を開始 ①

Slide 86

Slide 86 text

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

Slide 87

Slide 87 text

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

Slide 88

Slide 88 text

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

Slide 89

Slide 89 text

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

Slide 90

Slide 90 text

90 Tips 生産現場での作業は簡易化

Slide 91

Slide 91 text

91 Tips 自社管理のCAなら維持費が発生 デバイス・クラウドともに実装が追加 初回起動時の動作確認を入念にやる必要ある

Slide 92

Slide 92 text

92 ユーザーがモバイルやウェブアプリから AWS IoT Coreにつなぎたい場合

Slide 93

Slide 93 text

93 ②: Amazon Cognito Identities ② ユーザー Cognito Identity Poolsから取得した一時クレデンシャル SigV4認証 MQTT over WebSocket/HTTPS シングルリージョン

Slide 94

Slide 94 text

94 ②: Amazon Cognito Identities IdPsのクライアントIDを登録 事前準備 初回 MQTT over WebSocket / HTTPS

Slide 95

Slide 95 text

95 ②: Amazon Cognito Identities MQTT over WebSocket / HTTPS 事前準備 初回 ① ログイン

Slide 96

Slide 96 text

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

Slide 97

Slide 97 text

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

Slide 98

Slide 98 text

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

Slide 99

Slide 99 text

99 Tips ユーザーがメッセージブローカ経由で デバイスにメッセージが送れる 一時クレデンシャルを利用して 他のAWSサービスにも接続できる

Slide 100

Slide 100 text

100 Tips APIを設けるパターンと比べて メッセージのバリデーションはできない

Slide 101

Slide 101 text

101 独自の認証・認可戦略を行いたい場合

Slide 102

Slide 102 text

102 ③: カスタム認証 ③ ユーザー 認証基盤から払い出したJWT(Json Web Token) カスタム認証 MQTT over WebSocket/HTTPS シングルリージョン

Slide 103

Slide 103 text

103 ③: カスタム認証 キーペアの公開鍵 を登録 事前準備 初回 独自の認可 処理を実装 MQTT over WebSocket/HTTPS

Slide 104

Slide 104 text

104 ③: カスタム認証 事前準備 初回 MQTT over WebSocket/HTTPS ログイン ①

Slide 105

Slide 105 text

105 ③: カスタム認証 事前準備 初回 JWTをリクエスト に追加して送信 ② MQTT over WebSocket/HTTPS ログイン ①

Slide 106

Slide 106 text

106 ③: カスタム認証 事前準備 初回 JWTをリクエスト に追加して送信 ③ 公開鍵で署名検証 ② MQTT over WebSocket/HTTPS ログイン ①

Slide 107

Slide 107 text

107 ③: カスタム認証 事前準備 初回 ④ JWTをリクエスト に追加して送信 ペイロードの内容から 独自の処理を実行 ③ 公開鍵で署名検証 ② MQTT over WebSocket/HTTPS ログイン ①

Slide 108

Slide 108 text

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

Slide 109

Slide 109 text

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

Slide 110

Slide 110 text

110 Tips Lambda関数を利用して独自の認可処理を プログラマブルに組める アクセス制御の自由度は高め

Slide 111

Slide 111 text

111 その他 紹介しきれなかった接続パターンたち

Slide 112

Slide 112 text

112 紹介しきれなかった接続パターン マルチリージョンでの接続パターン • 自前CAを各リージョンに事前登録しておくことで、1つ のクライアント証明書でマルチリージョン接続が可能 Soracom SIMを利用する際の接続パターン • 証明書の発行を代行するサービス(Krypton)が利用可能 • 証明書なしでもAWS IoT Coreへメッセージを転送して くれるサービス(Funnel)が利用可能

Slide 113

Slide 113 text

113 まとめ 今回は下記3つの仕様を考慮した接続パターンをいくつ か紹介しました • エンドポイント • シングルリージョン/マルチリージョン • 通信プロトコル • MQTT/MQTT over WebSocket/HTTPS • 認証・認可 • TLSクライアント認証/Sigv4認証/カスタム認証

Slide 114

Slide 114 text

114 まとめ ユースケース別に 接続パターンを洗い出してみた!

Slide 115

Slide 115 text

115 まとめ デバイスへ認証情報を 発行するタイミングが重要だった…

Slide 116

Slide 116 text

116 まとめ AWS IoTを利用する際の 参考になれば幸いです

Slide 117

Slide 117 text

117 ご清聴ありがとうございました