2022年6月7日(火)開催のSORACOM UG Online #12 ~SORACOM Beamの再発見で、ソラコム Customer Reliability Engineer 三國直樹(mick) が発表した「SORACOM BeamとCloudflare Workersと、梅雨の布団」の公開資料
SORACOM Beam と Cloudflare Workersと梅雨の布団SORACOM UG Online #12 ~SORACOM Beam の再発見~Jun. 07, 2022株式会社ソラコムCustomer Reliability Engineer三國直樹 (mick / @n_mikuni)
View Slide
自己紹介三國直樹 (mick)Customer Reliability EngineerSORACOM の技術サポートやドキュメント等を担当好きな SORACOM サービス: SORACOM Lagoon好きな布団メーカー: my makura
今年も梅雨がやってくるRef: https://www.data.jma.go.jp/cpd/baiu/sokuhou_baiu.html
IoT 現場 (家庭) の心配事また雨か。最後に布団干したのいつだ?うちは 2 つしか干せない。次は誰の番?
• 布団を干したとき、誰のものを干したかを記録・通知• 記録を定期的に確認し、誰かの布団が一定期間干されていなかったら、通知作ったもの
構成SORACOM LTE-MButton for EnterpriseSORACOM BeamKV (Key-Value Store)Cloudflare Workers (futon-checker)Cloudflare Workers (futon-recorder)TriggerSlackIncoming Webhook布団干しの記録記録から布団干し忘れの確認https://github.com/nmikuni/cloudflare-futon-app-demo
• 使った理由: Cloudflare D1 と Cloudflare R2 が 話題になっていたので触ってみたかった• Amazon API Gateway + AWS Lambda が一つになったような使い勝手。Trigger でCron 実行できるのも良い。Cloudflare D1 や Cloudflare R2 は使えなかったが、KV (キーバリューストア) は使いやすかった• TypeScript による型定義や Wrangler CLI、サンプルが充実していて、安心してすぐに始められたCloudflare Workers を使ってみて
Cloudflare Workers の実装例設定ファイルで KV や cron を定義env.KV.get で読み込み、env.KV.put で書き込み直感的に ヘッダや body を取得
• Cloudflare Workers に認証の機構を実装したい場合、自分で考える必要がある(Amazon API Gateway のような X-API-Key を使ったヘッダ認証なども自分で書く)• SORACOM Beam はカスタムヘッダを付与できるので事前共有鍵によるヘッダ認証は容易に実装できた• Ref: https://qiita.com/n_mikuni/items/b63eade4f3bc275d7c70• 加えて事前共有鍵と SIM ID から生成する署名ヘッダでさらにセキュアにできた• Ref: https://github.com/nmikuni/cloudflare-futon-app-demoSORACOM Beam の使いどころ
1. SORACOM Beam と お客様サーバーへは事前に鍵を登録してある2. IoT Device から SORACOM Beam へデータが送信される3. SORACOM Beam は 事前共有鍵とIMSIなど、タイムスタンプをもとに署名を作成する4. SORACOM Beam は IMSI、タイムスタンプ、署名をヘッダに入れてデータとともに転送先のサーバーへ送る5. サーバーはヘッダから IMSI、タイムスタンプ、署名を取り出す6. サーバーは事前共有鍵とIMSIなど、タイムスタンプをもとに署名を作成する7. サーバーは自分が作成した署名と SORACOM Beam から送信された署名を比較する(※) 署名はタイムスタンプをもとに作成されているので、データ送信ごとに変わる(配布資料用) 署名が検証されるまでの流れ
SORACOM Beam の署名ヘッダによる認証IoT Device SORACOM Beam Customer Server事前共有鍵 事前共有鍵ハッシュ計算ヘッダに入れてデータと一緒に送信ccc2594804…SIM の情報 タイムスタンプccc2594804…SIM の情報 タイムスタンプハッシュ計算ccc2594804…比較 (検証)
SORACOM Beam の署名ヘッダによる認証の実装例Ref: https://users.soracom.io/ja-jp/docs/beam/verify-signature/: Beam が生成する署名ヘッダ: Beam は「SIM の IMSI などのパラメータ」「タイムスタンプ」「事前共有鍵」を結合したものを SHA256 というアルゴリズムでハッシュ化している。それぞれが正しければBeam が生成する署名ヘッダと同じものができるはず: 事前に SORACOMと Cloudflare Workersに登録した事前 (Pre) 共有 (Shared) 鍵 (Key): Beam が生成する署名ヘッダと、同じ方法で生成したハッシュとを比較
• Cloudflare Workers を使ってみることができた。とても使いやすいので、今後も活用できそう• SORACOM Beam と組み合わせることで、セキュリティを強化できることを再確認できた• この梅雨は布団の干し忘れを防げるはずまとめ