Firebase Security Rules

1b177b37d966f573b1df5d7218a5f560?s=47 k2wanko
July 02, 2018
3.1k

Firebase Security Rules

1b177b37d966f573b1df5d7218a5f560?s=128

k2wanko

July 02, 2018
Tweet

Transcript

  1. Security Rules @k2wanko

  2. コキチーズ @k2wanko - GCPとFirebaseが好きな人 - 最近はPUBGとSplatoonで遊んでる - Firebase Japan User

    GroupのOrganizerやってます - 本職はセキュリティエンジニア、サラリーマン
  3. 最近、Firebase盛り上がってますね

  4. それと、 「合計1億件以上の個人情報がFirebaseの 脆弱性によって公開状態に」 って記事が話題ですね 原文: 62% of Enterprises Exposed to

    Sensitive Data Loss via Improperly Secured Firebase Databases
  5. どういう記事かというと

  6. セキュリティ会社の調査によって、 Firebase利用企業の62%が データベースのセキュリティルールに問題があり 機密情報が公開状態になっているとのこと

  7. たぶんこういうこと

  8. もしくは、こう

  9. これを踏まえて考える

  10. (俺の考えた) 最強のセキュリティルール

  11. None
  12. つまり、クライアントで 書き込みも読み出しも しない!!!!!!!!!!

  13. 以上!

  14. ありがとうございました!

  15. というわけには、いかないので ちゃんとやります。

  16. そもそも、セキュリティルールとは?

  17. クライアントからの読み書きを制御するためのルール セキュリティルールがあるのは3つのサービス Realtime Database Cloud Firestore Cloud Storage

  18. この3つのサービスはSDKから直接読み書きが可能 Realtime Database Firestore Storage

  19. Realtime Databaseのセキュリティルール

  20. Realtime Databaseとは - 書き込んだ内容をリアルタイムに同期してくれるデータベース - オフライン時でも書き込めるのでデベロッパーはネットワークを意識せず オンラインアプリが作れる。 - ゲームやチャットを作成するのに向いている -

    以降、Realtime DBと呼ぶ
  21. Realtime DBのルールはJSONで書いていく

  22. 全体公開

  23. 条件式を使ったデータの検証

  24. 上層でmatchすると下階層も同じルールが適用される

  25. $otherを使ったKeyの制御 意図しないプロパティを書き込まれないために利用

  26. Queryの制限 取得できる件数を制限できる。 例は100件まで

  27. まぁぶっちゃけJSONで書くの辛い

  28. 辛いポイント - コメントが書けない - 関数がない - 型がない - 条件式部分にハイライトがない

  29. そのための Bolt

  30. Boltとは - Realtime DBのセキュリティルールを生成するための独自の言語 - コメントを書いたり関数の定義ができる - TypeScriptの様な型が定義ができる - https://github.com/firebase/bolt

  31. None
  32. Cloud Storageのセキュリティルール

  33. Cloud Storage とは - 画像、動画などサイズの大きいデータを保存するためのストレージ - SDKを通してクライアントから直接アップロードできる - セキュリティルールはJSONじゃなくて独自言語で記述できる -

    コメントもあるし関数も定義できる - readはgetとlistに分割できる - writeはcreate,update,deleteに分割できる
  34. None
  35. 注意点

  36. GCSのアクセス制御と同期はしない resource.data.visibility == 'public' だと read: if false; でもURL経由から読み 取れる。

    GCSの機能のため 詳しくは アクセス制御オプション 参照
  37. Cloud Firestoreのセキュリティルール

  38. Cloud Firestoreとは - Realtime DBの次世代のドキュメント指向データーベース - 基本Realtime DBと同じことができる - クエリーが強化されてたり、バックエンドはSpannerで作られているので

    インフラ面の安定感もある
  39. Realtime DBとの違い (セキュリティ) - JSONじゃなくてStorageと同じ独自言語 - セキュリティルールとIndexの設定が分離 - IAMの設定もできる -

    ワイルドカードを除きルールがサブコレクションに適用されない - readはgetとlistに分割できる - writeはcreate,update,deleteに分割できる
  40. None
  41. Queryの制限 取得できる件数を10件に制限する allow list: if request.query.limit <= 10

  42. 現在データベースにあるドキュメントの評価 allow write: if get(/databases/$(database)/documents/games/$( game)).data.referee == request.auth.uid; アクセスしようとしてるところのはresourceで取得できるが、 それ以外のところはget()で取得する。

    get()やexists()は呼び出し回数に制限やreadの費用が掛かる。
  43. protobuf-rules-gen

  44. protobuf-rules-gen https://github.com/firebase/protobuf-rules-gen protocol bufferの定義から型検査をしてくれる セキュリティルールを生成するprotocのプラグイン

  45. まとめ - セキュリティルールは必ず設定しよう - シミュレータやE2E Testを活用して十分にテストしよう

  46. Enjoy @k2wanko

  47. 参考 https://firebase.google.com/docs/database/security/ https://firebase.google.com/docs/storage/security https://firebase.google.com/docs/firestore/security/overview https://firebase.google.com/docs/firestore/security/secure-data