Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Aws io tで証明書を自動登録してデータをアップするまでのお話し

1,028 views

Published on

発表後、心配になり中間CA証明書のことを調べ直しました。
「証明書+中間CA証明書」をAWS IoTに登録しCA証明書とするものでした!ごめんなさい(>_<)修正版をアップます。

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Aws io tで証明書を自動登録してデータをアップするまでのお話し

  1. 1. AWS IoTで証明書を自動登録 してデータをアップするまでの お話し JAWS-UG 上越妙高支部 第3回勉強会(サーバーレス勉強会)
  2. 2. 自己紹介 ● 知野 雄二(長野市からきました!) ● 長野市にあるコミュニティスペース「GEEKLAB.NAGANO」管理人 ● (株)日本システム技研(※ぎーらぼの運営会社) ○ PythonでWebアプリ ○ 最近はPythonでIoTの開発してます!(※まだまだ未熟) ● SNS ○ @chinoppy0727 ○ https://www.facebook.com/chinoppy ○ http://chinoppy.hatenablog.com/ ● 好きなAWSサービス ○ AWS IoT (とゆうかこれ以外がっつり触ったがありませんw)
  3. 3. AWS IoTを触ったことありますか? ● 趣味 ● ワークショップ ● 仕事 ● などなど
  4. 4. ちなみに・・・ サーバレスの勉強会にAWS IoT・・・ と思ったのですが、一応、Lambda、DynamoDB、 S3を使用するということで発表させていただきま す。 それとまだまだ勉強不足なところがあり、 よい方法などアドバイスいただけると うれしいです!
  5. 5. AWS IoTついて(簡単に) ● AWS IoTとは ○ インターネットに接続されたモノ(※)と AWS クラウドとのセキュアな双方向通信が可能になる ※例:センサー、アクチュエーター、    マイクロコントローラー、スマート家電などのデバイス ● 構成要素 ○ デバイスゲートウェイ ○ メッセージブローカー ○ ルールエンジン ○ セキュリティとアイデンティティサービス ○ Thing Registry ○ Thing Shadow ○ Thing Shadows サービス 引用:開発者ガイド>AWS IoTとは    https://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/what-is-aws-iot.html
  6. 6. 本日はモノとAWS IoTとのやりとり 「収集したデータの活用ではなく」、 どのようにAWS IoT を使ってデータなどを AWSにアップ、登録するか を仕事 で使った時のことも踏まえて 【お題】 ・モノと証明書をAWS IoTに自動登録 ・センシングしたデータを  AWS IoTを使ってDynamoDBにデータ登録 ・撮影した画像を  AWS IoTを使ってS3にデータ登録
  7. 7. 参考にさせていただいたもの AWS Black Belt Online Seminar 2017 IoT向け最新アーキテクチャパターン https://www.slideshare.net/AmazonWebServicesJapan/aws-black-belt-online-seminar-2017-iot
  8. 8. モノと証明書を AWS IoTに自動登録
  9. 9. その前に・・・ コンソールからモノを登録して利用開始するまで ・Thing Registryでデバイスを登録する ・デバイス証明書の作成とアクティブ化を行う ・AWS IoTポリシーを作成する ・AWS IoTポリシーをデバイス証明書にアタッチする ・モノに証明書をアタッチする
  10. 10. 実際にどんなことするか AWS Documentation AWS IoT 開発ガイドを引用してざっと説明 したいと思います
  11. 11. ● Thing Registryでデバイスを登録する ● デバイス証明書の作成とアクティブ化を 行う ● AWS IoTポリシーを作成する ● AWS IoTポリシーをデバイス証明書にア タッチする ● モノに証明書をアタッチする ・引用ページ https://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/reg ister-device.html デバイスを登録します
  12. 12. ● Thing Registryでデバイスを登録する ● デバイス証明書の作成とアクティブ化を 行う ● AWS IoTポリシーを作成する ● AWS IoTポリシーをデバイス証明書にア タッチする ● モノに証明書をアタッチする ・引用ページ https://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/reg ister-device.html
  13. 13. ● Thing Registryでデバイスを登録する ● デバイス証明書の作成とアクティブ化を 行う ● AWS IoTポリシーを作成する ● AWS IoTポリシーをデバイス証明書にア タッチする ● モノに証明書をアタッチする ・引用ページ https://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/reg ister-device.html
  14. 14. ● Thing Registryでデバイスを登録する ● デバイス証明書の作成とアクティブ化を 行う ● AWS IoTポリシーを作成する ● AWS IoTポリシーをデバイス証明書にア タッチする ● モノに証明書をアタッチする ・引用ページ https://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/reg ister-device.html
  15. 15. ● Thing Registryでデバイスを登録する ● デバイス証明書の作成とアクティブ化を 行う ● AWS IoTポリシーを作成する ● AWS IoTポリシーをデバイス証明書にア タッチする ● モノに証明書をアタッチする デバイスとAWS IoTとの通信はX.509証明書を使用して保護 コンソールから証明書の生成ができます ・引用ページ https://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/cre ate-device-certificate.html
  16. 16. ● Thing Registryでデバイスを登録する ● デバイス証明書の作成とアクティブ化を 行う ● AWS IoTポリシーを作成する ● AWS IoTポリシーをデバイス証明書にア タッチする ● モノに証明書をアタッチする ・引用ページ https://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/cre ate-device-certificate.html
  17. 17. ● Thing Registryでデバイスを登録する ● デバイス証明書の作成とアクティブ化を 行う ● AWS IoTポリシーを作成する ● AWS IoTポリシーをデバイス証明書にア タッチする ● モノに証明書をアタッチする ・引用ページ https://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/cre ate-device-certificate.html AWS IoTの証明書(A certificate for this thin) プライベートキー(A private key) ルートCA(A root CA for IoT)をダウンロードし、デバイスに配置
  18. 18. ● Thing Registryでデバイスを登録する ● デバイス証明書の作成とアクティブ化を 行う ● AWS IoTポリシーを作成する ● AWS IoTポリシーをデバイス証明書にア タッチする ● モノに証明書をアタッチする ・引用ページ https://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/cre ate-device-certificate.html AWS IoT操作(接続、送信など)の実行をデバイスに許可するために、 AWS IoTポリシーが使用される
  19. 19. ● Thing Registryでデバイスを登録する ● デバイス証明書の作成とアクティブ化を 行う ● AWS IoTポリシーを作成する ● AWS IoTポリシーをデバイス証明書にア タッチする ● モノに証明書をアタッチする ・引用ページ https://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/cre ate-iot-policy.html arn:aws:iot:your-region:your-aws-account:client/<my-client-id>
  20. 20. ● Thing Registryでデバイスを登録する ● デバイス証明書の作成とアクティブ化を 行う ● AWS IoTポリシーを作成する ● AWS IoTポリシーをデバイス証明書にア タッチする ● モノに証明書をアタッチする ・引用ページ https://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/cre ate-iot-policy.html
  21. 21. ● Thing Registryでデバイスを登録する ● デバイス証明書の作成とアクティブ化を 行う ● AWS IoTポリシーを作成する ● AWS IoTポリシーをデバイス証明書にア タッチする ● モノに証明書をアタッチする ・引用ページ https://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/att ach-policy-to-certificate.html AWS IoTポリシーを作成しましたので、デバイスが送信時に提示する 証明書にアタッチする必要がある AWS IoTポリシーを証明書にアタッチすると、ポリシーに指定されてい る内容が、デバイスに許可される!
  22. 22. ● Thing Registryでデバイスを登録する ● デバイス証明書の作成とアクティブ化を 行う ● AWS IoTポリシーを作成する ● AWS IoTポリシーをデバイス証明書にア タッチする ● モノに証明書をアタッチする ・引用ページ https://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/att ach-policy-to-certificate.html
  23. 23. ● Thing Registryでデバイスを登録する ● デバイス証明書の作成とアクティブ化を 行う ● AWS IoTポリシーを作成する ● AWS IoTポリシーをデバイス証明書にア タッチする ● モノに証明書をアタッチする ・引用ページ https://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/att ach-policy-to-certificate.html
  24. 24. ● Thing Registryでデバイスを登録する ● デバイス証明書の作成とアクティブ化を 行う ● AWS IoTポリシーを作成する ● AWS IoTポリシーをデバイス証明書にア タッチする ● モノに証明書をアタッチする ・引用ページ https://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/att ach-cert-thing.html 最後にThing Registryで作成した、AWS IoTでデバイスを表すモノにデ バイス証明書をアタッチ
  25. 25. ● Thing Registryでデバイスを登録する ● デバイス証明書の作成とアクティブ化を 行う ● AWS IoTポリシーを作成する ● AWS IoTポリシーをデバイス証明書にア タッチする ● モノに証明書をアタッチする ・引用ページ https://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/att ach-cert-thing.html
  26. 26. ● Thing Registryでデバイスを登録する ● デバイス証明書の作成とアクティブ化を 行う ● AWS IoTポリシーを作成する ● AWS IoTポリシーをデバイス証明書にア タッチする ● モノに証明書をアタッチする ・引用ページ https://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/att ach-cert-thing.html アタッチされていることの確認
  27. 27. ● Thing Registryでデバイスを登録する ● デバイス証明書の作成とアクティブ化を 行う ● AWS IoTポリシーを作成する ● AWS IoTポリシーをデバイス証明書にア タッチする ● モノに証明書をアタッチする ・引用ページ https://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/att ach-cert-thing.html
  28. 28. ● Thing Registryでデバイスを登録する ● デバイス証明書の作成とアクティブ化を 行う ● AWS IoTポリシーを作成する ● AWS IoTポリシーをデバイス証明書にア タッチする ● モノに証明書をアタッチする ・引用ページ https://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/att ach-cert-thing.html
  29. 29. デバイスはデバイス証明書作成時の ・証明書 ・プライベートキー ・およびルート CA 証明書 を接続、送信時に提示する ● Thing Registryでデバイスを登録する ● デバイス証明書の作成とアクティブ化を 行う ● AWS IoTポリシーを作成する ● AWS IoTポリシーをデバイス証明書にア タッチする ● モノに証明書をアタッチする デバイスが送信時に提示する証明書とデバイス証明書が関連 →このため、操作(アクセス権限)を管理する AWS IoTポリシー、  モノとも関連付けられる デバイス デバイス証明書 AWS IoTポリシー モノ これでAWS IoTにアクセスできるようになりました!
  30. 30. これ、デバイスが増えたら・・・ 今の作業を、コンソールから行うのは、現実的ではあ りません・・・ツライ
  31. 31. これらの作業を 自動化していきましょう
  32. 32. まず「デバイス証明書の自動/ジャストインタイム登 録」を使用 ・Thing Registryでデバイスを登録する ・デバイス証明書の作成とアクティブ化を行う ・AWS IoTポリシーを作成する ・AWS IoTポリシーをデバイス証明書にアタッチする ・モノに証明書をアタッチする
  33. 33. デバイス証明書の自動/ジャストインタイム登録 概要 デバイスが初めてAWS IoTに接続した時 に、デバイス証明書を自動的に登録 これを行うには、自前の証明書が必要とな ります! →AWS IoT側:CA証明書  デバイス側:証明書、        プライベートキー、        ルートCA証明書 デバイス デバイス証明書 CA証明書 ・証明書 ・プライベートキー ・およびルート CA 証明書
  34. 34. 自前で証明書を作成 ・「CA証明書」の作成  「opensslコマンド」「CLIコマンド」で作成  「証明書+中間証明書」をAWS IoTに登録→CA証明書  (ちなみに証明書の期間を指定するときに、「36500日」と指定すると   100年間有効(ほぼ無期限)のCA証明書ができますw) ・デバイス側でも「opensslコマンド(CA証明書による署名含む)」で  「証明書」「プライベートキー」を作成  「ルートCA証明書」はコンソールからダウンロード ・参考:AWS Documentation>AWS IoT>開発者ガイド … 自前の証明書を使用する https://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/device-certs-your-own.html#register-CA-cert
  35. 35. CA証明書をAWS IoTに登録、 自動登録の有効化 AWS IoTに登録し自動登録機能を「有効」にする ・参考:AWS Documentation>AWS IoT>開発者ガイド … 自前の証明書を使用する https://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/device-certs-your-own.html#register-CA-cert
  36. 36. デバイスからアクセスしてみる・・・ 接続にはデバイス側で 「AWS IoT SDK」のなかの 「AWS IoT Device SDK for Python」 を使用 デバイス デバイス証明書 CA証明書 ・証明書 ・プライベートキー ・およびルート CA 証明書
  37. 37. デバイスからアクセスしてみる・・・ 結果・・・ デバイス証明書は登録されましたが、 「PENDING ACTIVATION」 状態となり有効化されません・・・
  38. 38. ここでLambdaが登場!
  39. 39. Lambdaを使って追加で以下を自動化! ・Thing Registryでデバイスを登録する ・デバイス証明書の作成とアクティブ化を行う ・AWS IoTポリシーを作成する ・AWS IoTポリシーをデバイス証明書にアタッチする ・モノに証明書をアタッチする
  40. 40. 有効化、ポリシー作成、アタッチ 【処理】 ・AWS IoTポリシー作成 ・デバイス証明書を  AWS IoTポリシーにアタッチ ・デバイス証明書を有効化 デバイス デバイス証明書 CA証明書 ・証明書 ・プライベートキー ・およびルート CA 証明書 AWS IoTポリシー トピック ルール・アクション
  41. 41. トピック、ルール・アクション トピック ・AWS IoT、デバイスは「Sensor/temp/room1」のようなかたち(URLみたいなイメージ)に  パブリッシュ/サブスクライブすることにより、メッセージの送受信をおこなっている ・AWS IoTは証明書の自動登録時、または PENDING_ACTIVATION 状態の証明書の接続時、  以下トピックにメッセージをパブリッシュする  「$aws/events/certificates/registered/caCertificateID」 ルール・アクション ・上記、トピックをキーとして、動作(アクション)を指定できる
  42. 42. トピック、ルール・アクション
  43. 43. 再度、デバイスからアクセス! 名前がデバイス証明書の IDになる
  44. 44. 再度、デバイスからアクセス! ポリシーもできました! こちらも 名前が「Policy」+デバイス証明書 のIDになる
  45. 45. 再度、デバイスからアクセス! 証明書とポリシーも紐付いています
  46. 46. あるお客さんからこんなことを言われました もし、コンソールから 特定のデバイス証明書などを無効化 したいときは、どうやって探せば良いで すか???
  47. 47. あるお客さんからこんなことを言われました 確かに ・デバイス証明書 ・AWS IoTポリシー 名はIDの番号になっていて、どのデバイ スか判定できない・・・
  48. 48. モノの作成を自動化 デバイス デバイス証明書 CA証明書 ・証明書 ・プライベートキー ・およびルート CA 証明書 AWS IoTポリシー トピック ルール・アクション 「どのデバイスか判断できる名前」の モノと、証明書にアタッチするようにし てみる!
  49. 49. Lambdaを使って追加で以下も自動化! ・Thing Registryでデバイスを登録する ・デバイス証明書の作成とアクティブ化を行う ・AWS IoTポリシーを作成する ・AWS IoTポリシーをデバイス証明書にアタッチする ・モノに証明書をアタッチする
  50. 50. モノの作成を自動化 デバイス デバイス証明書 CA証明書 ・証明書 ・プライベートキー ・およびルート CA 証明書 AWS IoTポリシー トピック ルール・アクション 【処理】 ・モノの作成 ・モノにデバイス証明書を  アタッチする
  51. 51. 簡単にできると思ったのですが・・・ なかなか以下の2つを関連付けできませんでした・・・ ・「どのデバイスか判断できる名前」 ・アタッチするため「デバイス証明書のID」が必要 【解決策】 デバイスが接続してくるたびにAWS IoTがパブリッシュする 「$aws/events/presence/connected/+」 で、のルールを作成しモノを作成するLambdaを呼び出す! Lambdaのイベントのパラメタで2つ受け取れました ・モノの名前「client id」 ・デバイス証明書のID「認証情報」
  52. 52. ちょっとした落とし穴が・・・ Lambdaを作成して暫く経ってからコンソールでモノをみると、覚えのないモノが登 録されていた・・・
  53. 53. コンソールからアクセスしたときのもの だった・・・ テストなどを選択するとAWS IoTへの接続処理がは しるようで、メッセージがパブリッシュされ、 Lambdaが実行→モノが作成されていた・・・ ・コンソールの場合:認証情報がユーザID ・デバイスの場合 :認証情報がアクセス時の           デバイス証明書のID このため、本AWS IoT内に登録されている デバイス証明書か判断するようにしました。
  54. 54. 自動化できました! デバイス デバイス証明書 CA証明書 ・証明書 ・プライベートキー ・およびルート CA 証明書 AWS IoTポリシー トピック ルール・アクション
  55. 55. センシングしたデータを AWS IoTを使ってDynamoDBに データ登録
  56. 56. ここでDynamoDBが登場です!
  57. 57. ルール・アクションを使えば簡単 デバイス デバイス証明書 CA証明書 ・証明書 ・プライベートキー ・およびルート CA 証明書 AWS IoTポリシー トピック ルール・アクション
  58. 58. アクションの「DynamoDBv2」が便利
  59. 59. アクションの「DynamoDBv2」が便利 Json形式の項目を列にわけて登録してくれます! (アクション:DynamoDB側はJson形式の  まま1列に登録される) ・メッセージデータ { 'created': 'val1', 'sent': 'val2', 'snow': 'val3',  ・・・ } DynamoDB
  60. 60. ちなみに・・・
  61. 61. 撮影した画像を AWS IoTを使ってS3にデータ登録
  62. 62. ここでS3が登場です!
  63. 63. こちらもルール・アクションを使えば簡単 デバイス デバイス証明書 CA証明書 ・証明書 ・プライベートキー ・およびルート CA 証明書 AWS IoTポリシー トピック ルール・アクション
  64. 64. でも落とし穴が・・・ AWS IoTとの1回の送信は最大128KBの制約あり アップロードする画像は、それを超えていました・・・
  65. 65. ラージデータアップロードパターン AWS Black Belt Online Seminar 2017 IoT向け最新アーキテクチャパターン https://www.slideshare.net/AmazonWebServicesJapan/aws-black-belt-online-seminar-2017-iot
  66. 66. まとめ AWS 開発者ガイドが充実していて、大変参考になりました 証明書(openssl)の理解が難しかった(まだまだ理解が足りない) ルール・アクションを使うと簡単に他のAWSと連携できる! AWS IoT経由にしておけばデバイス証明書、ポリシーなどで操作権限 などを変更でき、一括管理できる
  67. 67. ありがとうございました 次はアップしたデータの活用方法などの話が できたらよいなぁっと思っています

×